Mac

重放抗攻擊MAC?

  • February 26, 2020

我提出了一個威脅模型,其中:

  • 愛麗絲和鮑勃就共享密鑰達成一致 $ K $
  • Alice 發送純文字 $ M $ 及其 $ \operatorname{MAC} $ 標籤, $ T = \operatorname{MAC}(K,M) $ 通過不受信任的網路發送給 Bob
  • 夏娃收藏雙 $ M $ 和 $ T $ ,因此發起重放攻擊

首先,我很好奇我的威脅模型是否合理。

夏娃有沒有可能收集一雙 $ M $ 和 $ T $ ,從而發動這樣的攻擊?

鑑於此,是否有任何廣泛使用的抗重放攻擊 MAC方案?

普通 MAC 算法充當密鑰、消息和(可能)隨機數的確定性函式。每次評估函式時,都會得到相同的結果。數學函式不知道它們是否是第一次被評估。

重放攻擊保護必須在協議級別使用。這項任務需要軟體,而不是數學。狀態的維護是問題的必要和關鍵部分。(包括斷電後保持狀態等問題,以及在有多個端點或系統級並發時確保原子性和一致性。)

防止重放攻擊的最佳方法是在您嘗試為其創建標籤的消息中包含一個序列號。(不過,您可能不需要通過網路顯式發送它。這可能是多餘的。)

為所有消息添加一個固定寬度的計數器。維護n客戶端和伺服器之間共享的值。每次收到消息時,檢查消息的序列號是否是n您期望的值 ( )。n == 0在第一條消息上查找,n == 1在第二條消息上查找,依此類推。如果您收到帶有有效標籤的正確序列號的消息,則遞增n. 如果您收到帶有無效標籤或您已經看到的序列值的消息,則拒絕該消息。

此方法還可以防止中間人嘗試重新排序或阻止消息。您不希望攻擊者能夠更改消息序列

$$ “On”, “Off”, “On” $$至$$ “On”, “On”, “Off” $$. 或者只是$$ “Off” $$. 為了說明序列號如何解決該問題,假設發送者發送序列號

$$ “1:On”, “2:Off”, “3:On” $$. 很明顯,僅使用 O(1) 記憶體就可以檢測到重複或重新排序的消息。可以(部分)通過查找跳過的序列號來檢測有選擇地阻止消息的嘗試。 seq == n(雖然有些協議用. Car key fobs代替了伺服器端檢查seq >= n,但可能會這樣做,因為使用者在按下按鈕時可能會超出信號範圍。如果採用這種方法,那麼重要的是所有協議中發送的命令是冪等的,使用者可以知道系統處於什麼狀態。您可以有“鎖定”和“解鎖”命令,但不能有“切換鎖定”命令。對於汽車鑰匙扣系統,汽車應該鎖定時發出嗶嗶聲或閃爍其指示燈。)

顯然,無法通過查找跳過的序列號來檢測阻止會話中發送的最後一條消息的嘗試。有必要添加“結束傳輸”消息(或消息標誌),因為您無法區分不完整的會話和惡意中斷傳輸。


防止重放攻擊**的更糟糕的方法是要求客戶端將隨機隨機數附加到每個 MACed 消息。**但是隨後伺服器必須付出更多努力來跟踪已使用的隨機數。如果伺服器看到它之前已經看到的隨機數,那麼它會拒絕(重放)消息。

這種系統可以讓您將冪等性添加到原本沒有它的系統中。在 Web 應用程序中使用相同的方法來防止意外的雙重發布消息。如果使用者有網路問題,不小心點擊了刷新按鈕,或者點擊了後退按鈕並重新送出了一個表單,那麼伺服器會注意到重用的 nonce 並忽略重新送出。

此方法不會檢測重新排序或選擇性阻止的消息。這對於其他意外雙后檢測系統來說是可以的,因為被阻止的消息不被視為現實威脅。亂序文章被接受為“功能”:使用者可以打開兩個選項卡,分別撰寫兩條消息,並以完成文章的任何順序送出文章。

您可以在其他使用亂序協議的場景中使用它,但要正確使用它很棘手。因此,不值得冒險或在開發人員時間上進行額外投資。

另一個問題是“已用過的 nonce”數據庫可以無限增長。修改後的系統可以將時間戳合併到 nonce 中,如果添加時間戳檢查,則允許清除舊記錄。

如果您有強大的有狀態伺服器和低端無狀態客戶端,您基本上只會選擇使用這種方法而不是使用序列號。(沒有非易失性儲存器的客戶端。)

那些(無狀態)客戶端需要 TRNG,因為使用長隨機數來避免意外重用 nonce。(導致誤報重放檢測。)

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