インテルデジタル乱数ジェネレーター(DRNG)ソフトウェア実装ガイドを確認した後、RDRAND
が呼び出されたときにジェネレーターの内部状態がどうなるかについて、いくつか質問があります。残念ながら、答えはガイドに載っていないようです。
ガイドによると、DRNGの内部には、ドレイン用のランダムビットを提供する4つの128ビットバッファがあります
RDRAND
。RDRAND
それ自体は、デスティネーションレジスタの幅に応じて、16、32、または64ビットのランダムデータを提供します。rdrand ax ; put 16 random bits in ax rdrand eax ; put 32 random bits in eax rdrand rax ; put 64 random bits in rax
より大きなデスティネーションレジスタを使用すると、それらの128ビットバッファがより早く空になりますか?たとえば、2ビットのランダム性のみが必要な場合、64ビットレジスタではなく16ビットレジスタを使用するという問題を解決する必要がありますか?それはDRNGのスループットに何か違いがありますか?必要以上にランダム性を消費することは避けたいと思います。
RDRAND
ガイドによると、実行後にキャリーフラグが設定されます。CF = 1 Destination register valid. Non-zero random value available at time of execution. Result placed in register. CF = 0 Destination register all zeros. Random value not available at time of execution. May be retried.
「利用不可」とはどういう意味ですか?
RDRAND
呼び出しによってこれらの128ビットバッファがすぐに使い果たされたために、ランダムデータを使用できなくなる可能性がありますか?または、使用不可とは、DRNGがヘルスチェックに失敗し、新しいデータを生成できないことを意味しますか?RDRAND
基本的に、が呼び出されたときにバッファが(一時的に)空であるという理由だけでCF=0が発生する可能性があるかどうかを理解しようとしています。
注:RDRANDのスループットとレイテンシーに関するこの質問への回答を確認しましたが、別の情報を探しています。
ありがとう!