【发布时间】:2014-10-21 03:50:15
【问题描述】:
我正在开发 keccak 海绵函数并且对哈希结果有一些奇怪的行为。
我使用 24 位(3 个字节)的字符串“abc”。 http://www.di-mgt.com.au/sha_testvectors.html 上的 SHA-3 测试向量表明 SHA3-512 的结果如下:
来自测试向量的 SHA3-512 b751850b1a57168a 5693cd924b6b096e 08f621827444f70d 884f5d0240d2712e 10e116e9192af3c9 1a7ec57647e39340 57340b4cf408d5a5 6592f8274ec>
我还使用了 cryptopp 5.62 版,它给了我这样的输出:
加密PP 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96
我在 Windows 上使用 HashTab 5.2.0.14,它为我提供了具有“abc”相同输出的文件:
HashTab 5.2.0.14 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a1a65b19d77aa51
因此,有一些参考资料,但其中一个与其他参考不同。网站上解释说,输入消息附加了 FIPS-202 草案中定义的 2 位“10”。那么,CryptoPP 和 HashTab 可能使用另一种实现,但是是哪一种呢??
现在我有我的程序和来自 keccak 站点的“参考代码”,还有另一个 python 实现:
我的程序为“abc”返回这个哈希值:
我的程序 20FF13D217D5789FA7FC9E0E9A2EE627363EC28171D0B6C52BBD2F240554DBC94289F4D61CB57DF72DF08AAC4366022D5DF23E703B8FDFF6306021DB4D5E6760
这是http://keccak.noekeon.org/files.html 上的 keccak 参考代码 (http://keccak.noekeon.org/KeccakReferenceAndOptimized-3.2.zip),它计算相同的值:
Keccak-参考 3.2 Keccak[r=1024, c=576] 大小为 2040 位的消息 20FF13D217D5789FA7FC9E0E9A2EE627363EC28171D0B6C52BBD2F240554DBC94289F4D61CB57DF72DF08AAC4366022D5DF23E703B8FDFF6306021DB4D5E6760(截取相同长度)
这是来自https://github.com/mgoffin/keccak-python/blob/master/Keccak.py 的python 实现,结果相同:
keccak-蟒蛇 挤压后值:20FF13D217D5789FA7FC9E0E9A2EE627363EC28171D0B6C52BBD2F240554DBC94289F4D61CB57DF72DF08AAC4366022D5DF23E703B8FDFF6306021DB4D5E67601173D04BF5AEC3EBBCA87696355C5FB4D72D00D2CC4F843A0A3A0ED8924A16FC37769A3DB7C3A84F31E92375A7D74A0136D80A647FBC5AF8D733B43873A3709F P>
所以我的问题:
1) 根据 NIST 使用 FIPS 202 制定的规范,Keccak 和 SHA-3 是否具有不同的输出?
2) 为什么我现在有三个不唯一的不同哈希值?
3) SHA3-512 的容量是否改变为 512 位容量和 1600-512 位速率?这是我在有关 SHA-3 的演示文稿中读到的另一个区别,但我在 FIPS-202 文档中没有找到它。
非常感谢!
问候,
布拉克
【问题讨论】: