나는 다른 답변 중 일부에서 주어진 조언에 충분히 혼란 스럽기 때문에이 기회를 제공 할 것입니다.
하자 무한 개의 비트 된 RNG (초기 상태가 공지되면 결정적 반드시 PRNG도)에 의해 생성 된 시퀀스 될 우리 시퀀스를 사용할 수있는 가능성을 고려하고 → X ⊕엑스⃗ , Y⃗ 엑스⃗ ⊕ Y⃗ 엑스⃗ ⊕Y⃗ 엑스⃗ 와이⃗
- (0) 서열의 진정한 랜덤 확률은 증가 또는 감소
- (1) 관측 가능한 비 랜덤 가능성의 가능성 (일부 관찰자는 일정량의 조사를 적용한 것으로 추정 됨)
- (2) 관찰 가능한 비 랜덤 성의 심각도 / 명백 함이 증가 또는 감소합니다.
먼저 (0)에 대해 생각해 보자. 세 가지 중 하나가 정확 해지기를 희망하는 유일한 것이다. 실제로 두 개의 입력 RNG 중 하나가 실제로 임의적이고, 편견이없고, 다른 것과 독립적 인 경우, XOR 결과는 실제로 무작위이며 편향되지 않습니다. 이를 염두에두고 를 믿는 경우를 고려하십시오엑스⃗ , Y⃗ ε엑스, ε와이엑스⃗ ⊕ Y⃗ ≤ ε엑스ε와이< m i n { ε엑스, ε와이}ε엑스, ε와이엑스⃗ , Y⃗
피r ( X⃗ ⊕ Y⃗ n o t t r u l y r a n d o m )≤최소{피r ( X⃗ n o t t r u l y r a n d o m ),피r ( Y⃗ n o t t r u l y r a n d o m ),피r ( X⃗ , Y⃗ d e p e n d e n t )}.
그러나 PRNG의 경우 (0)은 흥미롭지 않습니다. PRNG의 경우 해당 시퀀스 중 어느 것도 진정으로 무작위 일 가능성이 없기 때문입니다.
따라서 PRNG에 관한이 질문에 대해 우리는 (1) 또는 (2)와 같은 것에 대해 이야기하고 있어야합니다. 그것들은 "관측 가능", "심각한", "명백한", "명백한"과 같은 속성과 양의 관점에서 볼 때, 우리는 이제 콜 모고 로프의 복잡성에 대해 이야기하고 있습니다. 그러나 나는 이러한 측정에 의해 "01100110 ..."(기간 = 4)이 "01010101 ..."(기간 = 2)보다 "나중에" 00000000 ... "(일정).
엑스⃗ 와이⃗ 엑스⃗ ⊕ Y⃗ 엑스⃗ = Y⃗ 엑스⃗ = n o t ( Y⃗ )엑스⃗ ⊕ Y⃗ 엑스⃗ 와이⃗ 엑스⃗ 와이⃗ 엑스⃗ ⊕ Y⃗ -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의 상수 패리티 결과는 원래의 짝수 홀수-홀수 동작보다 훨씬 나빴습니다.
엑스⃗ 에스엑스와이⃗ 에스와이엑스⃗ ⊕ Y⃗
다시 말해, 이것은 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 링을하면 신뢰도가 높아질 가능성이 없으므로 그러한 목적으로 사용하지 않을 수 있습니다. 귀하의 질문에 대한 답변은 이것이 널리 유지되는 정서라고 생각합니다.