Encryption
如何設計一個安全的挑戰響應認證協議?
我正在實現一個自定義質詢-響應協議來向伺服器驗證客戶端。不需要相互身份驗證,即伺服器不需要向客戶端進行身份驗證。
該協議通過 TCP 工作。客戶端和伺服器位於 LAN 中(而不是通過 Internet)。只有一台伺服器和一台客戶端。認證設計如下:
$ S \rightarrow C : N $
$ C \rightarrow S : {N}_K $
伺服器在哪裡 $ S $ 創建一個 128 位隨機數並將其作為 nonce 發送 $ N $ 給客戶 $ C $ . 客戶端使用預共享密鑰使用 AES-192 加密隨機數 $ K $ 並將其作為響應發送到伺服器。然後伺服器解密消息並檢查隨機數。
問題:
- 這個協議設計安全嗎?
- 使用 HMAC(或任何其他 MAC)而不是 AES 加密有什麼好處?
- 我錯過了什麼?
這個協議設計安全嗎?
見下文。
使用 HMAC(或任何其他 MAC)而不是 AES 加密有什麼好處?
HMAC 最初是作為一種構造提出的,它將基於從塊密碼建構的壓縮函式的 Merkle-Damgaard 雜湊函式轉換為消息身份驗證程式碼。儘管 HMAC 中沒有解密,但您實際上可以通過比較 HMAC 簽名標籤輕鬆替換基於 AES 解密的身份驗證。
我錯過了什麼?
您所做的本質上是經過身份驗證的安全傳輸,沒有機密性。
您缺少的是在初始身份驗證之後您沒有對交換進行身份驗證 - 這允許連接劫持、任意注入數據包等等。
因此,您應該使用 HMAC+
$$ hash $$或 CMAC+$$ block cipher $$驗證您交換的所有消息,並保持計數器作為檢測重複數據包和消息重放攻擊的狀態。