KMAC 是否只是 SHA-3-256(KEY || 消息)
根據keccak 的優勢,你有:
與 SHA-1 和 SHA-2 不同,Keccak 沒有長度擴展的弱點,因此不需要 HMAC 嵌套結構。相反,可以通過簡單地在消息前加上密鑰來執行 MAC 計算。
message
這意味著我可以通過計算得到 a 的 MAC $ \operatorname{SHA-3-256}(KEY \mathbin| message) $ . 如果是這樣,那為什麼 $ \operatorname{KMAC} $ 存在?是 $ \operatorname{KMAC} $ 和剛才一樣 $ \operatorname{SHA-3-256}(KEY \mathbin| message) $ ? 如果沒有,那麼如何使用 $ \operatorname{KMAC} $ 生成不同於計算的認證標籤 $ \operatorname{SHA-3-256}(KEY \mathbin| message) $ ?
由於域分隔前綴,標準 KMAC 不止於此;NIST SP 800-185
KMAC128(K, X, L, S) :
有效條件: $ \text{len}(K) < 2^{2040} $ 和 $ 0 \le L < 2^{2040} $ 和 $ \text{len}(S) < 2^{2040} $
- newX = bytepad(encode_string(K), 168) || X || 右編碼(L)。
- 返回 cSHAKE128(newX,L,“KMAC”,S)。
和
cSHAKE128(X, L, N, S) :
有效條件: $ \text{len}(N) < 2^{2040} $ 和 $ \text{len}(S) < 2^{2040} $
- 如果 N = "" 和 S = “":返回 SHAKE128(X, L);
- 否則:返回 KECCAK$$ 256 $$(bytepad(encode_string(N) || encode_string(S), 168) || X || 00 , L)
SHAKE128(M, d) = KECCAK
$$ 256 $$(M || 1111 , d),
NIST 關於後綴的資訊;
後綴支持域分離;即,它區分 KECCAK 的輸入
$$ c $$由 SHA-3 散列函式產生,來自第 2 節中定義的 SHA-3 XOF 的輸入。6.2,以及未來可能定義的其他領域。
也就是說,每個域分離我們有不同的隨機預言。SHA3 和 Blake2 比 SHA256 更接近隨機預言,因為它們不受長度擴展攻擊。