我试图让 CryptoJS 通过 Keccak 的一些已知答案测试,但它似乎给了我不正确的摘要哈希。
单击Keccak 下载页面上的“已知答案和蒙特卡洛测试结果”链接,或直接转到zip 文件。
我一直在使用 CryptoJS.SHA3 进行测试,并使用 ShortMsgKAT_512.txt 或 LongMsgKAT_512.txt 中的测试向量。不幸的是,我无法让它匹配任何一个测试向量。我确实通过测试的是 LongMsgKAT.txt 中的第一个测试:
var message = '724627916C50338643E6996F07877EAFD96BDF01DA7E991D4155B9BE1295EA7D21C9391F4C4A41C75F77E5D27389253393725F1427F57914B273AB862B9E31DABCE506E558720520D33352D119F699E784F9E548FF91BC35CA147042128709820D69A8287EA3257857615EB0321270E94B84F446942765CE882B191FAEE7E1C87E0F0BD4E0CD8A927703524B559B769CA4ECE1F6DBF313FDCF67C572EC4185C1A88E86EC11B6454B371980020F19633B6B95BD280E4FBCB0161E1A82470320CEC6ECFA25AC73D09F1536F286D3F9DACAFB2CD1D0CE72D64D197F5C7520B3CCB2FD74EB72664BA93853EF41EABF52F015DD591500D018DD162815CC993595B195;'
var correctResult = '4E987768469F546296AD1A43D54C0A0A6C87E7E4E26B686612B1E5B1554B689BFFD56D6A4B454CE4A5717625BBAD321F8D05F19C225259646F21416AA2D7C2ED';
我用以下代码通过了这个:
var words = CryptoJS.enc.Hex.parse(message.toLowerCase());
var testResult = CryptoJS.SHA3(words, { outputLength: 512 }).toString();
但是我尝试的其他测试失败了。知道发生了什么吗?
一种可能性是自从 CryptoJS 作者编写代码以来,Keccak 团队已经更新了算法和测试向量。有没有办法在其源代码管理中查看与当前 CryptoJS.SHA3 代码匹配的原始测试向量?我想我看到了他们的在线源代码控制(CVS?)的链接,但现在找不到。
另一种可能性是我使用了错误的测试向量文件。有谁知道 CryptoJS.SHA3 内部使用了哪些速率和容量设置以及与之匹配的测试向量?
理想情况下,加密库应该有单元测试套件来证明它们的实现是正确的并且与参考测试向量相匹配。否则我们不能相信实现。希望有与此 CryptoJS 库匹配的旧版本测试向量,否则我将不得不放弃该库。