난수 생성기를 결합하지 않는 이유는 무엇입니까?


60

의사 난수 생성기가 사용되는 많은 응용 프로그램이 있습니다. 따라서 사람들은 나중에 결함이 있음을 발견하는 것이 좋다고 생각하는 것을 구현합니다. 최근 자바 스크립트 난수 생성기에서 이와 같은 일이 발생했습니다. 훨씬 일찍 RandU. Twister와 같은 부적절한 초기 시드 문제도 있습니다.

둘 이상의 발전기 제품군을 일반적인 xor 연산자와 결합한 사람의 예를 찾을 수 없습니다. java.SecureRandom 또는 Twister 구현과 같은 것을 실행하기에 충분한 컴퓨터 성능이 있다면 사람들은 왜 그것들을 결합하지 않습니까? ISAAC xor XORShift xor RandU는 상당히 좋은 예이며 다른 발전기가 단일 발전기의 약점을 완화 할 수있는 곳입니다. 또한 고유 알고리즘이 완전히 다르기 때문에 숫자를 더 높은 차원으로 분배하는 데 도움이됩니다. 그것들을 결합해서는 안되는 몇 가지 기본 원칙이 있습니까?

진정한 난수 생성기를 만들려면 사람들이 둘 이상의 엔트로피 소스를 결합하는 것이 좋습니다. 나의 예가 다른가?

동일한 제품군에서 여러 선형 피드백 시프트 레지스터가 함께 작동하는 일반적인 예를 제외하고 있습니다.


대답은 응용 프로그램에 따라 다를 수 있습니다. 의사 난수 시퀀스를 무엇에 사용 하시겠습니까?
Yuval Filmus

1
Fortuna ( en.wikipedia.org/wiki/Fortuna_%28PRNG%29 ) 를 발견 했습니까? 이것은 다양한 임의의 소스를 하나로 모으는 것으로 묘사 한 것과 비슷합니다.
Little Code

1
@LittleCode 실제로는 전혀 다른 소리가납니다. Fortuna는 단일 해시 함수에서 데이터를 출력합니다. 단일 출력 함수를 통해 해시하기 전에 많은 약한 엔트로피 수집 메커니즘을 망칠 수 있습니다. 여러 기능에서 출력하는 것과 관련된 내 질문은 무엇입니까? 이것이 충진 장치라면 속도는 관련이 없습니다.
Paul Uszak

1
곱하기-캐리 및 xor-shift와 같은 새로운 PRNG 유형을 발명 한 PRNG 분야의 유명한 연구원 인 George Marsaglia는 1990 년대에 3 개의 PRNG의 조합 인 KISS 제너레이터를 제안했을 때이를 정확하게 수행했습니다. 다른 유형의. 물론 암호화가 아닌 지난 20 년 동안 KISS를 성공적으로 사용해 왔습니다. KISS와 관련하여 유용한 2 차 자료는 Greg Rose의 2011 년 논문 입니다. 이 논문 에서 그는 조합 개념을 무효화하지 않는 구성 PRNG 중 하나와 관련된 문제를 지적합니다.
njuffa

4
Knuth는 의사 난수 생성기를 순진하게 결합한 결과 (하나의 난수를 사용하여 사용할 생성기를 선택)로 인해 고정 된 값으로 수렴하는 함수가 만들어졌습니다! 그래서 마이크로 컴퓨터 혁명 직전 시대에 그는 랜덤 제너레이터를 절대로 섞지 말라고 경고했습니다.
JDługosz

답변:


7

1955 Rand 베스트셀러 A Million Random Digits는 IIRC (그리고 이것은 메모리에서 온 것임)와 같은 일을했습니다. 컴퓨터가 싸기 전에 사람들은이 책에서 난수를 골랐습니다.

저자는 전자 노이즈로 임의의 비트를 생성했지만 바이어스 된 것으로 판명되었습니다 (플립 플롭이 플립과 플롭에서 정확히 같은 시간을 소비하는 것은 어렵습니다). 그러나 비트를 결합하면 분포가 훨씬 더 균일 해졌습니다.


45

물론 원하는 경우 PRNG를 독립적으로 시드한다고 가정하면 이와 같이 PRNG를 결합 할 수 있습니다. 그러나 속도가 느려지고 사람들이 가장 시급한 문제를 해결하지 못할 수도 있습니다.

실제로, 고품질 PRNG에 대한 요구 사항이있는 경우, 잘 검증 된 암호화 강도 PRNG를 사용하고 진정한 엔트로피로 시드합니다. 이렇게하면 대부분의 실패 모드는 PRNG 알고리즘 자체에 문제가되지 않습니다. 대부분의 실패 모드는 적절한 엔트로피가 부족하거나 구현 오류 일 수 있습니다. 여러 PRNG를 Xoring하면이 실패 모드에 도움이되지 않습니다. 따라서, 고품질 PRNG를 원한다면 아마도 그것들을 조정하는 데 별다른 의미가 없을 것입니다.

또는 시뮬레이션 목적에 충분한 통계적 PRNG를 원할 경우 일반적으로 # 1 문제는 속도 (의사 난수 생성 속도가 빠름) 또는 단순성 (연구 또는 구현에 많은 개발 시간을 소비하고 싶지 않음)입니다. Xor-ing은 PRNG 속도를 늦추고 더 복잡하게 만들므로 해당 컨텍스트의 주요 요구 사항도 해결하지 못합니다.

합리적인 보살핌과 역량을 발휘하는 한 표준 PRNG가 충분할만큼 훌륭한 이유가 없습니다 (Xoring 불필요). 최소 수준의 간호 또는 역량이 없다면, 아마도 코링과 같은 복잡한 것을 선택하지 않을 것입니다. 일을 개선하는 가장 좋은 방법은 PRNG 선택에서 더 많은 간호와 역량에 집중하는 것입니다. xor-ing보다는.

결론 : 기본적으로 xor 트릭은 PRNG를 사용할 때 사람들이 실제로 겪는 문제를 해결하지 못합니다.


3
"적절한 엔트로피 부족 ... 여러 PRNG를 Xoring해도 도움이되지 않습니다"-PRNG를 시드하는 데 필요한 엔트로피의 양이 증가하기 때문에 실제로 방해가 될 수 있습니다. 그렇기 때문에 제대로 검증 된 PRNG 중 하나가 완전히 쓰레기로 판명되는 것을 막아 주더라도 잘 검증 된 PRNG를 결합하는 것이 일상적인 관행이되고 싶지 않은 이유입니다 (사용중인 구현에서) .
Steve Jessop

또 다른 이유는 구현 버그가 알고리즘의 근본적인 문제보다 훨씬 더 흔하기 때문에 더 간단할수록 좋습니다. 표준 알고리즘은 적어도 다른 구현 또는 참조 값에 대해 테스트 할 수 있지만 맞춤형 xor는 할 수 없습니다.
Gilles

1
@DW 왜 "독립적으로 시드"? 내 질문은 다른 발전기 제품군의 조합과 관련이 있기 때문에 각 제품군은 동일한 시드에서 고유 한 출력 시퀀스를 생성해야합니다. 예를 들어, java.SecureRandom 및 RC4는 동일한 키에서 쉽게 시딩 된 후 결합 될 수 있습니다.
Paul Uszak

1
@DW 당신이 말한 가장 큰 가정은 "잘 알려진 암호화 강도 PRNG를 사용하는 것"입니다. 현실은 대부분의 암호화 암호, 해시 등에서 시간이 지남에 따라 약점이 발견되는 것처럼 확인하기가 실제로 불가능합니다. 그들은 어제 또는 어제에 대한 지식으로 "잘 심사되었습니다".
Shiv

1
@PaulUszak, 두 발전기를 조정하면 버그가 발생하기 쉽다고 주장한 적이 없습니다. 좋은 PRNG (단 하나)를 선택하면 가장 실패한 실패 모드 중 하나는 시드 실패 또는 구현 실패이며 두 생성기를 xoring해도 도움이되지 않습니다. (물론 단일 PRNG가 실패하지 않으면 두 생성기를 xoring하는 것도 유용하지 않습니다.) 따라서 기본적으로 잘못된 문제를 해결합니다. 다시 말해, xoring 생성기는 불확실성의 가장 중요한 원인을 다루지 않기 때문에 확실하게 증가하지 않습니다.
DW

19

실제로, 이것을 정확하게함으로써 획기적인 것이 발표되었습니다.

텍사스 대학 컴퓨터 과학 교수 데이비드 주커만 (David Zuckerman)과 박사 과정생 인 에샨 채 토파 디아 (Eshan Chattopadhyay)는 두 개의 "저품질"랜덤 소스를 결합하여 "고품질"난수를 생성 할 수 있다는 것을 발견했다.

그들의 논문은 다음과 같습니다. 명시 적 2 소스 추출기 및 복원 함수


8
이 글은 UT의 PR 노력에도 불구하고 실질적으로 전혀 관련이없는 다른 주제에 대한 순전히 이론적 인 논문입니다.
Yuval Filmus

4
@ Yuval Filmus-그 의견을 확장하고 싶습니까?
NietzscheanAI

8
이론과 실습에는 큰 차이가 있습니다. 일반적으로 실무자들은 이론에 신경 쓰지 않으며 그 반대도 마찬가지입니다. 이 경우 UT의 PR 지점은 이론적으로는 적절하지 않은 것으로 설명하면서 훌륭한 이론 논문을 작성하기로 결정했습니다. 이 백서에서 고려한 문제는 실제적인 관점에서 그리 흥미롭지 않으며 충분히 잘 작동하는 간단한 솔루션을 제공하지만 실제로는 그렇게 할 수는 없습니다.
Yuval Filmus

2
또한,이 특정 논문은 추출기의 이론적 영역에서 하나의 작업 일뿐입니다. 같은 방식으로 해당 지역의 다른 용지에 비용을 청구 할 수 있습니다. 그들은 약한 소스를 결합하여 강력한 소스를 만드는 것에 관한 것입니다. 차이점은 매개 변수에 있습니다.
Yuval Filmus

3
마지막으로, 논문의 구성은 아마도 구현하려는 것이 아닌 과잉 일 것입니다. 이 유형의 구성에 대한 구체적인 매개 변수는 결정하기 어렵고 논문은 항상 점근 정권에 초점을 맞추고 상수를 무시하기 때문에 일반적으로 매우 나쁩니다.
Yuval Filmus

9

이 의사 난수 이진 시퀀스 라고 가정합니다 . 즉, 각각의 X i{ 0 , 1 } 에서 지원되는 랜덤 변수 이며 변수 X 1 , , X n 은 반드시 독립적 일 필요는 없습니다. 이 시퀀스가 ​​다음과 같은 방식으로 생성된다고 생각할 수 있습니다. 먼저 균일 한 임의의 키 K를 샘플링 한 다음 일부 함수 f ( K )를 사용합니다X1,,XnXi{0,1}엑스1,,엑스케이에프(케이) 를 사용하여 의사 난수 시퀀스를 생성합니다.

의사 난수 시퀀스 이 얼마나 좋은지 어떻게 측정 합니까? 특정 실현이 얼마나 좋은지 (Kolmogorov 복잡도를 사용하여) 측정하는 것이 가능하지만 여기서는 랜덤 변수 ( X 1 , , X n ) 의 전체 분포에 의존하는 측정에 중점을 둘 것 입니다. 그러한 예 중 하나는 엔트로피이지만 측정 값 L 의 두 가지 속성 만 필요합니다 . (더 큰 L ( ) 는 더 임의의 시퀀스를 의미합니다)엑스1,,엑스(엑스1,,엑스)()

  • 경우 A는 결정적 다음 시퀀스 (즉, 고정 된 시퀀스) L ( X 1Y 1 , ... , X n 개 ⊕에서 의 Y , N ) = L ( X 1 , ... , X의 N은 ) .와이1,,와이(엑스1와이1,,엑스와이)=(엑스1,,엑스)

  • 경우 두 개의 독립적 인 의사 랜덤 시퀀스이다 T ∈을 { 0 , 1 } 독립적 랜덤 비트이며 Z = X TL ( Z ) ( X 0 , X 1 ) .엑스0,엑스1{0,1}=엑스()(엑스0,엑스1)

첫 번째 속성은 측정 값이 번째 비트를 뒤집 으면 변하지 않음을 의미합니다 . 두 번째 속성은 우리가 두 개의 분포 X , Y를 혼합 하면 결과는 적어도 나쁜 것보다 낫다는 것을 의미합니다.나는엑스,와이

합리적인 임의성 측정은 첫 번째 속성을 만족시킵니다. 두 번째 특성은 엔트로피 및 최소 엔트로피 H 와 같이 가장 많이 사용되는 측정법으로 충족됩니다 .HH

우리는 이제 두 의사 난수 시퀀스를 XOR하는 것이 항상 좋은 아이디어임을 보여주는 정리를 진술하고 증명할 수 있습니다.

정리. 하자 동일한 길이의 두 개의 독립적 인 의사 - 랜덤 시퀀스들, 그리고하게 L은 (상기 두 조건을 만족 한)은 허용 랜덤 측정 될. 이어서 L ( XY ) ≥의 최대 ( L ( X ) , L ( Y ) ) .엑스,와이

(엑스와이)최대((엑스),(와이)).

증명. L 이라고 가정하자. 그러면 X Y는 분포의 혼합물 인 X의 ⊕의 Y 의 분포에 따라 혼합, Y는 . 이후 L ( X의 ⊕의 Y는 ) = L ( X를 ) 및 이들의 혼합물이 최악 분포 혼합 적어도 좋다는 우리 구 L ( X Y ) ≥의 L ( X를 ) . (엑스)(와이)엑스와이엑스와이와이(엑스와이)=(엑스)(엑스와이)(엑스) 

이것이 정리가 의미하는 두 개의 의사 난수 시퀀스를 XOR 경우 두 개의 사용하여 생성 된 것입니다 독립을 키를 허용 가능한 임의성 측정과 관련하여 XOR 된 더 나은 시퀀스보다 결과가 항상 우수하다는 것입니다.

실제로 두 개의 독립 키를 사용하기 위해 의사 난수 방식으로 하나의 키를 두 개의 키로 확장 할 수 있습니다. 그런 다음 두 키는 독립적이지 않습니다. 그러나, 우리가 하나의 키를 두 개의 키로 확장하기 위해 "비싼"방법을 사용한다면, 결과적인 두 개의 키는 "독립적으로"보일 것으로 예상되며, 따라서 정리는 "도덕적으로"유지 될 것입니다. 이론적 암호화에는이 문장을 정확하게 만드는 방법이 있습니다.


그렇다면 두 개의 의사 난수 생성기를 XOR해야합니까? 우리가 속도에 의해 제한받지 않는다면 확실히 좋은 생각입니다. 그러나 실제로 속도 제한이 있습니다. 그러면 다음과 같은 질문을 할 수 있습니다. 두 개의 PRNG가 있고 각각 발전기의 작동 시간 (및 강도)을 제어 하는 매개 변수 가 있다고 가정합니다 . 예를 들어, T 는 LFSR의 길이 또는 라운드 수일 수 있습니다. 하나의 PRNG를 매개 변수 T 1 로 사용하고 다른 하나를 매개 변수 T 2 로 사용하고 XOR을 결과라고 가정하십시오. 총 실행 시간이 일정하도록 T 1 + T 2 = t 라고 가정 할 수 있습니다 . 최선의 선택은 무엇입니까121+2= ? 여기에는 일반적으로 대답하기 어려운 상충 관계가 있습니다. 설정 ( t / 2 , t / 2 ) ( t , 0 ) 또는 ( 0 , t ) 보다 훨씬 나쁠 수 있습니다.1,2(/2,/2)(,0)(0,) .

여기서 가장 좋은 조언은 강력한 PRNG를 고수하는 것입니다. 시퀀스 생성에 더 많은 시간을 할애 할 수있는 경우 독립 키 (또는 값 비싼 PRNG를 사용하여 단일 키를 확장하여 생성 된 키)를 사용하여 여러 사본을 XOR하십시오.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 . 건설적인 목적을 달성 한 후에는 토론 결과를 반영하도록 답변을 편집하십시오.
Raphael

4

나는 다른 답변 중 일부에서 주어진 조언에 충분히 혼란 스럽기 때문에이 기회를 제공 할 것입니다.

하자 무한 개의 비트 된 RNG (초기 상태가 공지되면 결정적 반드시 PRNG도)에 의해 생성 된 시퀀스 될 우리 시퀀스를 사용할 수있는 가능성을 고려하고 X엑스,와이엑스와이엑스와이엑스와이

  • (0) 서열의 진정한 랜덤 확률은 증가 또는 감소
  • (1) 관측 가능한 비 랜덤 가능성의 가능성 (일부 관찰자는 일정량의 조사를 적용한 것으로 추정 됨)
  • (2) 관찰 가능한 비 랜덤 성의 심각도 / 명백 함이 증가 또는 감소합니다.

먼저 (0)에 대해 생각해 보자. 세 가지 중 하나가 정확 해지기를 희망하는 유일한 것이다. 실제로 두 개의 입력 RNG 중 하나가 실제로 임의적이고, 편견이없고, 다른 것과 독립적 인 경우, XOR 결과는 실제로 무작위이며 편향되지 않습니다. 이를 염두에두고 를 믿는 경우를 고려하십시오엑스,와이ε엑스,ε와이엑스와이ε엑스ε와이<나는{ε엑스,ε와이}ε엑스,ε와이엑스,와이

아르 자형(엑스와이 영형 아르 자형와이 아르 자형에이영형){아르 자형(엑스 영형 아르 자형와이 아르 자형에이영형),아르 자형(와이 영형 아르 자형와이 아르 자형에이영형),아르 자형(엑스,와이 이자형이자형이자형)}.

그러나 PRNG의 경우 (0)은 흥미롭지 않습니다. PRNG의 경우 해당 시퀀스 중 어느 것도 진정으로 무작위 일 가능성이 없기 때문입니다.

따라서 PRNG에 관한이 질문에 대해 우리는 (1) 또는 (2)와 같은 것에 대해 이야기하고 있어야합니다. 그것들은 "관측 가능", "심각한", "명백한", "명백한"과 같은 속성과 양의 관점에서 볼 때, 우리는 이제 콜 모고 로프의 복잡성에 대해 이야기하고 있습니다. 그러나 나는 이러한 측정에 의해 "01100110 ..."(기간 = 4)이 "01010101 ..."(기간 = 2)보다 "나중에" 00000000 ... "(일정).

엑스와이엑스와이엑스=와이엑스=영형(와이)엑스와이엑스와이엑스와이엑스와이 -observably - 랜덤하지 않은 없습니다되고.

그러한 놀라움 의존은 정말 큰 문제로 판명되었습니다.


무엇이 잘못되었는지의 예

이 질문은 "동일한 제품군에서 함께 작동하는 여러 선형 피드백 시프트 레지스터의 일반적인 예를 제외하고 있습니다"라고 말합니다. 그러나 XORing에 잘못 될 수있는 종류의 매우 간단한 실제 예를 제공하기 위해 당분간 그 배제를 배제 할 것입니다.

제 예제는 1983 년경 Unix의 일부 버전에 있던 rand ()의 이전 구현입니다. IIRC, rand () 함수의이 구현에는 다음과 같은 속성이 있습니다.

  • rand ()에 대한 각 호출의 값은 15 개의 의사 랜덤 비트, 즉 [0, 32767 범위의 정수)입니다.
  • 연속적인 리턴 값이 짝수-홀수-홀수-홀수; 즉, 최하위 비트가 0-1-0-1을 번갈아 가며 ...
  • 215
  • 215

원래 소스 코드를 찾을 수 없지만 https://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3A 에서 몇 개의 게시물을 함께 연결하여 추측 합니다. 위의 속성에 대한 내 기억과 일치하는 정확하게 다음 (C 코드)을 수행했습니다.

#define RAND_MAX 32767
static unsigned int next = 1;
int rand(void)
{
    next = next * 1103515245 + 12345;
    return (next & RAND_MAX);
}
void srand(seed)
unsigned int seed;
{
    next = seed;
}

상상할 수 있듯이,이 rand ()를 다양한 방식으로 사용하려고 시도하면 많은 실망이 생겼습니다.

예를 들어, 어느 시점에서 나는 반복적으로 무작위 동전 뒤집기 시퀀스를 시뮬레이션하려고 시도했습니다.

rand() & 1

나는나는1 여기서는 유용하지 않습니다 "; 실제로 우리가 말할 수있는 것은 번호가 매겨진 비트 위치가 다양한 정도의 유용성 / 무용성을 가지고 있다는 것입니다.

또한 결과를 더 많이 스크램블하거나 rand ()에 대한 여러 호출에서 반환 된 값을 XOR 링하는 것과 같은 것을 시도했습니다. 연속적인 rand () 값의 XORing 쌍은 물론 재난이었습니다. 나의 목적을 위해 (즉, "명백하게 무작위적인"코인 플립 시퀀스를 생성하기 위해), XOR의 상수 패리티 결과는 원래의 짝수 홀수-홀수 동작보다 훨씬 나빴습니다.

엑스에스엑스와이에스와이엑스와이

다시 말해, 이것은 XOR이 (1)과 (2)의 의미에서 합리적인 해석에 의해 상황을 악화시킨 예입니다. 다른 방법으로도 더 나쁩니다.

  • (3) XOR 된 최하위 비트는 명백히 바이어스되어있다. 즉, 모두 편향되지 않은 입력들 중 임의의 숫자 비트 위치와 달리, 0과 1의 동일하지 않은 주파수를 갖는다.
  • (4) 실제로 모든 비트 위치에 대해 XOR 결과에서 해당 비트 위치가 바이어스되는 시드 쌍이 있으며, 모든 시드 쌍에 대해 XOR에 바이어스 된 비트 위치가 (최소 5 개) 있습니다. 결과.
  • 214215

(3), (4), (5) 중 어느 것도 분명하지 않지만 모두 쉽게 확인할 수 있습니다.


마지막으로, 같은 가족의 PRNG 금지를 다시 소개해 봅시다. 여기서 문제는 누군가가 XOR을 사용하기 시작하고 (또는 공격자 통지) 상황이 (1) 그리고 (2), 즉 출력에서 ​​비 랜덤 패턴이 임계 값을 감지하지 못하고 눈에 띄거나 당황 / 재앙으로 교차 할 때까지, 그리고 그 시점에서 너무 늦다.

나는 대부분의 사람들이 "좋은"것과 "나쁜"것으로 간주하는 것을 모델링하는 가난한 일을하는 것으로 보이는 이론적 척도에 근거하여 "XOR은 상처를 입을 수 없다"라는 비 적절한 조언을 제공하는 다른 대답에 놀랐다. 실제 PRNG. 위의 rand () 예제와 같이 XOR이 상황을 악화시키는 명확하고 뻔뻔한 예제와는 그 조언이 모순됩니다. 상대적으로 "강한"PRNG가 rand () 인 장난감 PRNG의 XOR 일 때 반대 행동을 일관되게 표시 할 수 있지만, XOR을 좋은 아이디어로 생각할 수는 있지만 이론적 또는 경험적이므로, 그런 일이 발생한다고 가정하는 것은 비합리적입니다.

개인적으로, 젊음의 XORing rand ()에 놀랐고 내 인생 전반에 걸쳐 수많은 다른 놀람 상관 관계에 의해 물린 적이 있기 때문에 비슷한 전술을 다시 시도해도 결과가 다르다고 생각할 이유가 거의 없습니다. 그렇기 때문에 문제의 특정 RNG에 대해 안전하다고 확신 할 수있는 광범위한 분석과 심사가 이루어지지 않은 한 개인적으로 여러 PRNG를 함께 XOR하는 것을 꺼려합니다. 하나 이상의 개별 PRNG에 대한 신뢰도가 낮을 ​​때 잠재적 인 치료법으로 XOR 링을하면 신뢰도가 높아질 가능성이 없으므로 그러한 목적으로 사용하지 않을 수 있습니다. 귀하의 질문에 대한 답변은 이것이 널리 유지되는 정서라고 생각합니다.


문자 그대로 수십억의 사람들이 A5 / 1 사용법을 어떻게 설명합니까?
Paul Uszak

@PaulUszak 나는 모른다. 수십억의 사람들이 사용하는 A5 / 1은 내가 말한 것과 모순됩니까?
돈 해치

그것은 실제로 당신을 방해하고 경고하는 방식으로 더 나은 것을 형성하기 위해 (동일하게 같은 가족에서) 세 prng입니다 ...
Paul Uszak

내가 불안하고 놀라게하는 것은 "확실하지 않다면, 계속해서 여러 RNG를 함께 XOR하십시오. 나는 XOR이 모든 경우에 나쁘다는 것을 말하거나 암시하지 않았으며, A5 / 1 또는 XOR의 사용에 대해 전혀 의견이 없습니다. 이를 명확하게하기 위해 최종 바보 같은 요약 진술을 변경하면 도움이 될까요?
돈 해치

1
마지막에는 단순한 "XORing RNG에 대해 거부"라는 말을 좀 더 현실적이고 희망이 덜한 것으로 바꿨습니다.
돈 해치

0

면책 조항 :이 답변은 "우리는하지 않습니다"에 관한 것이며 "여기서 작동하지 않거나 작동하지 않는 수학적 증거"가 아닙니다. 나는 XOR이 암호화 취약점을 도입한다고 주장하지 않습니다. 내 요점은 단지 가장 간단한 계획조차도 거의 항상 예상치 못한 결과를 초래한다는 경험을 보여줍니다. 이것이 우리가 피하는 이유입니다.

"무작위"는 RNG 및 PRNG와 관련하여 빙산의 일각 일뿐입니다. 예를 들어 균일 성과 같은 중요한 특성이 있습니다.

자체적으로 꽤 좋은 RNG 인 일반적인 주사위를 상상해보십시오. 그러나 이제 1-6 대신 1-5 범위가 필요하다고 가정 해 봅시다. 가장 먼저 떠오르는 것은 단순히 6 개의 얼굴을 지우고 여분의 1로 대체하는 것입니다. "임의성"은 여전히 ​​남아 있지만 (결과는 여전히 무작위입니다) 균일 성은 크게 저하됩니다. 이제 1은 다른 결과보다 두 배나 높습니다.

여러 RNG의 결과를 결합하는 것은 비슷하게 미끄러운 경사입니다. 예 : 2 주사위 던지기를 추가하면 "7"이 "2"또는 "12"보다 6 배 더 높기 때문에 균일 성을 완전히 없앨 수 있습니다. 나는 XOR이 언뜻보기에 덧셈보다 낫다는 것에 동의하지만 PRNGs에서는 언뜻보기에 아무것도 보이지 않습니다.

그렇기 때문에 우리는 알려진 구현을 고수하는 경향이 있습니다. 누군가가 많은 시간과 비용을 들여 연구하고 모든 단점을 잘 알고 이해하고 해결할 수 있기 때문입니다. 자신의 롤아웃을하면 잠재적으로 취약점이 생길 수 있으며이를 증명하기 위해 비슷한 노력을 기울여야합니다. 주사위 추가 예제에서 알 수 있듯이 결합은 처음부터 새로 만드는 것과 크게 다르지 않습니다.

보안은 가장 약한 구성 요소만큼 강력합니다. 보안상의 경험 법칙 : 두 가지를 결합 할 때마다 일반적으로 강점이 아니라 결함이 발생합니다.


7
강하게 동의. 임의의 시퀀스로 진정으로 임의의 시퀀스를 XOR해도 여전히 임의의 시퀀스를 얻습니다. 마찬가지로, 두 개의 독립적 인 의사 난수 시퀀스 를 XOR하면 (즉, 다른 키로 생성 된 경우) 각각 개별적으로 최소한 강력한 것을 얻습니다.
Yuval Filmus 10

3
이것은 나에게 잘못 보인다. 일반적인 경우는 필자가 본질적으로 임의의 비트를 생성하는 두 개의 고품질 RNG가 있다고 생각 하지만, 아마도 그들 중 하나 (또는 ​​아마도 덜 가능성이 있음)로 오해 될 가능성이 작은 엡실론이 있습니다. 내가 그들 중 적어도 하나에 대해 옳다면, 그것들을 함께 묶으면 결과는 무작위로 나올 것이고, 나는 좋습니다. 그래서 그것들을 결합함으로써 나쁜 RNG를 가질 수있는 기회를 대략 엡실론 / 2에서 극히 작은 엡실론 ^ 2로 줄였습니다. 컷 앤 트리 (cut-and-try)가 적은 경우에도 유사한 역학이 유지되는 것으로 생각됩니다.
돈 해치

2
나는 아직도 확신하지 못한다. "정말 무작위"를 쓸 때 "균일하게 무작위"를 의미했습니다. 임의의 시퀀스로 균일하게 임의의 시퀀스를 XOR하면 균일하게 임의의 시퀀스를 얻습니다.
Yuval Filmus

2
홍보[엑스나는+100=엑스나는]=(1+ϵ)/2나는=엑스나는와이나는홍보[나는+100=나는]=(1+ϵ2)/2ϵ2|ϵ|

3
@YuvalFilmus 항목 i와 항목 i + 100의 상관 관계가 크게 줄어든 것이 맞을 것입니다. 그러나 이것이 요점은 아닙니다. 매우 구체적이고 실제적인 예 : 유닉스의 오래된 crappy rand () 구현은 반환 된 각 31 비트 정수의 최하위 비트에서 주기적으로 동작했음을 기억합니다. 대부분의 사람들은 눈치 채지 못했습니다. 불행히도 시프트 크기의 시프트 된 사본 자체 (다른 시드를 사용할 때 얻는 것)가있는 일련의 정수를 사용하면 모든 짝수를 얻을 수 있습니다. 그건 매우 대부분의 목적을 위해, 원래의 순서대로 문제보다 더.
돈 해치
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.