커널 5.10.119로 업데이트 후 /proc/sys/kernel/random/entropy_avail
256에서 멈춰 마우스를 움직여도 바뀌지 않습니다. 예전에는 3,000이 넘었습니다.
# cat /proc/sys/kernel/random/entropy_avail
256
또한 /proc/sys/kernel/random/poolsize
256으로 떨어졌습니다. 예전에는 4096이었습니다.
이것은 버그입니까? 이 커널의 새로운 난수 생성기의 사용 가능한 엔트로피가 256개뿐이라는 것을 믿을 수 있습니까?
답변1
Marcus의 완전한 답변과 경쟁할 의도는 없습니다. 무슨 일이 일어나고 있는지 설명하고 당신이 발견한 것이 버그가 아니라는 것을 증명하기 위해서입니다.
기본 풀 크기는 하드코딩되어 있지만 drivers/char/random.c
5.10.119에서는 실제로 변경된 사항이 있습니다.
2011년 10월 5일 현재:
#define INPUT_POOL_SHIFT 12
#define INPUT_POOL_WORDS (1 << (INPUT_POOL_SHIFT-5))
...
static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
(2^(12-5))x32=4096
5.10.119 이하, poolsize는 다르게 계산되는 것 같습니다.
POOL_BITS = BLAKE2S_HASH_SIZE * 8
...
static int sysctl_poolsize = POOL_BITS;
BLAKE2S_HASH_SIZE = 32, 정의된 대로include/crypto/blake2s.h
8x32=256당신이 발견한 것은 버그가 아니라 기능입니다!
그건 그렇고, 이것은 기본값일 뿐이므로 필요에 맞지 않는 경우 자유롭게 변경하십시오.
참고: 이 변경 사항은 5.17-rc1이 119에서 5.10으로 백포트되었지만 44에서 최신 LTS로 백포트되었기 때문에 메인라인과 관련이 있습니다. 5.15는 (아직?) 신경 쓰지 않는 것 같고, 물론 5.16도 그럴 것입니다.
@TooTea가 댓글에서 제안했듯이 이러한 움직임의 이유는 다음과 같습니다.초기 커밋, 한마디로:
- 보안 강화(풀의 상태가 유출되면 해당 내용을 제어하고 완전히 0으로 만들 수 있습니다.)
- 향상된 성능(고급 CPU에서 최대 225%)
이는 4096 LFSR을 BLAKE2에 대한 직접 호출로 대체함으로써 달성됩니다.
BLAKE2s는 256비트를 출력하므로 적절한 최소 엔트로피 축적량과 활성 공격에 대한 충분히 넓은 충돌 저항 마진을 제공합니다.
답변2
우리는 할 수 있습니다.
이전에 동일한 값을 표시할 수도 있습니다. "엔트로피"는 의사 난수 생성기의 상태를 수정하는 데 사용할 수 있는 임의성의 소스 수에 대한 대략적인 추측일 뿐입니다. 있다고 해도아니요새로운 엔트로피를 사용하면 발전기는 여전히신뢰할 수 있는– 누군가가 상태를 파악하지 않는 한 (~해야 한다불가능한).
따라서 개인 키 생성과 같은 경우에도/dev/urandom(외부 엔트로피 소스에서 상태를 수정할 수 없는 경우에도 PRNG를 사용함)을 사용하는 것과 /dev/random(상태를 수정할 것이 없으면 차단함)을 사용하는 것 사이에는 보안상 차이가 없습니다.,~하지 않는 한공격자가 어떤 마법적인 방법으로 커널의 내부 PRNG 상태를 알고 있었을 수도 있다고 가정합니다(또는 매우 제한된 장치에서 엔트로피 소스가 없고 상태가 결정적이기 때문에 Linux를 초기에 부팅하기 때문에). 수백 비트의 엔트로피를 사용하면 암호화된 보안 PRNG가 그렇게 말할 것입니다.아무도무작위 생성기에서 데이터를 얻으면 내부 상태를 성공적으로 추측할 수 있습니다.
실제로 유일한 차이점은 엔트로피가 0이면 이미 암호화되어 안전한 PRNG가 다시 시드되지 않는다는 것입니다. "저장소"의 엔트로피가 3000인지 256인지는 전혀 중요하지 않습니다. 중요한 것은 당신이할 수 있는재시드 여부. (전에 말했듯이, "암호학적으로 일반적인" 작업을 수행하지 않는 한 이것은 중요하지 않습니다. 공격자가 암호를 완전히 알 수 없는 일회용 패드를 실제로 얼마나 자주 만들어야 합니까? 컴퓨터 상태는 다음과 같습니다.하나세대 이전 시점은 깨질 수 없나요? "공격자는 어느 시점에서 PRNG의 암호화 상태를 추론할 수 있을 만큼 전지전능하기 때문에" "NSA가 RSA를 깨려고 시도했습니다"와 같은 것이 아닙니다. )
솔직히 말하자면,
이것은 버그입니까? 이 커널의 새로운 난수 생성기의 사용 가능한 엔트로피가 256개뿐이라는 것을 믿을 수 있습니까?
커널이 보안 조치를 약화시키지 않을 것이라고 가정해야 합니다. 그렇지 않으면 임의성 소스의 이론적 엔트로피는 문제가 아니지만 커널은 의도적으로 사용자에게 알리지 않고 어떤 방식으로든 결정론적으로 만듭니다. :)
커널이 안전한 회귀를 하지 않는다고 믿지 않는다면, 컴퓨터가 예상한 수치를 제공할 것이라고 믿을 수 없기 때문에 실패한 것입니다. 그렇군요... 네 가능합니다. 아니면 이 업데이트로 표시되는 엔트로피만 변경하는 것이 아니라 오래 전에 자신만의 OS 구축을 시작해야 했습니다.
간단히 말해서:귀하의 컴퓨터가 영향을 받지 않는 한엔트로피가 충분하지 않습니다한 번,보안번호를 생성 중입니다. 난수를 얻기 시작하기 전에 256 엔트로피를 한 번만 사용한 다음 시스템의 나머지 수명 동안 0을 사용해도 괜찮습니다! 256을 갖는 것은 어느 때보다 더 필요합니다.