Protocol-Design
鑰匙棘輪對重放攻擊有效嗎?
在這個問題的答案中,消息計數器用於防止重放攻擊。可以用鑰匙棘輪代替嗎?基本思想是,每發送一條消息,對稱加密密鑰都會被其自身的雜湊值替換。然後接收者可以拒絕任何使用先前密鑰的消息。
這種方法的好處是不需要線上路上發送計數器,因此節省了頻寬。我正在設計一個頻寬受限的系統,但計算量不大,因此對每條消息執行散列不是問題(並且在消息失去的情況下讓接收者可能嘗試多個鍵也不是問題)。
使用鑰匙棘輪在防止重放攻擊方面是否比消息計數器更有效?還有其他理由不使用這種方法嗎?
是的,棘輪是防止重放攻擊的有效方法。例如,信號協議會這樣做(出於重放保護以外的原因),並且在部落格文章中指出重放保護“免費提供”。
由於您的傳輸協議可能會失去消息,我認為它也不能保證順序,因此您必須儲存一些跳過的密鑰。事實上,正如您在實際規範中看到的那樣,我剛剛提到的信號協議仍然出於這個記賬原因發送一個計數器。您必須決定按順序嘗試跳過的鍵在計算上是否可行。此問題與您連結的問題的第一個答案中描述的第一個攻擊場景有關:可以保留消息並在以後重播它們的攻擊者仍然會成功。
如果您不驗證您的消息,此方案也會啟用 DoS 攻擊 - 攻擊者只需發送足夠的消息來填滿儲存密鑰的緩衝區,您將無法解密合法消息。雖然這可以防止攻擊者使用垃圾數據作為密鑰,但他仍然可以為此目的使用帶有合法密鑰的舊消息。結果是您還必須跟踪舊密鑰、添加計數器或使舊的身份驗證標籤無效,例如還需要改進用於簽名的密鑰材料。