AMDのRDRANDが0を生成できない疑惑
原題: AMD's random number generator can't generate a 0?
なぜ重要か
ハードウェアRNGの偏りは暗号や乱数依存アプリの安全性に直結するため、AMD側の公式見解と影響範囲の特定が急務。
2026年5月11日、flat assemblerフォーラムのユーザーJessé氏(ブラジル)が、AMD製プロセッサの命令「rdrand」および「rdseed」が16ビットモードで値0を一切生成しないという現象を報告した。同氏がIntel環境で同一プログラムを実行したところ0は正常に出力され、AMD固有の問題である可能性が高いとしている。Zen2世代での発生が疑われており、32/64ビット命令への変更で回避できることも確認済み。
発端はJessé氏がアセンブリコードでチャート描画アプリを開発していた際の偶然の発見だ。rdrandとrdseedを16ビットレジスタ向けに呼び出すと、AMD環境では値0が一度も出力されない。65535種類の他の値は正常に現れるにもかかわらず、0だけが完全に欠落していた。
Jessé氏はこの挙動を可視化するテストアプリ「gtk4-bargraph.tar.gz」(7.25KB)を公開し、コミュニティに検証を呼びかけた。アプリは16ビット空間の全数値(0〜65535)を棒グラフで表示し、rdrand(赤)・rdseed(青)・独自TSC手法(緑)それぞれの出力分布をリアルタイムで確認できる。AMD環境では0に対応するバーが変化しないまま固定される一方、Intel環境では問題なく0が出現した。
フォーラムの常連moderatorであるrevolution氏は「AMDが何らかの理由で0をランダム数と見なさないようにしている可能性がある」と半ば冗談めかしつつ指摘。sylware氏はセキュリティの観点から「ハードウェアアクセラレーションされた暗号処理は信頼するな、というのが昔からの鉄則だった」とコメントした。
回避策として、rdrand/rdseedを32ビットまたは64ビットレジスタ向けに呼び出し、下位16ビットを取り出す形に変更することで0が得られることが確認されている。Jessé氏はAMDへの問い合わせを予定しており、回答があればフォーラムで共有するとしている。なお、これがZen2固有の問題なのか、より広い世代に影響するのかはまだ不明だ。