Hash

有沒有一種標準方法可以將隨機數與 HMAC 一起使用?

  • June 30, 2014

許多協議在包含隨機數的消息上使用 HMAC,但它們似乎並沒有以一致的方式這樣做。例如,在OAuth中,nonce 位於 URL 編碼的鍵值字元串的中間,如下所示:

POST&http%3A%2F%2Fexample.com%2Frequest&a2%3Dr%2520b%26a3%3D2%2520q
%26a3%3Da%26b5%3D%253D%25253D%26c%2540%3D%26c2%3D%26oauth_consumer_
關鍵%3D9djdj82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_m
ethod%3DHMAC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk
9d7dh3k39sjv7

這可能是因為不同的協議將 nonce 用於不同的目的。但是,我特別感興趣的是使用帶有恆定消息的隨機數來獲取重複消息的不同身份驗證器(使用相同的密鑰)。

  1. 是否有一種標準化的方法可以在 HMAC 身份驗證中包含隨機數?
  2. 兩者之間是否有任何理論差異 $ H_K(\text{Msg}||\text{Nonce}) $ 和 $ H_K(\text{Nonce}||\text{Msg}) $ ?

在假設下 $ (K,\text{Msg})\to H_K(\text{Msg}) $ 是一個安全 MAC(無論是 HMAC 還是任何其他 MAC),並且 $ \text{Nonce} $ 不重複且大小固定,兩者 $ H_K(\text{Msg}||\text{Nonce}) $ 和 $ H_K(\text{Nonce}||\text{Msg}) $ 顯然是安全的,因為對手不知道 $ K $ 無法區分隨機數,即使是迭代選擇 $ \text{Nonce} $ 和 $ \text{Msg} $ .

什麼時候 $ (K,\text{Msg})\to H_K(\text{Msg}) $ 是 HMAC,我們不信任底層散列,而且這個散列的弱點已經嚴重到 HMAC 不安全,很難判斷哪個是 $ \text{HMAC}_K(\text{Msg}||\text{Nonce}) $ 或者 $ \text{HMAC}_K(\text{Nonce}||\text{Msg}) $ 可能是最少損壞的。我不會擔心這一點,因為 HMAC在理論上和實踐中都是安全的,具有小於碰撞抗性的雜湊值(MD5 的抗碰撞性已被撕成碎片,但 HMAC-MD5 到目前為止表現得很勇敢)。任何剩餘的安全性可能更多地取決於對手真正有什麼限制 $ \text{Msg} $ ,以及什麼才是真正的成功,而不是其他任何事情。

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