답변:
이것을 "엔트로피"로 생각하는 것을 멈추는 데 도움이됩니다. 이것은 엔트로피와 관련이 없으며 엔트로피 측면에서 의사 난수 생성에 대해 잘못 생각하는 것은이 주제에 대한 많은 오해의 근원입니다. "엔트로피"에 대한 생각을 그만두십시오.
이름에서 알 수 있듯이 의사 난수 생성기 의 시드 값입니다 .
PRNG에 대해 기억해야 할 것은 그것들이 무작위가 아니라는 것 입니다. 그것들은 전적으로 결정 론적입니다. 초기 입력 값과 특정 PRNG 알고리즘을 알고 있다면 미래의 모든 "임의"출력 값을 결정할 수 있습니다.
이 경우 알고리즘은 잘 알려져 있습니다. 결국 오픈 소스 커널의 일부로 게시됩니다. 무작위성의 열쇠는 씨앗 입니다. 제공되는 "무작위"의 수준은 한 출력에서 다음 출력으로 예측할 수 없습니다 . 알고리즘과 이전 출력을 알고 있지만 시드는 알지 못하면 다음 임의 출력이 무엇인지 예측 하기가 어렵 습니다. (이것은 PRNG가 암호로 안전 하다는 의미의 공식적이거나 완전한 정의는 아니지만이 답변의 목적을 위해 제한된 근사치로 사용됩니다.)
이것이 리눅스에 대해 광범위하게 논의 된 문제에 대한 기본적인 이유입니다 /dev/urandom
. 부트 스트랩에서, 씨앗이되어 도 잘 알려져 있습니다. PRNG가 다시 시드 될 때까지 ( 즉, 해당 운영 체제 설치 실행에 고유 한 새로운 시드가 제공 될 때까지) 랜덤 출력을 모두 완전히 예측할 수 있습니다.
이것이 바로 /var/lib/systemd/random-seed
시스템 운영 체제, /var/lib/urandom/random-seed
비 시스템 Linux 운영 체제 및 /var/db/entropy-file
FreeBSD / TrueOS에 있습니다. 첫 번째 시드 값으로 적용될 수있는 다시 시드 값 보유 다음 부트 스트랩 후에 가능한 빨리.
중요한 것은 부트 스트랩에서 일단 사용되면 즉시 다른 다른 시드 값으로 대체 된다는 것입니다 . 이것은 예상 한대로 시스템이 완전히 종료되지 않은 경우 이전 부트 스트랩에서와 동일한 시드 값으로 재부팅되지 않습니다.
따라서 부트 스트랩과 셧다운 간에 변경하는 것은 의미 가 없습니다 . 읽고 사용한 직후 에는 변경 해야 하며 운영 체제 실행 중에는 교체품 을 비밀로 유지해야 합니다. 그러나 그 가치가 어떻게 든 드러나지 않는 한 그 동안 반복적으로 업데이트 할 필요는 없습니다.
시드 값은 일종의 "엔트로피"가 아닙니다. 그것은이다 비밀 . PRNG의 다음 실행에 대한 시드 값입니다. Trusted Computing Base에 노출되어서는 안되며 예측하기 어려워 야합니다. 그것은 단지가 될 필요가 있기 때문에 역설적으로 예측할 실제로는 PRNG 자체의 출력이 될 수 있으며, 그 사실 같은 도구의 경우 systemd-random-seed
다음 부트 스트랩에 다음 시드 값으로 사용할 수있는 재 시드 PRNG의 출력을, .
따라서 종료시이를 변경하는 이유는 운영 체제 런타임 동안 다음 시드 값이 어떻게 든 노출 된 경우 종료시이를 대체하면 공격자가 PRNG가 다음에 시드 될 대상을 배우기가 조금 더 어려워진다는 것입니다. 와.
그리고 그것은 예측 가능하기 때문에 노출되는 것을 포함합니다. 이론적으로, 각 종자가 이전 종자에 대해 PRNG를 즉시 실행하여 가져온다는 것을 알고 있다면 종자를 알면 모든 후속 종자를 결정할 수 있습니다. 다행히도, PRNG입니다 또한 주기적으로 추가 운영 체제에서 실행으로 다시 시드 다른 씨앗 소스, 그래서 하나가 있었다 이전의 씨앗을 알고있는 경우에도 종료에 PRNG 출력에서 가져온 저장되어 다음 시드 값이 예측하지 않습니다 운영 체제의 현재 실행을 위해 부트 스트랩에서 사용됩니다.
이 비밀은 중앙 공통 이미지에서 시스템을 "복제"할 때 복제되지 않도록 확장됩니다.
요약하자면, 다음 시드 값은 "엔트로피" 가 아닙니다 . 의미있는 의미로 발생하지 않으므로 런타임에 빌드, "새로 고침"이 필요하지 않습니다. 사용시 즉시 교체해야하며 시드 시퀀스 자체 를 예측할 수없는 시퀀스로 만들기 위해 다음 시드는 PRNG 및 마지막 시드의 전체 예측 가능한 출력이므로 PRNG 출력에서 업데이트해야합니다. , PRNG가 두 번째 로 다시 시드 된 후 어느 시점에서 종료 시간은 시작과 종료 사이에 운영 체제가 자체 시드를 수행 할 것이라는 점을 고려할 때 좋은 (그러나 완벽하지는 않은) 근사치입니다.