AMD의 하드웨어 난수 생성기가 0을 못 만든다? Zen 2의 rdrand16에서 재현되고 Zen 4에서는 정상
- flat assembler 포럼 사용자 Jessé가 AMD CPU의 rdrand와 rdseed로 16비트 난수를 뽑으면 0이 한 번도 나오지 않는다고 제보함. 같은 프로그램을 Intel에서 돌리면 0이 정상적으로 나옴.
- 댓글에서 Zen 2의 rdrand16 재현 사례가 나옴. rdrand32는 정상이고 rdrand16만 0을 못 만들며, 실제로는 0을 생성하되 CF를 0으로 잘못 설정해 재시도 루프가 0을 버리는 것으로 보임.
- Zen 2 초기에는 rdrand가 항상 -1(모든 비트 1)을 반환해 앱이 시작하자마자 종료되는 버그가 있었고 마이크로코드 업데이트로 수정됨. 이번에는 반대로 모든 0을 못 만드는 것일 수 있다는 관측이 나옴.
- Zen 3에서는 16비트 0이 관측됐고(+1:3821, 0:3893, -1:3895), Zen 4(7840U)에서는 재현되지 않음. 32비트 값은 유의미한 표본을 더 모아야 한다는 상태.
- 범위 안 모든 값을 같은 확률로 뽑아야 한다는 지적에 Intel SDM 7.3.17과 NIST SP800-90A가 그렇게 정의한다는 근거가 제시됨. 다만 하드웨어 난수는 보통 CSPRNG 시드로만 쓰여 실질 영향은 작다는 의견도 나옴.