3.3. Alternate Description of the Generation of k (k の生成の代替的説明)
3.3. Alternate Description of the Generation of k (k の生成の代替的説明)
前のセクションで説明されたプロセスは, 実際には [SP800-90A] および [X9.62] の附属書 D で説明されている "HMAC_DRBG" 疑似乱数生成器に由来します。[SP800-90A] の用語を使用すると, k の生成は次のように説明できます:
a. 署名するメッセージの処理に使用されるものと同じハッシュ関数 H でパラメータ化された HMAC を使用して HMAC_DRBG をインスタンス化します。インスタンス化パラメータは:
requested_instantiation_security_strength
このパラメータを, H が基本ハッシュ関数として使用される場合に HMAC_DRBG 実装が受け入れる任意の値に設定します。
prediction_resistance_flag
このパラメータを "false" に設定します。
personalization_string
このパラメータを "Null" (空のビットシーケンス) に設定します。
entropy_input
エントロピー文字列として int2octets(x) を使用します。
nonce
ノンスとして bits2octets(H(m)) を使用します。
最後の2つのパラメータは HMAC_DRBG インスタンス化関数自体のパラメータではないことに注意してください。むしろ, これらの値はインスタンス化中に内部 Get_entropy_input 関数から要求されます。決定論的 (EC)DSA では, 実際のエントロピーソースにアクセスせずに, 指定したエントロピー文字列とノンスで HMAC_DRBG を実行させたいと考えています。
b. HMAC_DRBG から qlen ビットを要求し, 結果のビットを bits2int 変換を使用して整数に変換することにより, k の候補値を生成します。ゼロではなく, q より小さく, (EC)DSA に適した値が得られるまでこのステップを繰り返します (セクション 3.4 を参照)。
各署名生成プロセスに対して新しい HMAC_DRBG インスタンスをインスタンス化することに注意してください。ビットの生成時に "パーソナライゼーション文字列" も "追加入力" もありません。HMAC_DRBG のリシード関数は, 外部からも内部 HMAC_DRBG 処理の結果としても呼び出されません。
上記のように, 秘密鍵のエンコーディングを "エントロピー文字列" として使用し, ハッシュ化されたメッセージ (bits2octets によって切り捨てられ拡張される) を "ノンス" として使用します。HMAC_DRBG では, エントロピー文字列とノンスは単純に初期シードに連結されるため, "エントロピー" と "ノンス" の分割はかなり恣意的です。それぞれに qlen ビットを使用することは, ほとんどの HMAC_DRBG 実装の入力要件と互換性があるはずです。