一個簡單的客戶端/伺服器認證協議
幾天前,我尋求幫助以查找和糾正身份驗證協議的問題。我關閉了文章,因為我確信我可以糾正它,但不幸的是我遇到了一些麻煩。“舊”文章如下:
我正在處理這個問題:確定以下協議是否“安全”,如果不是,則對其進行修改以使其安全。
我將使用後續的符號來描述協議:
- $ N $ 是一個隨機數
- $ X \longrightarrow Y: \space M $
表示 $ X $ 發送 $ M $ 至 $ Y $
- $ K_{XY} $ 表示共享的對稱密鑰 $ X $ 和 $ Y $
- 和 $ K_{XY}(M) $ 表示該消息 $ M $ 已使用對稱密鑰加密 $ K_{XY} $ .
該協議允許客戶端 $ C $ 向伺服器驗證自己 $ S $ 使用身份驗證服務 $ A $ .
$ C \longrightarrow S:\space C $
$ S \longrightarrow C:\space N $
$ C \longrightarrow S:\space K_{CA}(N) $
$ S \longrightarrow A:\space K_{SA}(C, K_{CA}(N)) $
$ A \longrightarrow S:\space K_{SA}(N) $
$ S $ 認證 $ C $ 當且僅當隨機數收到 $ N $ , 由認證服務獲得 ( $ A $ ),等於發送到的隨機數 $ C $ .
假設通信通道不安全,攻擊者(稱為 Eve)可以冒充 $ C $ 只需發送消息“C”和 $ K_{CA}(N) $ 每當 $ C $ 試圖驗證自己。
在這種情況下如何避免冒充和離線猜測?有什麼建議嗎?我不想要這個問題的答案,只是一些我自己繼續的提示。最後,我想說我知道如何使協議安全,但我的答案在於完全改變上述協議,所以我認為我的答案不是最合適的。
最近想修改協議如下:
$ C \longrightarrow S:\space C $
$ S \longrightarrow C:\space K_{SA}(N) $
$ C \longrightarrow S:\space K_{CA}(K_{SA}(N)) $
$ S \longrightarrow A:\space K_{SA}(C, K_{CA}(K_{SA}(N))) $
$ A \longrightarrow S:\space K_{SA}(N) $
現在可以工作了嗎?
如果夏娃知道 $ C, \space N, \space K_{CA}(N) $ 然後她就可以冒充 $ C $ 只需遵循您上面描述的協議即可。
如果她只知道 $ K_{CA}(N) $ 對於單 $ N $ 那麼攻擊的有效性取決於集合,其中 $ N $ 被選中。
但是由於您假設通信通道不安全,攻擊者可以監視多個身份驗證會話以獲得足夠數量的對。 $ (N, K_{CA}(N)) $ 以高機率成功攻擊。