對稱密鑰登錄協議
我正在嘗試分析基於對稱密鑰加密的登錄協議。我剛剛開始,所以這很可能是一個非常糟糕的主意,但我還是想听聽你的想法。
該協議假定存在(並同意)以下內容:
- 對稱密鑰算法 $ E $ / $ D $ .
- 密鑰派生函式 $ KDF $ .
- “強”散列函式 $ H $ .
此外,伺服器 $ S $ 有一個密鑰 $ k_{S} $ .
當一個使用者 $ U $ 想在伺服器上註冊 $ S $ ,會發生以下情況:
- $ S $ 生成一個隨機位串 $ b_{S} $ .
- $ S $ 加密 $ b_{S} $ , 產生 $ v_{S} = E_{k_{S}} (b_{S}) $ .
- $ S $ 計算 $ h_{S} = H(b_{S}) $ .
- $ S $ 發送對 $ \langle v_{S}, h_{S} \rangle $ 給使用者(這是伺服器的“驗證對”)。
- $ U $ 選擇密碼 $ p $ 和用途 $ KDF $ 要得到 $ k_{U} = KDF(p) $ ,它的密鑰。
- $ U $ 生成一個隨機位串 $ b_{U} $ .
- $ U $ 加密 $ \langle b_{U}, v_{S}, h_{S} \rangle $ 屈服 $ v_{U} = E_{k_{U}} (\langle b_{U}, v_{S}, h_{S} \rangle) $ .
- $ U $ 計算 $ h_{U} = H(b_{U}) $ .
- $ U $ 發送對 $ \langle v_{U}, h_{U} \rangle $ 到伺服器。
- $ S $ 商店 $ v_{U} $ 和 $ h_{U} $ ,將它們關聯到 $ U $ 的使用者名(或使用的任何辨識方式)。
現在,為了讓使用者對伺服器進行身份驗證,協議進行如下:
$ U $ “請求”登錄 $ S $ .
$ S $ 回應 $ v_{U} $ .
$ U $ 解密 $ v_{U} $ 得到 $ \langle b_{U}, v_{S}. h_{S} \rangle = D_{k_{U}} (v_{U}) $ .
$ U $ 驗證伺服器的身份:
$ U $ 發送 $ v_{S} $ 到伺服器。
$ S $ 解密 $ v_{S} $ 得到 $ b_{S} = D_{k_{S}}(v_{S}) $ .
$ S $ 生成一個隨機位串 $ b’_{S} $ .
$ S $ 加密 $ b’{S} $ , 產生 $ v’{S} = E_{k_{S}} (b’_{S}) $ .
$ S $ 計算 $ h’{S} = H(b’{S}) $ .
$ S $ 發送 $ \langle b_{S}, v’{S}, h’{S} \rangle $ 背部。
$ U $ 驗證 $ H(b_{S}) = h_{S} $ .
如果上述過程成功, $ U $ 繼續,否則, $ U $ 流產。
$ U $ 生成一個隨機位串 $ b’_{U} $ .
$ U $ 加密 $ \langle b’{U}, v’{S}, h’{S} \rangle $ 屈服 $ v’{U} = E_{k_{U}} (\langle b’{U}, v’{S}, h’_{S} \rangle) $ .
$ U $ 計算 $ h’{U} = H(b’{U}) $ .
$ U $ 發送三胞胎 $ \langle b_{U}, v’{U}, h’{U} \rangle $ 到伺服器。
$ S $ 驗證 $ H(b_{U}) = h_{U} $ .
如果上述過程成功, $ S $ 繼續(記錄 $ U $ 換句話說, $ S $ 流產。
$ S $ 替換 $ v_{U} $ 和 $ v’{U} $ 和 $ h{U} $ 和 $ h’_{U} $ 為使用者。
我知道這看起來很複雜,但實際上很簡單。證據 $ U $ 給 $ S $ 知道如何將密文解密為給定的明文(已知 $ S $ ) 雜湊。為了避免必須在使用者端持久化狀態,內部加密了更多資訊 $ v_{U} $ 這樣使用者就可以驗證伺服器是他所說的那個人(通過與他(使用者)向他(伺服器)進行身份驗證的方式相同的方式)。
我發現這個協議特別有趣的屬性之一是根本不需要交換密鑰(類似於 Shamir 的 3 路協議),並且伺服器不儲存等效於密碼的資訊,此外,它類似於(有點) Lamport 的鍊式雜湊登錄 (S/KEY)。
所以我的問題是:
- 這行得通嗎?
- 有沒有明顯的攻擊?
- 這是否比任何其他身份驗證協議更好/更差(可能更糟)?
- 關於該協議提供的安全性可以說些什麼?
此外,我想嚴格保持它基於對稱密碼+散列。
很抱歉描述冗長,我歡迎知識淵博的人進行編輯。
我認為我對“簡單”的定義與您的不同。:)
有沒有明顯的攻擊?
它容易受到中間人攻擊,例如:
第 9 步:M 替換 $ \langle b_{U}, v’{U}, h’{U} \rangle $ 和 $ \langle b_{U}, v_{M}, h_{M} \rangle $ ,他們計算了自己的隨機位串並使用自己的密鑰對其進行加密。現在 M 可以以 U 身份登錄(而 U 不能)。
這意味著它可能並不比您在步驟 4 中省略伺服器標識更安全。 $ v_S $ 和 $ h_S $ . 標識不強,因為沒有對交換的任何其他數據進行身份驗證。