AMD 프로세서 RNG의 제로 값 생성 문제 발견
AMD's random number generator can't generate a 0?
Hacker News개발자가 AMD 프로세서의 난수 생성기(RNG)가 요청된 비트 크기에 맞는 완전한 0을 생성하지 못하는 잠재적 버그를 포착했습니다.
- 테스트 결과, 해당 현상은 Intel 프로세서에서는 문제가 없었으나 AMD 칩셋에서만 발생하며 하드웨어 간 큰 동작 차이가 확인되었습니다.
- 따라서 시스템 레벨의 개발자라면 특정 하드웨어 환경에서 RNG가 예상대로 작동하는지 반드시 검증할 필요성이 생깁니다.
- 특히 보안이나 암호화 같은 민감한 영역에서는 하드웨어 명령어에만 의존하기보다 운영체제(OS)의 검증된 난수 생성기를 활용하는 것이 안전합니다.
한 개발자가 어셈블리 코드를 사용하여 데이터를 렌더링하는 과정에서, AMD 프로세서(Zen2만 해당할 수 있음)의 난수 생성기(RNG)가 특정 크기의 완전한 '0'을 생성하지 못하는 잠재적 버그를 발견했습니다. 이 현상은 Intel 프로세서에서는 문제가 없었으며, 테스트 애플리케이션은 rdrand와 rdseed 명령어를 사용하여 데이터를 표시하며 AMD 환경에서 첫 번째 막대가 녹색(TSC 방식)이나 0부터 시작하는 차트 스케일이 제대로 올라가지 않는 문제를 보여주었습니다.
후속 논의를 통해 이 문제는 단순히 최하위 16비트가 모두 '0'인 경우와, 요청된 비트 크기 전체가 완전한 '0'인 경우로 구분되었습니다. 사용자는 32비트 또는 64비트 출력에서 가장 낮은 부분이 0이 될 수는 있지만, AMD에서는 진정한 의미의 완전한 0은 발생하지 않는다고 확인했습니다. 또한, 다른 사용자들은 CPU 모델 간 난수 생성기 회로에 큰 차이가 있을 수 있으며, 프로세서마다 성능 편차가 크다는 점을 지적했습니다.
보안 관점에서 볼 때, rdrand는 커널의 엔트로피 소스로 사용되는 것이 적절하며, 암호화와 같은 민감한 목적으로 난수 생성기가 필요할 경우 하드웨어 명령어에만 의존하기보다는 운영체제(OS)가 제공하는 검증된 암호학적 RNG를 활용하는 것이 더 안전하다는 의견이 제시되었습니다.