AMD製CPUのRDRAND命令、0を生成できないバグか
Judul asli: AMD's random number generator can't generate a 0?
Mengapa Ini Penting
ハードウェアRNGの出力分布に偏りがある場合、暗号処理の安全性に直結するリスクがある。
AMD製プロセッサのRDRANDおよびRDSEED命令が16ビットモードで0を生成しない可能性が、アセンブリ開発者によって報告された。Intelでは問題なし。
ブラジルのアセンブリ開発者Jesséが、AMD製プロセッサ(おそらくZen2以降)において、RDRAND・RDSEED命令を16ビットレジスタに対して実行した場合に値0が一切出力されないという挙動を発見した。同開発者はコンソール画面にデータをグラフ表示するアプリを開発中に偶然この問題に気づいた。同じプログラムをIntelプロセッサで実行した場合は0が正常に生成される。
回避策として、命令を32ビットまたは64ビットレジスタに対して実行し、下位16ビットを取り出す方法が有効とされている。実際、32/64ビット出力の下位16ビットが0になるケースは確認されており、「真の16ビット0」だけが出てこないという状況だ。
フォーラム参加者のrevolutionは「AMDが0をランダムな数と見なさないという仕様にしていなければいいが」と皮肉交じりにコメント。Jesséは今後AMDに直接問い合わせる意向を示している。セキュリティ観点からは、「ハードウェア支援の暗号機能は使わない」という原則を改めて指摘する声も上がった。テスト用アプリはフォーラムで公開中(gtk4-bargraph.tar.gz、7.25KB)。