
AMD プロセッサの乱数生成器が 0 を生成できない問題が発覚
flat assembler フォーラムのユーザー Jessé が、AMD プロセッサの rdrand および rdseed 命令で 0 を生成できないバグを発見した。テスト用アプリケーションを公開し、AMD に報告している。
Jessé は組立て言語でチャートレンダリングコードを作成する際、rdrand と rdseed を使用してデータを生成していたところ、「AMD プロセッサ (おそらく Zen2 のみ) では指定されたサイズの 0 を生成できない」ことを偶然発見した。同じプログラムを Intel プロセッサで実行すると、「0 は問題なく生成される」と述べている。
バグの内容と検証
Jessé は gtk4-bargraph.tar.gz というテスト用アプリケーション (7.25 KB) を作成し、rdrand、rdseed、TSC カスタム手法による 0 の生成状況を可視化した。チャートの最初のバー (0 の生成数を示す赤、青、緑の棒グラフ) は AMD ホストでは常に色が変わらないという。
検証結果によると、2 台の AMD プロセッサで 9 日間のテスト期間中、単一の 0 は生成されなかった。一方、revolution はフォーラム内で「32 ビットまたは 64 ビット出力を使用する場合、下位 16 ビットが全ゼロになることはあるか」と質問。Jessé は「要求されたサイズに適合する真の 0 は AMD では決して発生しない」と回答した。
パフォーマンス測定結果
テスト用アプリケーションにはベンチマーク機能が統合されており、以下の性能が報告されている:
- Core i5 2012:12.6 M numbers per second
- Core i7 7700 2017:750 k numbers per second
- AMD Ryzen 7:2.6 M numbers per second
測定結果では、Core i5 2012 がクロック速度に 100% 依存している一方、AMD ジェネレータはクロック変動に対して反応しないという。
AMD からの返答と信頼性に関する議論
Jessé は AMD から返答を受け取ったが、「チームの担当者が自分の結果を完全に読み違えたか、AI を使用して返答を作成したようで (ChatGPT に確認した回答と非常に似ている)」と述べた。さらにこの問題を AMD 内部にエスカレートしている。
フォーラムでは信頼できるハードウェアについても議論が交わされた。sylware は「信頼できるハードウェアは存在しない。あるとすれば、自分自身で設計し、製造プロセスを厳密に管理したハードウェアのみである」と述べた。revolution は「RDRAND の最良なセキュリティのためには、バックドア化されている可能性も、そうでない可能性もあるため、常に他のソースと混合して使用すべき」と提案している。
ttd3v は「rdrand はカーネルのエントロピーソースとして使用される想定のため、AMD の 0 を無効にする選択は奇妙だが、いずれにせよ主要な暗号化 RNG として使用されるべきではない」と述べた。

この記事は元記事の事実のみに基づいて自動生成されました。
筆者の見立て
- revolution が「AMD が 0 は乱数ではないと判断し、エンジニアにこれを修正させたのではないか」と論じている可能性を指摘している。
- 異なるプロセッサモデル間での RDRAND 回路の性能差から、「乱数生成器回路は同一メーカーの異なるプロセッサモデル間で大きな相違がある必要がある」と解釈している。
- 「RDRAND の回路は元の設計以来変更されている可能性がある」と予想されている。
出典
flat assembler forum. 「AMD's random number generator can't generate a 0 (+ app)」https://board.flatassembler.net/topic.php?t=24261