2017-04-11 39 views
0

所以我就翻過測試向量的這個列表來測試SHA1執行的有效性(你可以找到在http://csrc.nist.gov/groups/STM/cavp/secure-hashing.html底部)SHA1面向比特的測試向量給出下OpenSSL的錯誤消化

大部分的測試向量稱爲「短」(因爲它們的大小小於塊大小),通過。但是,對於所有較長的測試向量,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:測試向量被用於面向比特的方面取得。我的理解是,這種實現可以計算消息的摘要,其大小不一定是字節倍數。

任何人都知道爲什麼會發生這種情況?

回答

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) 

如果你需要它已被認證爲提供位值正確答案庫,搜索該列表「 SHA-1(BIT)「。雖然有一些,但不知道它們中有多少是可用API。

或者,字節對齊您的數據。

+0

是的,我明白了,謝謝澄清。但我無法弄清楚爲什麼'd372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ffd07f0001e0'使用BIT-only實現和僅BYTE的實現之間有什麼區別?這裏描述的不是同一個過程嗎? http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.198-1.pdf –

+0

換句話說,僅有位實現的摘要和僅有字節的實現的摘要之間有什麼區別,應用於相同的任意長度輸入? –

0

因此,在迴應您的意見時,我相信使用NIST測試向量時輸出的關鍵區別在於,指定長度在執行位導向輸出時非常重要。使用面向字節的輸出,如果NIST消息爲98,則可以確信SHA算法的正確輸入是字節b10011000。但是,如果它是以位爲導向的,那麼它可能有len = 6,在這種情況下,算法的正確輸入是b100110。或者len = 7b1001100