為什麼 nonce 可以防止重放攻擊?
我有一個關於密碼隨機數的問題。我了解隨機數的使用,但是有一個特定的部分我不明白。請考慮下面的圖片。
如果 nonce未加密,我真的不明白為什麼不可能進行重放攻擊。因為,如果它沒有加密並且我(作為攻擊者)知道隨機數,那麼我可以預測下一個數字(N + 1)並將其發送給 Bob。顯然我不能自己生成 MAC(好吧,我可以,但 Bob 不會相信它)——我沒有相應的密鑰;但是我可以再次使用“新”隨機數(N + 1)發送以前由 Alice 生成的 MAC ……?
有人可以解釋為什麼這行不通嗎?
提前致謝。
如果不知道 MAC 密鑰並且 M1 != M2,則不可能從 MAC(K, M1) 計算 MAC(K, M2)。
更一般地說,不可能確定您尚未看到的任何消息的 MAC。(同樣,沒有密鑰。)隨機數的定義是一個數字,它只與給定的密鑰一起使用一次。
Bob 通過拒絕請求來確保 nonce 只使用一次,除非 Alice 送出的 nonce 值嚴格增加。
該協議還有其他問題。我認為它是用來對使用者進行身份驗證的。除了基本上只是證明 Alice 知道 K 之外,沒有任何資訊被傳輸。
該協議的功能很像一次性密碼方案,並且具有相同的限制。它不能防止 MITM 攻擊、會話劫持或伺服器模擬。它不是一個完整的通信協議。
有時人們會想出這樣的方案來控制鎖或電器。將這種協議與“切換”信號一起使用是不安全的。身份驗證請求可能會被阻止,從而使使用者的設備處於與他們認為的狀態相反的狀態。
也可以將阻塞 Alice 的請求與重放攻擊結合起來。有人可以阻止 Alice 請求鎖上鎖,侵入,然後回放 Alice 的消息,讓它看起來好像鎖一直都在鎖上。
延遲播放可以通過 Alice 來解決,而不是發送 MAC K(N A || 時間戳)。(只要 Alice 和 Bob 信任同步時鐘。)確認消息可以讓 Bob 告訴 Alice 命令已收到。ack 需要自己的身份驗證標籤,否則可能會被欺騙。
一個隨機數本身並不能防止重放攻擊。它只是一個數字,它不做任何事情,它不能給出任何保證。您可以使用 nonce 定義一個協議,它根本沒有加密功能 - 很明顯,這在任何意義上都不安全。
這一切都取決於您如何在協議中使用隨機數以及您的函式提供什麼樣的安全屬性:如果很難(在密碼學意義上)計算 $ f(x,n_1) $ 從 $ f(x,n_2) $ ,然後在第二個參數中使用 nonce 意味著,每次使用不同的第二個參數時 - 攻擊者不能使用過去的互動來偽造某些東西。
在您的範例中,您將其與計數器的概念混合在一起。將這些結合起來並非不可能,但是您的協議很容易受到攻擊,實際上並沒有按照預期做:Alice 每次發送消息時都會增加她的“計數器”,Bob 每次收到消息時都會更新他的“計數器” . 控製網路的攻擊者基本上可以隨心所欲地扭曲和旋轉這些值。由於 MAC 中沒有使用其他任何內容,因此它們不受任何約束。