私はこの問題に約3日間主演してきましたが、この問題にもう一度目を向ける必要があると思います。私はNISTのHASH_DRBG
を SP 800-90A Rev. 1、2015年6月 ( NIST Special Publicationsページ による最新のドキュメント)から実装しています。テストベクトルは CAVPテスト:乱数ジェネレーター にあります。
私が抱えている問題は、テストベクトルの結果に到達できないことですif私は次のようにアルゴリズムに従います公開されました。 If数スロット下に移動すると、正しい結果が得られます。それは非常に珍しいことであり、私は何が間違っているのかわかりません。
私が問題を抱えているアルゴリズムHash_DRBG_Generate Process。 50ページのセクション10.1.1.4のスクリーンキャプチャとしてのアルゴリズムは次のとおりです。
ステップ3、Hashgenは、呼び出し元の疑似ランダムビットを生成します。次に、手順4〜6で、生成する次の呼び出しの状態を更新します。
If指定されたとおりにアルゴリズムを実行すると、次のビット文字列が呼び出し元に返されます。これは正しくありません。事実上、Current Vを使用します。
6C58FE76D644750EA5BE880BB1BDD2D54C98139D70BA0F7CA8637EB2527F8BFD223DEB9187976E87
91B706804FB28534D13EC4818FB59DB430C9F04F55AA8549EAD53B39624DAD6CFDAAD99412B8AEB0
Ifステップ3をステップ6とステップ7の間で移動すると、正しい結果に到達できます。事実上、Next Vを使用します。
56f33d4fdbb9a5b64d26234497e9dcb87798c68d08f7c41199d4bddf97ebbf6cb5550e5d149ff4d5
bd0f05f25a6988c17436396227184af84a564335658e2f8572bea333eee2abff22ffa6de3e22aca2
私の質問はかなり不器用です:
これが私が作業しているテストベクトルです。 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
この謎への答えは、別のNISTドキュメントにあります NIST SP 800-90A決定論的ランダムビットジェネレータ検証システム(DRBGVS) 、p.4:
ランダムビットを生成し、印刷しないは6C58...AEB0
ビット文字列。 2番目のランダムビットを生成し、出力は56f3...aca2
ビット文字列。