我應該對 SHA3 使用 HMAC 還是 KMAC?
我計劃為 SHA3 實現 MAC 功能。我讀到它的最新變種是 KMAC。我對http://keccak.noekeon.org/ 網站上的評論感到困惑。它說…
與 SHA-1 和 SHA-2 不同,Keccak 沒有長度擴展的弱點,因此不需要 HMAC 嵌套結構。相反,可以通過簡單地在消息前加上密鑰來執行 MAC 計算。
還
KMAC 是一種帶密鑰的散列函式或偽隨機函式 (PRF),可用於計算消息認證碼 (MAC) 或從主密鑰導出會話密鑰。通過消除對 HMAC 嵌套結構的需要,它比 HMAC 更有效。
所以如果我想實現一個MAC函式我可以只做第一種方法嗎?只需用密鑰填充消息並進行雜湊處理?還是我需要遵循 KMAC 步驟?
KMAC128(K, X, L, S):有效條件: $ len(K) < 2^{2040} $ 和 $ 0 \leq L < 2^{2040} $ 和 $ len(S) < 2^{2040} $
- newX = bytepad(encode_string(K), 168) || X || 右編碼(L)。
- 返回 cSHAKE128(newX,L,“KMAC”,S)。有人可以幫忙嗎?我們應該使用哪種方法
所以如果我想實現一個MAC函式我可以只做第一種方法嗎?只需用密鑰填充消息並進行雜湊處理?
是的, $ mac = \text{SHA3}(k||m) $ 是一個安全的 MAC 如果 $ k $ 是一個固定長度的密鑰。這是 SHA3 的明確設計目標。
您還可以依賴使用 SHA3 實例化的 HMAC 或 KMAC。這些也將為您提供安全的 MAC,但不需要增加複雜性。
前綴 PRF 函式 $ F_k\colon m \mapsto H(k \mathbin| m) $ 被推測為一個偽隨機函式族——因此是一個很好的 MAC——在密鑰下 $ k $ 什麼時候 $ H $ 是任何固定的 SHA-3 函式 SHA3-256、SHAKE128等。 這是 SHA-3 的明確設計目標。
但是,它也與某些輸入上的固定功能相吻合:您可以使用 $ F_k(m) $ 在您的應用程序的一部分中作為秘密,並在下面顯示固定雜湊 $ H $ 字元串的 $ k \mathbin| m $ 出於某種原因,一旦你這樣做了,你的安全就會飛出窗外。
使用的好處 $ \operatorname{KMAC128}_k(m) $ 代替 $ H(k \mathbin| m) $ 是沒有這種碰撞用途的危險。
最後,雖然您在技術上可以將 HMAC 與 SHA-3 一起使用,但沒有意義,因為 KMAC和prefix-PRF 是 SHA-3 的完美選擇,並且比 HMAC 更簡單、更快。