/dev/random에 쓰면 즉시 적용됩니다.

/dev/random에 쓰면 즉시 적용됩니다.

철학적이라고 가장 잘 설명할 수 있는 이유로 나는 다음 사항을 알고 싶습니다. X 시간에 /dev/random(또는 /dev/urandom)을 읽고 싶다고 가정해 보겠습니다. 한 경우에는 이 작업을 수행하지만 다른 경우에는 /dev/random이 동일한 상태에 있을 때 X 시간 전에 /dev/urandom에 일부 바이트 수를 푸시합니다. 출력이 동일합니까? 거대하고 이상한 우연의 일치로 인해 내가 작성한 특정 바이트가 /dev/random을 이전과 동일한 상태로 남겨두는 상황은 무시하십시오.

또 다른 질문 방법: /dev/random에 쓸지 여부/dev/random 상태를 변경하거나(우연하지 않는 한) /dev/random이 내 쓰기에 의해 영향을 받지만 먼 미래에만 영향을 받는다는 것을 의미하는 일종의 버퍼링(입력 또는 출력)이 있습니까?

참고: 나는 글을 쓰는 동안 추가 엔트로피를 얻을 수 있다고 선언하기 위해 ioctl을 사용하지 않습니다.

저는 이것이 "중요한" 질문이 아니라는 점을 강조하고 싶습니다. 제가 아는 한, 전 세계의 누군가가 하품을 했거나 하지 않았기 때문에 일부 양자 무작위성 하드웨어가 상태를 변경할 수 있다는 점을 충분히 이해합니다. 하품. 쓰지 마세요. 이 질문은 엄밀히 말하면 /dev/random에 쓰는 행위가 소프트웨어 상태를 즉시 변경하는지, 아니면 /dev/random이 다음에 얻을 내용을 버퍼링했는지(또는 결정할 때까지 쓴 내용을 버퍼링했는지)에 관한 것입니다. 무언가를 다시 시드하기 위해) 쓰기 효과가 지연됩니다.

이 질문은 분명히 적절하지 않은 질문이므로 제가 묻는 이유를 설명하겠습니다. 나는 /dev/random의 출력을 사용하여 게임 결과를 결정하는 게임을 실행하고 있습니다. 게임 중에 사람들이 중얼거리는데, 저는 그 오디오 스트림을 실시간으로 복사하고 해시한 다음 /dev/random에 푸시하겠습니다. 내가 결정하고 싶은 것은 "그렇게 말하지 않았다면 1이 나오지 않았을 것이다"라고 정확하지만 터무니없는 주장을 할 수 있는지, 아니면 어느 날 "네가 그렇게 말했다"라는 좀 더 약한 주장을 해야 할지 여부이다. 당신의 주사위를 괴롭히기 위해 돌아오세요. "

또한 흥미로운 점은 "지금 영향을 미치는 것"이 ​​/dev/random의 영구적인 속성인지 아니면 단지 현재 구현의 우연인지 여부입니다.

감사해요!

답변1

(drivers/char/random.c의 문서가 정확하다고 가정하면) 작성한 모든 내용은 엔트로피 풀에 직접 혼합되며 무작위 출력은 해당 풀의 해시입니다. 그러므로 변화는 즉시 이루어져야 합니다.

그러나 /dev/random에서 읽는 것은 차단될 수 있고(엔트로피가 비어 있는 경우) 쓰기(폴링 사용)도 차단될 수 있으며(엔트로피가 가득 찬 경우) /dev/random에 쓰는 것은 일반적으로 매우 느릴 수 있습니다. 따라서 이 아이디어에는 몇 가지 성능 고려 사항이 있습니다.

사용자 불만 사항에 따라 임의의 데이터를 원하는 경우 /dev/random을 완전히 건너뛰고 자체 SHA 기능을 통해 모든 것을 롤링할 수 있습니다. 이것은 또한 당신에게 국가에 대한 완전한 통제권을 부여할 것입니다. 따라서 각 사용자에게 자신만의 해시 인스턴스를 제공하여 임의의 숫자가 전적으로 자신의 소리에 기반하도록 할 수 있습니다. 시스템 무작위성이나 다른 사람들의 말에 의존하지 않습니다. 또한 해시 함수 구현에 대해 배우고 준비된 오디오 패턴을 보내는 경우 속임수를 쓸 수도 있습니다. ;-)

그러나 그 이상으로 전체 아이디어는 매우 심오합니다. 무작위 데이터는 예측할 수 없으며 해시 결과도 마찬가지입니다. 무작위를 원하지 않는 한 /dev/_u_random아무 것도 쓰지 않고 읽는 것만으로는 의미가 없습니다.

관련 정보