SHA1位导向测试向量在openssl下给出了错误的摘要

时间:2017-04-11 15:09:16

标签: hash openssl cryptography sha1

所以我来到这个测试向量列表来测试SHA1实现的有效性(你可以在http://csrc.nist.gov/groups/STM/cavp/secure-hashing.html的底部找到)

大多数测试向量称为"短" (因为它们的大小小于块大小),通过。但是,对于所有长测试向量,openssl输出的摘要与预期的摘要不同。

示例:

Msg = d372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ffd07f0001e0

Expected MD = c60a02fffa45deccb075e386be3aa9313c2df4f2

Openssl output = 77 2d ff f3 54 31 2c df 93 e1 94 2f 10 91 f7 f8 78 61 91 c1

N.B:测试向量用于面向比特的实现。我的理解是这种实现可以计算大小不一定是字节倍的消息的摘要。

任何人都知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

您回答了自己的问题,您正在尝试验证位模式,但OpenSSL仅支持字节模式。或者,至少,他们只获得了字节模式的FIPS CAVP证书:http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.html#2465

SHA-1    (BYTE-only)
SHA-224  (BYTE-only)
SHA-256  (BYTE-only)
SHA-384  (BYTE-only)
SHA-512  (BYTE-only)

如果您需要一个经过认证可以为BIT值提供正确答案的库,请在该列表中搜索" SHA-1(BIT)"。但有几个,不知道它们中有多少是可消耗的API。

或者,对齐数据。

答案 1 :(得分:0)

因此,在回应您的评论时,我认为当您使用NIST测试向量时输出的关键差异在于,在进行面向位的输出时,指定的长度非常重要。对于面向字节的输出,如果NIST消息为98,您可以确信SHA算法的正确输入是字节b10011000。但是,如果它是面向比特的,那么它可能有len = 6,在这种情况下,算法的正确输入是b100110。或len = 7b1001100