SHA-2 和 3 的 NIST 測試向量的 CAVP 格式說明
我想執行此頁面底部 zip 文件中提供的 SHA2 和 SHA3 NIST 算法測試向量:http: //csrc.nist.gov/groups/STM/cavp/secure-hashing.html#sha-2
我不太明白測試向量是如何編碼的。例如,如果我在空字元串上執行 SHA2-256 算法,如下所示:
import hashlib sha2_256_test_str = b"" sha2_standard = hashlib.sha256(sha2_256_test_str).hexdigest()
我獲得雜湊:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
哪個是對的。但是,如果我查看 NIST zip 文件中的第一個測試向量,它會說:
# CAVS 11.0 # "SHA-256 ShortMsg" information # SHA-256 tests are configured for BYTE oriented implementations # Generated on Tue Mar 15 08:23:38 2011 [L = 32] Len = 0 Msg = 00 MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
這似乎向我表明,對於“00”的消息,我應該收到上面的雜湊。但是,這是我為空字元串獲得的雜湊值。例如,我解釋在 Python 中執行這個測試向量的方式是:
import hashlib sha2_256_test_str = b"00" sha2_standard = hashlib.sha256(sha2_256_test_str).hexdigest()
但這給出了雜湊
f1534392279bddbf9d43dde8701cb5be14b82f76ec6607bf8d6ad557f60f304e
我在這裡缺少什麼關鍵點?我如何能夠將 NIST zip 文件中的消息轉換為我的 Python 腳本的消息?
您的所有問題都在算法測試頁面連結到的驗證系統文件中得到解答。在這種情況下,請查看http://csrc.nist.gov/groups/STM/cavp/documents/shs/SHAVS.pdf
對於這種情況,消息長度以位而不是字節表示。
00
在小於一個字節的測試向量中應該忽略消息也被編碼為值的事實;這只會增加讀者的困惑。Len = 消息的長度(以位為單位)
您的雜湊是
f1534392279bddbf9d43dde8701cb5be14b82f76ec6607bf8d6ad557f60f304e
因為 b'00’ 被解析為字元串。NIST 規範是正確的:具有零長度參數的 SHA256 應始終導致
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
知道將一個字節設置為零時,散列是
6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d