Sha-256

SHA-2 和 3 的 NIST 測試向量的 CAVP 格式說明

  • September 22, 2019

我想執行此頁面底部 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

引用自:https://crypto.stackexchange.com/questions/48287