CryptoJS が Keccak のいくつかの既知の回答テストに合格するようにしようとしていますが、正しくないダイジェスト ハッシュが返されているようです。
Keccak ダウンロード ページの「既知の回答とモンテカルロ テストの結果」リンクをクリックするか、直接zip ファイルに移動します。
私は CryptoJS.SHA3 でテストし、ShortMsgKAT_512.txt または LongMsgKAT_512.txt のテスト ベクトルを使用しています。残念ながら、テスト ベクトル バー 1 のいずれとも一致させることができません。テストに合格したのは、LongMsgKAT.txt の最初のテストでした。
var message = '724627916C50338643E6996F07877EAFD96BDF01DA7E991D4155B9BE1295EA7D21C9391F4C4A41C75F77E5D27389253393725F1427F57914B273AB862B9E31DABCE506E558720520D33352D119F699E784F9E548FF91BC35CA147042128709820D69A8287EA3257857615EB0321270E94B84F446942765CE882B191FAEE7E1C87E0F0BD4E0CD8A927703524B559B769CA4ECE1F6DBF313FDCF67C572EC4185C1A88E86EC11B6454B371980020F19633B6B95BD280E4FBCB0161E1A82470320CEC6ECFA25AC73D09F1536F286D3F9DACAFB2CD1D0CE72D64D197F5C7520B3CCB2FD74EB72664BA93853EF41EABF52F015DD591500D018DD162815CC993595B195;'
var correctResult = '4E987768469F546296AD1A43D54C0A0A6C87E7E4E26B686612B1E5B1554B689BFFD56D6A4B454CE4A5717625BBAD321F8D05F19C225259646F21416AA2D7C2ED';
私はこれを次のコードで渡すようにしました:
var words = CryptoJS.enc.Hex.parse(message.toLowerCase());
var testResult = CryptoJS.SHA3(words, { outputLength: 512 }).toString();
ただし、私が試した他のテストは失敗します。何が起こっているのですか?
1 つの可能性は、CryptoJS の作成者がコードを書いてから、Keccak チームがアルゴリズムとテスト ベクトルを更新したことです。現在の CryptoJS.SHA3 コードと一致するソース管理で元のテスト ベクトルを表示する方法はありますか? 彼らのオンライン ソース管理 (CVS?) へのリンクを見たと思いますが、今は見つかりません。
別の可能性として、間違ったテスト ベクター ファイルを使用している可能性があります。CryptoJS.SHA3 によって内部的に使用されるレートと容量の設定と、それを照合するテスト ベクトルを知っている人はいますか?
理想的には、暗号化ライブラリには、その実装が正しく、リファレンス テスト ベクトルと一致することを証明する単体テスト スイートが必要です。そうでなければ、実装を信頼できません。このCryptoJSライブラリと一致する古いバージョンのテストベクトルがあることを願っています。そうでなければ、ライブラリを捨てる必要があります.