숫자 생성기가 실제로 무작위가 아님을 어떻게 알 수 있습니까?


20

컴퓨터에서 난수 생성이 실제로 임의적이지는 않지만 효율적으로 감지 할 수있는 알고리즘이 없다고 들었습니다. 어떻게 감지 할 수 있습니까?


1
이 게시물 이 도움 될 수 있습니다.
Anton

6
pedantic 소리를 낼 위험이 있으므로, 당신이하는 모든 것이 출력을 검사하는 것이라면 주어진 소스가 무작위가 아니라고 확실하게 말할 수는 없습니다. 당신은 공정한 동전을 전환 할 수 있습니다 연속 시간 및 헤드마다 시간을 얻을, 그리고에 꼬리를 얻기의 기회 (10) (100) + 1 일 여전히 50 % 던져. 소스를 조사함으로써 우리는 일반적으로 비 랜덤 항목을 식별 할 수 있습니다 (예 : 의사 난수 생성기 ... 시드와 알고리즘에서 시퀀스를 예측할 수 있음). 많은 명백한 무작위성 출처는 확실하게 예측하기에 충분히 이해되지 않을 수 있습니다. 그러나 이것은 철학적입니다. 1010010100+1
Patrick87

@ Patrick87 "확실성"을 수학적으로 의미한다면, 그것은 사실입니다. 그러나 임의의 유의성을 제공 할 수있는 통계 테스트가 있습니다 (데이터가 "좋은"경우).
Raphael

@ Patrick87 일상을 소리의 위험에서 ... 당신은 "당신은 공정한 동전을 플립 수 있다고 행에 시간과 헤드마다 시간을 얻을"... 아니, 나는 할 수 없습니다. 심지어 10 3 헤드를 연속 으로 볼 수 있고 여전히 공정한 동전이라고 생각하는 모델은 현실을 잘 포착하지 못합니다. 그러나 이것은 실제로 철학적입니다. ;-)10100103
Don Hatch

답변:


15

컴퓨터가 실제로 무작위 인 경우 :

이론적으로 튜링 머신에는 진정한 임의성이 불가능하며 대부분의 컴퓨터는 진정한 임의의 출력을 생성 할 수 없습니다. 따라서 일부 최신 컴퓨터에는 컴퓨터가 외부 소스에 액세스 할 수있는 하드웨어가 포함되어 있기 때문에 희망에 따라 임의성이 포함됩니다. 이 작업을 수행하는 방법의 한 예는 컴퓨터 내부의 온도 변화를 추적하는 것입니다. 무작위성은 외부 소스에서도 얻을 수 있습니다. 그러나 귀하의 게시물 톤에서 나는 임의의 외부 소스가 당신이 관심있는 것이라고 생각하지 않습니다.

씨앗 :

외부 추가없이 컴퓨터가하는 모든 일은 결정 론적입니다. 난수 생성 프로그램을 호출하면 동일한 입력을 제공 할 때마다 동일한 결과를 제공합니다. 분명히, 우리는 실행될 때마다 동작을 변경하기 위해 난수를 출력하는 프로그램이 필요합니다 (그렇지 않으면 우리는 같은 "임의"숫자를 계속 얻습니다. 특히 도움이되지는 않습니다). 한 가지 아이디어는 프로그램에 입력을 제공하여 프로그램이 실행될 때마다 변경되어 다른 숫자가 출력되도록하는 것입니다. 이 입력을 "씨앗"이라고합니다. 난수 생성기는 시드를 가져 와서 일부 작업을 수행하고 난수를 제공해야합니다.

현재 시스템 시간은 시드의 전형적인 예입니다. 이것은 엔트로피가 높은 긴 줄을 제공하며, 시간이 충분히 세분화 된 방식으로 추적되는 경우 (즉, 시스템 시계가 시간을 사용하는 경우 "시간"은 상당히 가난한 시드) 의사 난수를 먹일 가능성이 없습니다. 같은 번호를 두 번 생성하십시오.

임의의 알고리즘 :

이제 우리는 적어도 실행될 때마다 다른 방식을 가진 알고리즘을 가지고 있습니다. 우리는 시드를 제공하고 알고리즘은 동일한 시드로 프롬프트 될 때 동일한 숫자를 제공하지만 생성 된 숫자는 임의의 숫자가되기를 원합니다. 이것은 위와 같이 작동합니다. 일부 입력을 받고 일부 (입력과 "임의의"임의의 차이) 출력을 생성합니다.

이제 당신이 이것을하기 위해 자신의 알고리즘을 생각해 냈고, 당신이 당신이 가진 숫자가 다른 씨앗을 줄 때 무작위 숫자에 가깝다고 주장합니다. 그것이 얼마나 좋은지 어떻게 테스트할까요?

이제 시드를 취하고 일부 연산을 수행하고 난수를 생성하는 알고리즘이 필요합니다. 가장 간단한 방법으로 알고리즘은 시드를 출력 할 수 있습니다. 매번 같은 숫자를 제공하지 않으며 임의의 시드는 임의의 출력을 제공합니다. 그러나 분명히 그것은 우리가 원하는 것이 아닙니다. 반면에 많은 실제 의사 난수 생성기와 같이 알고리즘은 상당히 복잡 할 수 있습니다. 불필요하게 임의의 종자에서 "임의의"숫자를 제공하는 알고리즘을 어떻게 알 수 있습니까? 정확히 얻을 수 없다면, 어느 것이 가장 좋은지 어떻게 알 수 있습니까?

1n

공격자를 속일 수있는 무작위 :

이제 당신이 말하는 것은 암호로 안전한 의사 난수 생성기입니다. 나는 이것을 설명하는 가장 좋은 방법은 위의 맥락에 있다고 생각합니다. 여기서 우리는 암호화에 임의성을 사용하고 있으므로 테스트를 설계 할 때 실제로 관심있는 것은 누군가가 침입 할 수 없다는 것입니다 우리가 선택한 임의의 숫자를 예측하여 보안. 암호화에 대한 친숙 함 수준을 모르지만 간단한 대체 암호를 사용한다고 가정합니다. 각 문자는 다른 문자로 바뀝니다. 우리는 이러한 대체물을 무작위로 고르기 위해 공격자가 추측하기 어렵습니다. 그러나 그가 내 난수 생성기가 어떻게 작동하는지 알아낼 수 있다면, 전체 암호를 풀 수 있습니다! 따라서 암호화 알고리즘에는 특히 추측하기 어려운 난수 생성기가 필요합니다.

이러한 이유로 CSPRG는 다른 알고리즘이 알고리즘을 얼마나 잘 해결하는지에 따라 정의됩니다. 특히, 내가 R이라고 부르는 CSPRG가 있다고 가정 해 봅시다. R은 다음에 출력 할 비트를 추측 할 수있는 실행 가능한 알고리즘이없는 경우에만 CSPRG입니다. 출력하는 모든 이전 비트를 알고 있더라도 마찬가지입니다!

CSPRG가 출력 한 처음 5 비트가 10100이라고 가정 해 봅시다. 프로그램에 사용한 입력을 모르지만 CSPRG를 작성하는 데 사용한 코드에 액세스 할 수 있습니다. 그렇다면 다음 비트 출력이 101000 또는 101001인지를 결정하는 프로그램을 작성하는 것은 불가능하다는 주장입니다.

따라서 암호화의 이유로 의사 난수 생성기가 얼마나 잘 수행하는지는 다른 프로그램에 얼마나 예측 가능한지에 따라 정의됩니다. 이것은 임의의 모든 출력이 이상하다는 것을 알고 있다면 암호로 안전하지 않으며 상식 무작위성 테스트를 통과하지 않기 때문에 여전히 "무작위성"의 직관을 많이 제공한다는 점에 유의하십시오.


7
이것은 전반적으로 좋은 (그러나 불완전한) 대답이지만 몇 가지 점이 잘못되었습니다. "모든 것이 결정론 적이므로 컴퓨터에는 진정한 임의성이 불가능합니다."항상 사실은 아니지만 일부 프로세서에는 하드웨어 RNG가 포함되어 있습니다. 컴퓨터는 또한 임의의 외부 입력에 반응 할 수 있습니다. “… 암호화의 경우, 우리는 그들이 어떻게 분배의 측면에서“무작위”인지에 대해 신경 쓰지 않습니다.”실제로는 CFS의 IV와 DSA의 k 매개 변수와 같은 암호화에서 균일 한 분포가 중요합니다.
Gilles 'SO- 악마 그만해'

그는 "외부 추가 없이는 컴퓨터가하는 모든 것이 결정 론적"이라고 썼다. 외부 추가는 언급 한 RNG와 같은 장치에 대한 참조입니다. 이러한 추가가 없으면 계산 기능은 진정한 임의성이 불가능한 TM의 기능과 동일합니다.
Kent Munthe Caspersen

내가 올바르게 기억한다면 Gilles의 의견 다음에 그것을 추가했습니다.
SamM

4

최근에 나는 MIT CSAIL Theory of Computation Group 블로그에서 계산의 무작위성에 관한 멋진 게시물을 발견했습니다 . 비트가 무작위인지 알 수 있습니까?

이 글은 계산에서 무작위성의 힘과 한계에 대한 Avi Wigderson의 멋진 이야기 에서 추출한 아이디어부터 시작하여 , 무작위 알고리즘의 아름다운 영역을 조사하고, 의사 난수와 계산 난도 간의 놀라운 연결을 연구합니다 .

그런 다음 양자 암호화에 대한 최근 결과를 요약합니다. 특히 특정 종류의 장치의 출력이 실제로 무작위인지 여부를 효율적으로 테스트하는 방법 (무작위 확장 프로토콜).

예를 들어 Umesh Vazirani, Thomas Vidick, Certifiable Quantum Dice (또는 테스트 가능한 지수 랜덤 확장) 의 최근 작업을 참조하십시오.

개요 : 우리는 한 쌍의 양자 역학적 장치가 O (log n) 균일 비트의 시드로부터 n 개의 진정한 랜덤 성을 생성하는데 사용될 수있는 프로토콜을 소개한다. 생성 된 비트는 사용자가 수행 할 수있는 간단한 통계 테스트 및 장치가 신호 없음 원칙을 준수한다는 가정에 기반하여 확실하게 무작위입니다. 장치의 내부 작동에 대한 다른 가정은 없습니다 ....


3

통계적 무작위성 에 대해 이야기한다고 가정하면 암호화에는 다른 요구 사항이 있습니다! - 일련의 숫자가 주어진 분포에 맞는지 여부를 탐지 할 수있는 다양한 적합도 검정이 있습니다. 이를 사용하여 (의사) 난수 생성기가 소리인지 테스트 할 수 있습니다 (테스트 품질 및 선택한 유의성에 따라 다름).

Diehard 테스트 스위트 는 다양한 방법을 결합합니다.


0

이것은 SamM의 다른 대답이 일부를 다루는 컴퓨터 과학의 광범위하고 복잡한 주제입니다. 귀하의 특정 질문은 컴퓨터가 무엇을 호출 한 경우에 대한 것으로 보인다 PRNG는 , 즉, 의사 난수 생성기, 하나가 어떻게 감지 할 수 있습니까?

짧은 대답은 사소한 PRNG가 알고리즘을 감지 (유도) 할 수 없도록 만들어 졌다는 것입니다. 일반적으로 PRNG가 "보안"인 경우 공격자는 의사 난수 시퀀스를 생성하는 데 사용 된 알고리즘을 알고 있어도 시퀀스 생성에 사용 된 특정 매개 변수를 추측 할 수 없습니다. 이런 식으로 의사 난수는 암호화와 깊은 관련이 있으며, 암호화 알고리즘이 "파손"될 수있는 것과 같은 방식으로 PRNG를 "파괴"하는 것에 대해 이야기 할 수 있습니다. 이 분야에는 많은 연구 논문이 있으며, 암호화의 최전선에있는 활발한 분야입니다.

예를 들어 선형 합동 발생기 (linear congruential generator) 와 같은 "사소한"PRNG의 경우 공격자가 알고리즘을 생성하는 데 사용 된 알고리즘을 알고 "bignums"로 생성되지 않은 경우 검색 공간이 "상대적으로 작음"이고 공격자가 이론적으로 매개 변수를 찾을 수도 있습니다. 특정 PRNG에서 기본적으로 무차별 대입 및 모든 조합 시도에 의해 사용됩니다.

PRNG는 경우에 따라 대규모 통계적 무작위성 테스트를 실행하여 실제로 ( "보안"에 따라) 실제로 중단 될 수 있습니다. 예를 들어 프로그램 "Dieharder" (Brown) 의 이론적 근거입니다 . 도있다 NIST 스위트 .

PRNG 파단의 본질적인 난이도 / 경도는 아직 이론적으로 입증 된 것은 아니지만 기본적으로 한 방향으로 효율적으로 계산할 수 있지만 반전하기 어려운 " 트랩 도어"또는 "일방 통행 함수" 와 관련이 있습니다. . 무작위성 경도와 관련하여 암호화에서 공개 된 문제가 있습니다. 이러한 질문은 복잡한 P <? NP 질문과 같은 복잡한 클래스 분리와 밀접한 관련이 있습니다.

PRNG 파괴에 대한 질문은 또한 시퀀스를 생성 할 수있는 가장 작은 Turing Machine을 연구하는 분야 인 Kolmogorov의 복잡성 과 관련 이 있습니다. PRNG를 깨는 것은 의사 난수 시퀀스를 계산하는 "가장 짧은"프로그램을 찾는 것과 밀접한 관련이 있습니다. 그리고 Kolmogorov의 복잡성은 일반적으로 계산할 수 없습니다.

Gilles가 의견에서 지적한 바와 같이, 양자 노이즈와 같은 물리적 전자 프로세스로 구축 된 하드웨어 기반 RNG 가 존재 합니다 . 올바르게 엔지니어링 된 경우 깨지지 않습니다.


"사소한 PRNG는 알고리즘을 감지 (유도) 할 수 없도록 구축되었습니다."-그렇다고 생각하지 않습니다. 사실, 다음 문장은 모순됩니다. 이 문제를 해결하기 위해 답변을 편집 하시겠습니까?
DW

그것은 더 정확하게 다룰 수 있지만 따르지 않을 수 있습니다. 귀하의 특정 이의는 무엇입니까? 요점은 시퀀스가 ​​생성되는 알고리즘은 알고리즘이 안전하고 무차별 대입이 성공하지 못할 경우 무차별 대입을 제외하고는 데이터 시퀀스에서만 결정될 수 없다는 것입니다.
vzn

1
나의 구체적인 반대 의견은 문장이 나에게 잘못 들린다는 것이다. PRNGs는 그들의 출력을 관찰하는 누군가가 알고리즘이 무엇인지 추론 할 수 없도록 설계되었다고 말하는 것처럼 들린다. 대부분의 PRNG는 누군가 알고리즘을 배우지 못하도록 설계되지 않았습니다. 일반적으로 알고리즘은 공개입니다. 아마도 PRNG가 출력을 실제 랜덤 비트와 구별 할 수 없도록 만들어 졌는가?
DW

1
"시퀀스를 생성하는 알고리즘은 알고리즘이 안전한 경우 무차별 강제 실행을 제외하고는 데이터 시퀀스에서만 결정할 수 없습니다."-이 또한 정확하지 않습니다. 알고리즘은 일반적으로 public입니다. 그것은 공개되지 않은 씨앗 일 뿐이며, 결과물에서 도출하기 어려운 씨앗 일뿐입니다.
DW

-1

사실 고전적인 컴퓨터가하는 모든 일은 결정 론적이며, 당신이 그들에게 몇 가지 작업을 주면 결정론적인 방식으로 수행한다는 의미에서 결정적입니다. 따라서 하나의 난수 를 원하면 시간에 따라 사용자의 입력 시간을 기준으로 계산할 수 있지만 난수 세트 를 원할 경우 다음 수에 시간을 사용할 수 없습니다. 숫자는 더 이상 독립적이지 않습니다.

사람들이하는 일은 시드가있는 의사 난수 생성기, 즉 의사 난수 생성기의 모든 수를 계산하는 데 사용되는 숫자를 사용하는 것입니다 (보다 복잡한 시뮬레이션 또는 다른 작업의 경우 더 많은 씨앗이 필요할 수 있습니다) , 둘 이상의 독립적 인 난수 세트가 필요한 경우). 재현 가능한 결과를 원할 경우 일반적으로 시드는 0이거나 특정 숫자이거나 재현 할 수없는 결과가 다른 경우 시간입니다.

의사 난수 생성기가 충분하다는 사실은 효율적으로 계산되고 실제 난수처럼 동작하기 위해 "의사 난수 생성의 기본 특성"을 따르는 사실에 있습니다.

  • 생산 된 숫자는 균일 한 분포를 따라야합니다 (이 분포에서 다른 분포를 달성 할 수 있음).
  • 생성 된 숫자는 통계적으로 독립적이어야합니다.
  • 시퀀스는 생식이 가능하다 (이 시점은 클래식 컴퓨터 하드웨어의 속성 때문에 부과된다. 이것이 "의사 난수"라고 불림).
  • 순서 기간은 충분히 커야합니다.
  • 숫자 생성 속도가 빨라야합니다.

의사 난수 시퀀스의 각 숫자에서 새로운 숫자가 계산됩니다 (일반적으로 정수로 작업). 그러나, 숫자 (예를 들어, 이진)를 표현하기 위해 유한 한 개수의 가용 비트로 특정베이스에서 동작하도록 준비된 일련의 의사 난수 생성기에는주기 n이 존재한다. 이 n이 충분히 크지 않으면 심각한 문제가 발생하지만 걱정하지 마십시오. 컴퓨터 과학자들은 좋은 n을 갖기 위해 의사 랜덤 생성기의 시드 및 기타 매개 변수를 잘 선택합니다.

예를 들어, 가장 오래되고 가장 잘 알려진 의사 난수 생성기 알고리즘 중 하나 인 선형 합동 방법을 사용하여 가능한 의사 난수 생성기의 정의는 다음과 같습니다.


-x_0 ≥ 0
-a ≥ 0
-c ≥ 0
-m> x_0의 네 가지 값이 있습니다. 여기서 :

x0은 초기 값이고, a, c 및 m은 상수입니다. 여기서 m> a, m> c이며 포뮬라로 시퀀스를 생성합니다.

x_ {i + 1} = (a * x_i + c) MOD m

이 상수 값은 신중하게 선택해야합니다. 한 가지 가능성은 다음과 같습니다.

x_ {i + 1} = (1664525 * x_i + 1013904223) MOD 2 ^ 32, 참조. [1-2]

난수를 생성하는 데 더 정교한 다른 알고리즘이 있는데, 여기에는 다음과 같은 이전 알고리즘의 일부 문제점을 피할 수 있습니다. [3]

  • 일부 시드 상태에 대해 예상 기간보다 짧은 (이러한 시드 상태는 '약한'이라고 할 수 있음);
  • 대량의 생성 된 수에 대한 분포의 균일 성 부족;
  • 연속적인 값의 상관 관계;
  • 출력 시퀀스의 잘못된 치수 분포;
  • 특정 값이 발생하는 위치 사이의 거리는 랜덤 시퀀스 분포와는 거리가 다릅니다.

미래에, 고전적인 컴퓨터는 실제로 임의의 숫자를 제공하고 전달할 수있는 양자 시스템에 통합 될 수있다. [4]

참고 문헌 :
[1] http://en.wikipedia.org/wiki/linear_congruential_generator
[2] William H., et al. (1992). "Fortran 77의 수치 레시피 : 과학 컴퓨팅 기술"(2 판). ISBN 0-521-43064-X.
[3] http://en.wikipedia.org/wiki/pseudorandom_number_generator
[4] http://www.technologyreview.com/view/418445/first-evidence-that-quantum-processes-generate-truly-random-numbers /


이것은 실제로 질문에 대답하지 않습니다. 주어진 RNG가 임의인지 여부를 감지하지 않고 난수를 생성하는 방법에 대해 설명합니다. 그럼에도 불구하고 당신의 설명은 다소 부족하지만, 선형 합동은 "최고의 것"이 아닙니다. 하드웨어 RNG가 현재 존재하므로 양자 컴퓨팅이 필요하지 않습니다. PC, 전화, 신용 카드 중 하나를 가질 가능성이 큽니다.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.