網路安全
重放攻擊(replay attack)
假設一棟大樓在你揮動一張會廣播固定碼的門禁卡時讓你進去。現在想像有人在你走進去時錄下那段無線電碼,稍後在門口播放它——門也為他打開了。他從不必破解這段碼、也不必知道它是什麼意思;他只是擷取了一則有效的訊息並再用一次。重放攻擊正是如此:攻擊者擷取一則合法、甚至完全加密的訊息,稍後再次送出它,以便讓同一個效果再發生一次。
關鍵在於:重放攻擊可以在攻擊者從未解密任何東西的情況下成功。假設你的銀行 App 送出一則加密且經鑑別的指令,意思是「轉 100 元到帳戶 X」。攻擊者讀不到也改不了它——完整性與機密性都成立——但如果他錄下那個封包並再次送出一模一樣的位元組,而伺服器無法把它和一個新請求區分開來,那筆轉帳就會發生兩次。漏洞不在加密本身;而在於缺乏「新鮮度」——訊息裡沒有任何東西說明它是何時產生的、或它只能被使用一次。
為什麼重要:重放顯示出機密性與完整性並不足夠;你還需要保證一則訊息是新鮮的、且只被使用一次。標準防禦加入新鮮度:一個 nonce(一次性使用的數字,接收者會記住它,若再見到就拒絕)、一個帶有短暫有效期的時間戳記,或一個放在被鑑別資料裡的逐訊息序號。例如 TLS 在它的記錄協定裡含有序號,使被重放的記錄會被偵測並丟棄。每當一個協定忘了新鮮度,重放就會偷偷溜回來。
攻擊者擷取了那個授權付款的加密封包。他無法解密它,但一小時後重送一模一樣的位元組。如果伺服器沒有檢查 nonce、時間戳記或序號,它就會再次處理這筆付款——一次成功的重放,完全不需要解密。
擷取、重送——缺的是新鮮度,不是保密性。
重放能打敗那些有加密與完整性、卻沒有新鮮度的系統。解藥是 nonce、時間戳記或序號——證明每則訊息都是新的、且只能用一次。加密的強度在這裡無關緊要。
又稱
另見