내 시스템에는 /var/lib/systemd/random-seed
시작 시 이를 엔트로피 풀에 로드하고 새 것으로 교체합니다. 닫히면 엔트로피가 저장됩니다. 나는 그 사이에 그것을 바꾼 어떤 것도 찾지 못했습니다.
정전 동안에만 종료되는 컴퓨터가 있는 경우 수집된 엔트로피는 디스크에 기록되지 않습니다. 따라서 정전 복구 시 엔트로피를 수집하는 데 시간이 걸립니다.
정상 작동 중에(예: 하루에 한 번) 엔트로피가 디스크에 저장되지 않는 이유는 무엇입니까?
답변1
이를 "엔트로피"라고 생각하는 것을 멈추는 데 도움이 됩니다. 이는 엔트로피와는 아무런 관련이 없으며 의사 난수 생성을 엔트로피 측면에서 잘못 생각하는 것은 이 주제에 대한 많은 오해의 원인입니다. 그러니 "엔트로피"에 대해 생각하지 마세요.
이름에서 알 수 있듯이 이것은씨앗값의사 난수 생성기.
PRNG에 대해 기억해야 할 한 가지는무작위가 아니야. 그것들은 완전히 결정적입니다. 초기 입력 값과 특정 PRNG 알고리즘을 알고 있으면 향후 각 "무작위" 출력 값을 결정할 수 있습니다.
이 경우 알고리즘은 잘 알려져 있습니다. 결국 오픈소스 커널의 일부로 출시됩니다. 따라서 무작위성의 핵심은씨앗. 제공되는 "임의성" 수준은 다음과 같습니다.예측 불가능성, 하나의 출력에서 다음 출력으로. 알고리즘과 이전 출력은 알지만 시드는 알 수 없습니다.도달할 수 없는 어려움다음 무작위 출력이 무엇인지 예측합니다. (이것은 PRNG의 공식적인 정의도 아니고 완전한 정의도 아닙니다.암호화로 안전함; 그러나 이 답변의 목적을 위해 제한된 근사치로 사용됩니다. )
이것이 Linux에서 많이 논의되는 문제의 근본 원인입니다. /dev/urandom
, 여기서는 간략하게 설명하겠습니다. 부트로더에서 시드는 다음과 같습니다.반품모두가 알고 있듯이. 무작위 출력은 완전히 예측 가능합니다.~까지PRNG는재시딩즉, 운영 체제 설치 런타임에 고유한(또는 가능한 한 가까운) 새로운 시드가 처음으로 제공됩니다.
/var/lib/systemd/random-seed
(시스템 OS에서), /var/lib/urandom/random-seed
(시스템이 아닌 Linux OS에서) 그리고 /var/db/entropy-file
(FreeBSD/TrueOS에서) 다음 부팅 시 첫 번째 리시드 값으로 적용할 수 있는 리시드 값을 최대한 빨리 저장하세요 .
중요한 것은 일단 부트로더에서 사용하면곧다른 다른 시드 값으로 바꾸십시오. 추측할 수 있듯이 시스템이 완전히 종료되지 않으면 이전 부트로더와 동일한 시드 값으로 재부팅되지 않습니다.
그러니 바꾸세요~ 사이부팅하고 닫는 것은 꽤 의미가 없습니다. 변해야 한다즉시 읽고 사용하세요, 그리고 교체비밀의이 운영 체제 실행의 수명주기 내에서. 그러나 그 값이 어떤 방식으로든 노출되지 않는 한, 그 동안 반복적으로 업데이트할 필요는 없습니다.
시드 값은 축적된 "엔트로피"가 아닙니다. 이것은비밀. 다음 PRNG 실행을 위한 시드 값입니다. Trusted Computing Foundation 외부에 노출되어서는 안 되며 예측하기 어려워야 합니다. 아이러니한 것은 단지예측할 수 없는이는 실제로 PRNG 자체의 출력일 수 있으며 실제로 systemd-random-seed
다음 부팅 시 다음 시드 값으로 사용하기 위해 다시 시드된 PRNG의 출력을 가져오는 와 같은 도구의 경우입니다.
따라서 종료 시 변경하는 이유는 OS가 실행되는 동안 다음 시드 값이 노출되는 경우 종료 시 이를 대체하면 공격자가 다음에 PRNG가 무엇인지 알 수 없게 된다는 것입니다.
이는 예측 가능하기 때문에 노출을 포함합니다. 이론적으로 각 시드가 이전 시드에 대해 PRNG를 즉시 실행하여 얻은 것을 알고 있는 경우 어떤 시드를 알면 모든 후속 시드가 결정될 수 있습니다. 다행히 PRNG는반품정기적으로더 멀리운영 체제가 실행 중일 때 다시 시드하십시오.다른시드 소스, 따라서 PRNG 출력에서 가져와 종료 시 저장되는 다음 시드 값은 운영 체제에서 현재 실행 중인 부트로더에 사용된 이전 시드를 알고 있더라도 예측할 수 없습니다.
이 기밀성은 중앙 공개 이미지에서 시스템을 "복제"할 때 시스템을 복제하지 않는 것까지 확장됩니다.
요약하면 다음 시드 값은 다음과 같습니다.아니요"엔트로피". 의미 있는 방식으로 누적되지 않으므로 어떤 방식으로든 빌드하거나 런타임에 "새로 고칠" 필요가 없습니다. 종자의 순서를 보장하기 위해 사용 후 즉시 교체해야 합니다.그들 자신예측할 수 없는 시퀀스, 그렇지 않으면 다음 시드는 PRNG의 완전히 예측 가능한 출력이고 마지막 시드는 PRNG가 다시 시드된 후 어느 시점에 PRNG 출력에서 한 번 업데이트되어야 합니다.두번째이는 운영 체제가 시작과 종료 사이에 자체적으로 다시 시드를 수행하므로 이 종료 시간에 대한 좋은(완벽하지는 않은) 근사치입니다.
추가 읽기
- 토마스 훈./dev/urandom에 대한 신화. 2uo.de.
- Ptacek, 토마스 H. (2016).Re: /dev/random – 새로운 접근 방식 . 해커 뉴스.
- /dev/random과 /dev/urandom을 사용하는 경우
- /etc 폴더의 어떤 구성 파일이 각 컴퓨터마다 고유해야 합니까?