Hash

MAC(key, msg) 和 SHA(key || msg) 的區別

  • February 29, 2020

我知道 SHA(key || msg) 容易受到字元串連接攻擊。但是,如果我們指定 key bit-length 和 msg bit-length 呢?例如,key 位長為 256 位,msg 位長為 256 位。如果 msg 或 key bit-length 長於 256,那麼我們根本不做任何事情。在這種情況下,SHA(key || msg) 和 MAC(key, msg) 之間會有什麼區別嗎?

具有 SHA-3 的容量$$ 1 $$針對長度擴展,它不需要 HMAC,其中密鑰被使用兩次來建構安全 MAC。取而代之的是,可以設計為在消息前加上密鑰。實際上,NIST 已經將其標準化為 KECCAK 消息認證程式碼KMAC

使用固定的密鑰和消息大小,您的方案可以被視為密鑰 MAC。您的情況有一個缺點,消息長度禁止 MAC 任意消息。

此外,您的方案在哪裡發生衝突 $ \operatorname{SHA}(key_1\mathbin|message_1)=(key_2\mathbin| message_2) $ $$ 2 $$即密鑰用作消息,消息用作密鑰( $ key_2 = message_1 $ 和 $ key_1 = message_2 $ ).

堅持標準。使用 KMAC,您可以在 cSHAKE128(XOF - 可擴展輸出功能)的幫助下對任意長度進行 MAC 並獲得所需的輸出長度,並且具有域分離,即使您為相同的輸入請求不同的輸出大小,輸出也會有所不同。


$$ 1 $$也可以使用 Blake2 和 Skein。那些也抵抗長度擴展攻擊

$$ 2 $$這裡我們假設 SHA 不是 SHA-1 或 SHA-0。另請注意,SHA-512/256、SHA-512/224、SHA-384 對長度擴展攻擊具有抵抗力。這些是在 SHA3 之後設計的 NIST

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