Hash

KMAC 是否只是 SHA-3-256(KEY || 消息)

  • October 22, 2021

根據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} $

  1. newX = bytepad(encode_string(K), 168) || X || 右編碼(L)。
  2. 返回 cSHAKE128(newX,L,“KMAC”,S)。

cSHAKE128(X, L, N, S) :

有效條件: $ \text{len}(N) < 2^{2040} $ 和 $ \text{len}(S) < 2^{2040} $

  1. 如果 N = "" 和 S = “":返回 SHAKE128(X, L);
  2. 否則:返回 KECCAK$$ 256 $$(bytepad(encode_string(N) || encode_string(S), 168) || X || 00 , L)

NIST FIPS 202

SHAKE128(M, d) = KECCAK

$$ 256 $$(M || 1111 , d),


NIST 關於後綴的資訊;

後綴支持域分離;即,它區分 KECCAK 的輸入

$$ c $$由 SHA-3 散列函式產生,來自第 2 節中定義的 SHA-3 XOF 的輸入。6.2,以及未來可能定義的其他領域。

也就是說,每個域分離我們有不同的隨機預言。SHA3​​ 和 Blake2 比 SHA256 更接近隨機預言,因為它們不受長度擴展攻擊。

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