為什麼這個具有隨機數和樹方的身份驗證協議不安全?
為什麼以下身份驗證服務不安全?
C⟶S: $ I_C $
S⟶C: $ N $
C⟶S: $ E(K_{C,A}, N) $
S⟶A: $ E(K_{S,A}, {I_C, E(K_{C,A}, N)}) $
A⟶S: $ E(K_{S,A}, N) $
在哪裡:
- C = 客戶
- S = 伺服器
- A = 身份驗證服務
- $ I_X $ = 實體 X 的標識字元串
- $ N $ 是隨機數
- $ E(K, M) $ 是使用密鑰的加密操作 $ K $ 和留言 $ M $
- $ K_{X,Y} $ = X 和 Y 共享的對稱密鑰
假設客戶端和伺服器曾經通過隨機數連接 $ N $ ,並且對手被竊聽了這些消息。所以他有 $ I_C $ , $ N $ , $ E(K_{C,A}, N) $ , $ E(K_{S,A}, {I_C, E(K_{C,A}, N)}) $ 和 $ E(K_{S,A}, N) $ . 現在在新會話中,攻擊者可以輕鬆冒充伺服器的身份。為此,只需按照以下步驟操作:
C⟶Adversary: $ I_C $
Adversary⟶C: $ N $
C⟶Adversary: $ E(K_{C,A}, N) $
Adversary⟶A: $ E(K_{S,A}, {I_C, E(K_{C,A}, N)}) $
A⟶Adversary: $ E(K_{S,A}, N) $
注意,在這個協議中,伺服器可以使用 $ E(K_{S,A}, N) $ 驗證客戶端身份,但客戶端沒有任何有關伺服器身份的資訊。
**編輯:**此外,對手不能冒充客戶使用 $ E(K_{C,A},N) $ 因為 $ N $ 由有效的伺服器生成,並將在每個會話中更改。因此,對手無法找到有效的 $ E(K_{C,A},N) $ 使用以前竊聽的消息。為了防止這種攻擊,您可以修改協議如下:
C⟶S: $ I_C $
S⟶C: $ N $
C⟶S: $ E(K_{C,A}, N, M) $
S⟶A: $ E(K_{S,A}, {I_C, E(K_{C,A}, N, M)}) $
A⟶S: $ E(K_{S,A}, N, E(K_{C,A}, M)) $
S⟶C: $ E(K_{C,A}, M) $
然而,這只是一個改變,應該調查這個協議對其他攻擊的抵抗力。“加密協議:基於可信新鮮度的安全分析”,作者是 Ling Dong 和 Kefei Chen,是一本關於協議的有價值的書籍,您可以參考以獲取更多資訊。