Mac

奇怪的MAC算法

  • November 14, 2019

我正在與使用以下算法簽署消息的支付提供商合作:

  1. k商家安全地獲得了一個只有他們和支付提供商知道 的密鑰。**編輯:**通常鑰匙很長。
  2. 支付是通過重定向實現的,商家稍後會收到回調,其中包含有關支付操作成功或失敗的資訊。商家認為此資訊值得信賴。這是訂單號成功支付回調的範例。1234 和一個商家託管在example.com

example.com?orderID=1234&paymentStatus=SUCCESS&...&signature=abcd 3. 簽名的消息m按以下方式形成:

orderid=<..>|paymentStatus=<..>|... 4. 簽名算法S(m,k)被選擇為:(signature=H(m||k)意味著m||km密鑰連接k) 其中H是一個散列函式,在這種情況下MD5。 5. 驗證算法是V(signature, m, k)並且僅在 時返回 true H(m||k) = signature

據我了解,如果簽名算法是 MD5 的內部工作原理,S(m,k) = H(k||m)那麼這將是完全不安全的,因為如果攻擊者知道H(k||m)她可能能夠計算出她選擇的消息H(k||m||m')在哪裡m'- 這意味著簽名容易受到兩者的攻擊存在的和選擇性的偽造。正確的?但無論有意與否,算法是S(m,k) = H(m||k)- 密鑰放在連接字元串的最後。

到目前為止,我想不出這個協議中有可利用的漏洞(我沒有考慮 MD5 固有的問題)。任何想法,這是否足夠安全?

我們可以MAC(k,m)=MD5(m||k)在選擇的消息設置中攻擊由: 定義的 MAC,主要是因為 MD5 的抗碰撞性被破壞。

對手選擇相同長度mm' $ b\ge64 $ 字節,僅在它們的第一個不同 $ \lfloor b/64\rfloor $ 64 字節的塊,這樣在對m和的這些塊進行散列後會發生衝突m'。If 遵循那個MAC(k,m)=MAC(k,m'),也MAC(k,m||m")=MAC(k,m'||m")為 any m"。我們知道各種有效的技術來創建這樣的mand m', with $ b $ 低至 128 甚至 64 字節,包括適度的約束:


如果我們有一個完整的Merkle-Damgård雜湊而不是 MD5,比如 SHA-256,或者隨機預言模型中的安全雜湊(SHA-256 不完全,因為它具有長度擴展屬性),那麼我們基本上會如本問題所述,沒有已知的攻擊。

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