私は keccak スポンジ関数を開発していますが、ハッシュ結果に関していくつかの奇妙な動作があります。
24 ビット (3 バイト) の文字列 "abc" を使用します。http://www.di-mgt.com.au/sha_testvectors.htmlの SHA-3 のテスト ベクトルでは、SHA3-512 の結果は次のようになります。
テストベクターからの SHA3-512
また、cryptpp バージョン 5.62 を使用したところ、次の出力が得られました。
CryptoPP 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96
WindowsでHashTab 5.2.0.14を使用すると、「abc」を含むファイルに同じ出力が得られます。
ハッシュタブ 5.2.0.14 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa5bb19a6
したがって、いくつかの参照がありますが、そのうちの 1 つは他とは異なります。Web サイトでは、入力メッセージには FIPS-202 ドラフトで定義されている 2 ビット「10」が付加されていると説明されています。では、CryptoPP と HashTab はおそらく別の実装を使用していますが、どれを使用していますか??
これで、プログラムと keccak サイトの「参照コード」と、Python での別の実装ができました。
私のプログラムは、「abc」に対して次のハッシュ値を返します。
マイプログラム
これは、同じ値を計算するhttp://keccak.noekeon.org/files.htmlの keccak 参照コード ( http://keccak.noekeon.org/KeccakReferenceAndOptimized-3.2.zip )です。
Keccak-Reference 3.2 Message of size 2040 bits with Keccak[r=1024, c=576] 20FF13D217D5789FA7FC9E0E9A2EE627363EC28171D0B6C52BBD2F240554DBC94289F4D61CB57DF72DF08AAC4366022D5DF23E703B8FDFF6306021DB4D5E6760 (truncated to the same length)
これはhttps://github.com/mgoffin/keccak-python/blob/master/Keccak.pyからの python 実装で、同じ値になります:
keccak-python Value after squeezing : 20FF13D217D5789FA7FC9E0E9A2EE627363EC28171D0B6C52BBD2F240554DBC94289F4D61CB57DF72DF08AAC4366022D5DF23E703B8FDFF6306021DB4D5E67601173D04BF5AEC3EBBCA87696355C5FB4D72D00D2CC4F843A0A3A0ED8924A16FC37769A3DB7C3A84F31E92375A7D74A0136D80A647FBC5AF8D733B43873A3709F
だから私の質問:
1) FIPS 202 で作成された NIST の仕様に基づいて、Keccak と SHA-3 の出力が異なるというのは本当ですか?
2) 一意ではない 3 つの異なるハッシュ値があるのはなぜですか?
3) SHA3-512 で容量が変更され、512 ビット容量と 1600-512 ビットレートになりますか? これは、SHA-3 に関するプレゼンテーションで読んだもう 1 つの違いですが、FIPS-202 ドキュメントでは見つかりませんでした。
どうもありがとうございました!
よろしく、
ブラク