メインコンテンツまでスキップ

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 実装の入力要件と互換性があるはずです。