web-dev-qa-db-ja.com

NIST SP 800-90A DRBG、アルゴリズムに続く誤った結果、アルゴリズムのステップを再配置する正しい結果?

私はこの問題に約3日間主演してきましたが、この問題にもう一度目を向ける必要があると思います。私はNISTのHASH_DRBGSP 800-90A Rev. 1、2015年6月NIST Special Publicationsページ による最新のドキュメント)から実装しています。テストベクトルは CAVPテスト:乱数ジェネレーター にあります。

私が抱えている問題は、テストベクトルの結果に到達できないことですif私は次のようにアルゴリズムに従います公開されました。 If数スロット下に移動すると、正しい結果が得られます。それは非常に珍しいことであり、私は何が間違っているのかわかりません。

私が問題を抱えているアルゴリズムHash_DRBG_Generate Process。 50ページのセクション10.1.1.4のスクリーンキャプチャとしてのアルゴリズムは次のとおりです。

enter image description here

ステップ3、Hashgenは、呼び出し元の疑似ランダムビットを生成します。次に、手順4〜6で、生成する次の呼び出しの状態を更新します。

If指定されたとおりにアルゴリズムを実行すると、次のビット文字列が呼び出し元に返されます。これは正しくありません。事実上、Current Vを使用します。

6C58FE76D644750EA5BE880BB1BDD2D54C98139D70BA0F7CA8637EB2527F8BFD223DEB9187976E87
91B706804FB28534D13EC4818FB59DB430C9F04F55AA8549EAD53B39624DAD6CFDAAD99412B8AEB0

Ifステップ3をステップ6とステップ7の間で移動すると、正しい結果に到達できます。事実上、Next Vを使用します。

56f33d4fdbb9a5b64d26234497e9dcb87798c68d08f7c41199d4bddf97ebbf6cb5550e5d149ff4d5
bd0f05f25a6988c17436396227184af84a564335658e2f8572bea333eee2abff22ffa6de3e22aca2

私の質問はかなり不器用です:

  1. 物事を間違って解析しているのですか、それとも明らかに間違っていることをしているのですか?
  2. ステップ3をステップ6とステップ7に移動する必要があるのはなぜですか?
  3. 選択する必要がある場合、(a)正しいアルゴリズムと誤った結果、または(b)誤ったアルゴリズムと正しい結果を選択する必要がありますか?

これが私が作業しているテストベクトルです。 no予測抵抗を持つSHA1を使用した最初のテストベクトル(COUNT 0)。問題はGENERATE(FIRST CALL)で発生します。示されているVの値1658...ed56bは、後の値です。手順4〜6が実行されました。ただし、Vは、ステップ3Hashgenが実行されるまでその値を取りません。

[SHA-1]
[PredictionResistance = False]
[EntropyInputLen = 128]
[NonceLen = 64]
[PersonalizationStringLen = 0]
[AdditionalInputLen = 0]
[ReturnedBitsLen = 640]

COUNT = 0
EntropyInput = 1610b828ccd27de08ceea032a20e9208
Nonce = 492cf1709242f6b5
PersonalizationString = 
** INSTANTIATE:
    V = 9e8301725d5f133b4ab7d329fd2f87ae5f89d96a9dd7e2b98beee1c707b8c3fe412d1125b58bae5dc08a11dac3be4a3147347160fef218
    C = e5e12450450efe5fdc777c95b8c23c938fcd592e2d788f12461936e4a16131b1f2d11ce7f0159ee1e635e62f3df8bda4fea077ad5f9d06
    reseed counter = 1
EntropyInputReseed = 72d28c908edaf9a4d1e526d8f2ded544
AdditionalInputReseed = 
** RESEED:
    V = 745c659f2944829ca6e209c8ca2dddecf9f1861383e34e94007a3a51b8444fd5ae738e7d9c0d5e69aa97ee16c49cfd2432eb32ba5738fa
    C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
    reseed counter = 1
AdditionalInput = 
** GENERATE (FIRST CALL):
    V = 1658a59fbc9c22c17f5a8b55c1275795873e4beae49657421ad5d95831b736cd7e066c738bcbb343933c411c7c17917593c03a77bed56b
    C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
    reseed counter = 2
AdditionalInput = 
ReturnedBits = 56f33d4fdbb9a5b64d26234497e9dcb87798c68d08f7c41199d4bddf97ebbf6cb5550e5d149ff4d5bd0f05f25a6988c17436396227184af84a564335658e2f8572bea333eee2abff22ffa6de3e22aca2
** GENERATE (SECOND CALL):
    V = b854e5a04ff3c2e657d30ce2b820d13e148b11c245495ff03531785eab2a1dc54d994a5597b15c5b10001f49606c88b4ff0d61acb61820
    C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
    reseed counter = 3
1
user29925

この謎への答えは、別のNISTドキュメントにあります NIST SP 800-90A決定論的ランダムビットジェネレータ検証システム(DRBGVS) 、p.4:

enter image description here

ランダムビットを生成し、印刷しない6C58...AEB0ビット文字列。 2番目のランダムビットを生成し、出力56f3...aca2ビット文字列。

1
user29925