AMD의 난수 생성기는 0을 생성하지 못하는가?

3 hours ago 2

사용자 테스트에서 AMD 프로세서의 rdrand와 rdseed가 16비트 난수 0을 생성하지 않는 현상이 관측됨. 같은 프로그램을 실행한 Intel에서는 0이 나왔으며, AMD 전체의 문제인지 Zen2에 한정되는지는 확인되지 않음 32비트 또는 64비트로 생성한 값의 하위 16비트에서는 0이 관측됨. 제보자는 이를 이용해 16비트 분포 그래프에서 문제를 우회함 제보자는 접근 가능한 AMD 프로세서 2개에서 첫 게시물 작성 9일 전부터 5월 23일 업데이트까지 0을 한 번도 관측하지 못함 AMD는 문의에 답변하고 사안을 내부적으로 상향 전달했지만, 5월 23일 업데이트 시점까지 정확한 원인이나 추가 답변은 나오지 않음 재현 도구 random-fryer에 처리량 측정과 rdseed가 없는 CPU 지원이 추가됨. 사용자 측정에서는 CPU별 난수 생성 속도와 클럭 변화에 대한 반응에 큰 차이가 있었음 16비트 난수에서 관측한 0의 부재 Jessé는 어셈블리로 데이터 차트를 구현하면서 rdrand와 rdseed 를 데이터 공급원으로 사용하다가 AMD에서 요청한 크기의 난수 0이 나오지 않는 듯한 현상을 발견함 최초 보고에서는 AMD에만 있는 문제로 의심했으며, Zen2에 한정될 가능성도 열어 둠 같은 프로그램을 Intel 프로세서에서 실행했을 때는 0이 정상적으로 나옴 첨부한 차트 테스트는 16비트 공간의 65,536개 값이 얼마나 생성되는지 표시함 첫 번째 막대는 0의 빈도를 나타내며, rdrand는 빨강, rdseed는 파랑, 직접 만든 TSC 기반 방식은 초록으로 표시함 AMD에서는 첫 막대가 초록에서 바뀌지 않고 차트의 최솟값도 0에 머물 것으로 예상한 반면, Intel에서는 0도 생성되어 차트의 최솟값이 0보다 높아짐 32비트나 64비트 출력의 하위 16비트도 모두 0이 되지 않는지 묻자, 제보자는 하위 16비트에서는 0이 나올 수 있음을 확인함 우회 방법은 명령의 출력 대상을 32비트 또는 64비트 레지스터로 바꾸고, 그래프에는 계속 16비트 데이터만 수집하는 방식임 요청한 크기 전체가 0인 값은 AMD에서 관측하지 못했으며, 이는 큰 출력의 일부 비트가 0인 경우와 구분해야 함 재현 도구와 AMD 문의 진행 상황 random-fryer는 생성된 0을 찾는 테스트 도구이며, 제보자는 다른 사용자의 실행 결과 공유를 요청함 Linux CLI에서 콘솔 화면의 임의 위치에 데이터를 표시하고 제어하는 예제로도 활용할...

Read Entire Article