난수의 미스터리

오늘 우리는 컴퓨터가 실제로 어떻게 난수를 생성하는지 살펴보고 가장 중요한 것은 그것이 진정으로 '임의'입니까?

난수는 실제로 무엇입니까?



따라서 난수가 무엇인지 이해하려면 먼저 '임의'가 실제로 무엇을 의미하는지 이해해야 합니다. 다트의 각 착지 위치에 대해 특정 값이 있는 보드에 다트를 던지고 싶다고 가정해 보겠습니다. 여기서 결과를 예측할 수 없습니다. 10인지 540인지 아무도 모릅니다(당신이 다트를 던지는 Dennis Ritchie가 아닌 한!). 이제 결과를 알지 못하기 때문에 무작위 출력이 됩니다. 따라서 간단히 말해서 난수는 종속성이 없거나 예측할 수 없는 숫자 또는 출력입니다.

컴퓨터는 실제로 어떻게 난수를 생성합니까?



이것은 다음 질문으로 이어집니다. 내 노트북이나 스마트폰은 어떻게 난수를 생성합니까? 에헴… 그렇지 않습니다.
진짜!?
예, 그렇지 않습니다. 이것이 진실입니다. 어떤 결정적 컴퓨팅 시스템도 진정한 난수를 생성할 수 없습니다. 어떤 시스템, OS 또는 프로그래밍 언어를 사용하든 상관 없습니다. randint() 또는 이와 유사한 기능으로 생성된 어떤 숫자도 진정한 난수를 제공할 수 없습니다. 마우스 움직임이나 키 입력 간격 등과 같이 시스템에 이미 있는 것을 항상 사용합니다. 이것은 참조가 될 것이며 시스템은 미리 정의된 일부 논리를 적용하고 마지막으로 '임의' 숫자를 제공합니다. . 허점이 보이십니까? 기본 번호를 알면 같은 번호를 순식간에 재현할 수 있습니다. 혼란스러운? 파이썬에서 확인해보자.

>>> import random
>>> random.seed(20)
>>> random.randint(0, 1000)
927
>>> random.seed(25)
>>> random.randint(0, 1000)
386
>>> random.seed(20)
>>> random.randint(0, 1000)
927


여기에서 seed()를 사용하여 파이썬이 '임의' 숫자를 생성하기 위해 논리를 적용하기 시작해야 하는 기본 값을 설정합니다. 베이스를 매번 동일하게 만들면 동일한 출력을 얻을 수 있습니다. 모든 논리가 사전 정의되어 있고 우리의 컴퓨터는 인간처럼 생각할 수 없지만 매번 같은 값을 얻을 것입니다. 이제 AI/ML에 대해 생각할 수 있습니다. 사실 아니다. 세계 최고의 AI조차도 이것을 할 수 없습니다. 앞서 말했듯이 결정론적 시스템은 우리에게 진정한 난수를 줄 수 없습니다. 진정한 무작위성은 프로그래밍에 의해 완전히 생성될 수 없습니다.

좋아, 근데 내가 이걸 왜 쓰는 거지?



당신은 그렇게 생각하고있을 수 있습니다? 이 사람은 왜 이것을 작성하여 시간을 낭비하고 있습니까? 글쎄, 당신은 눈치 채지 못할 수도 있지만 난수는 도처에 있습니다. 여기에서 이 기사를 읽고 있는 경우에도 실제로 난수의 도움을 받고 있습니다. 난수는 암호화의 기초입니다. 가장 널리 사용되는 비대칭 암호화 알고리즘 중 하나인 RSA 알고리즘은 다른 많은 알고리즘과 마찬가지로 난수를 사용하여 공개 및 개인 키를 생성합니다. 이 난수 생성은 알고리즘이 강도를 유지하고 개인 데이터를 안전한 금고 뒤에 숨기는 데 중요합니다. 위에서 설명했듯이 해커가 난수를 알거나 추측하면 나머지 부분을 해독하기가 정말 쉽습니다.

그렇다면 컴퓨터가 진정으로 난수를 전달하도록 만들 수 있습니까?



현재로서는 귀하 또는 제 PC에서는 불가능하지만 다른 옵션을 찾을 수 있습니다. 양자 컴퓨터의 도움으로 우리는 진정한 난수를 생성할 수 있을 것입니다. 이것은 실제로 Quantum 컴퓨터의 기본 기능입니다. 그래서 그날 떠나겠다고 합니다. 나는 이것과 Quantum 컴퓨터가 실제로 어떻게 작동하는지에 대한 심층적인 세션을 위해 돌아올 수 있지만, 결국 인간의 행동이 무작위적인 것이라는 것을 누가 압니까? 오른쪽?!

좋은 웹페이지 즐겨찾기