Protocol-Design

對稱密鑰登錄協議

  • August 1, 2014

我正在嘗試分析基於對稱密鑰加密的登錄協議。我剛剛開始,所以這很可能是一個非常糟糕的主意,但我還是想听聽你的想法。

該協議假定存在(並同意)以下內容:

  • 對稱密鑰算法 $ E $ / $ D $ .
  • 密鑰派生函式 $ KDF $ .
  • “強”散列函式 $ H $ .

此外,伺服器 $ S $ 有一個密鑰 $ k_{S} $ .

當一個使用者 $ U $ 想在伺服器上註冊 $ S $ ,會發生以下情況:

  1. $ S $ 生成一個隨機位串 $ b_{S} $ .
  2. $ S $ 加密 $ b_{S} $ , 產生 $ v_{S} = E_{k_{S}} (b_{S}) $ .
  3. $ S $ 計算 $ h_{S} = H(b_{S}) $ .
  4. $ S $ 發送對 $ \langle v_{S}, h_{S} \rangle $ 給使用者(這是伺服器的“驗證對”)。
  5. $ U $ 選擇密碼 $ p $ 和用途 $ KDF $ 要得到 $ k_{U} = KDF(p) $ ,它的密鑰。
  6. $ U $ 生成一個隨機位串 $ b_{U} $ .
  7. $ U $ 加密 $ \langle b_{U}, v_{S}, h_{S} \rangle $ 屈服 $ v_{U} = E_{k_{U}} (\langle b_{U}, v_{S}, h_{S} \rangle) $ .
  8. $ U $ 計算 $ h_{U} = H(b_{U}) $ .
  9. $ U $ 發送對 $ \langle v_{U}, h_{U} \rangle $ 到伺服器。
  10. $ S $ 商店 $ v_{U} $ 和 $ h_{U} $ ,將它們關聯到 $ U $ 的使用者名(或使用的任何辨識方式)。

現在,為了讓使用者對伺服器進行身份驗證,協議進行如下:

  1. $ U $ “請求”登錄 $ S $ .

  2. $ S $ 回應 $ v_{U} $ .

  3. $ U $ 解密 $ v_{U} $ 得到 $ \langle b_{U}, v_{S}. h_{S} \rangle = D_{k_{U}} (v_{U}) $ .

  4. $ U $ 驗證伺服器的身份:

  5. $ U $ 發送 $ v_{S} $ 到伺服器。

  6. $ S $ 解密 $ v_{S} $ 得到 $ b_{S} = D_{k_{S}}(v_{S}) $ .

  7. $ S $ 生成一個隨機位串 $ b’_{S} $ .

  8. $ S $ 加密 $ b’{S} $ , 產生 $ v’{S} = E_{k_{S}} (b’_{S}) $ .

  9. $ S $ 計算 $ h’{S} = H(b’{S}) $ .

  10. $ S $ 發送 $ \langle b_{S}, v’{S}, h’{S} \rangle $ 背部。

  11. $ U $ 驗證 $ H(b_{S}) = h_{S} $ .

  12. 如果上述過程成功, $ U $ 繼續,否則, $ U $ 流產。

  13. $ U $ 生成一個隨機位串 $ b’_{U} $ .

  14. $ U $ 加密 $ \langle b’{U}, v’{S}, h’{S} \rangle $ 屈服 $ v’{U} = E_{k_{U}} (\langle b’{U}, v’{S}, h’_{S} \rangle) $ .

  15. $ U $ 計算 $ h’{U} = H(b’{U}) $ .

  16. $ U $ 發送三胞胎 $ \langle b_{U}, v’{U}, h’{U} \rangle $ 到伺服器。

  17. $ S $ 驗證 $ H(b_{U}) = h_{U} $ .

  18. 如果上述過程成功, $ S $ 繼續(記錄 $ U $ 換句話說, $ S $ 流產。

  19. $ S $ 替換 $ v_{U} $ 和 $ v’{U} $ 和 $ h{U} $ 和 $ h’_{U} $ 為使用者。

我知道這看起來很複雜,但實際上很簡單。證據 $ U $ 給 $ S $ 知道如何將密文解密為給定的明文(已知 $ S $ ) 雜湊。為了避免必須在使用者端持久化狀態,內部加密了更多資訊 $ v_{U} $ 這樣使用者就可以驗證伺服器是他所說的那個人(通過與他(使用者)向他(伺服器)進行身份驗證的方式相同的方式)。

我發現這個協議特別有趣的屬性之一是根本不需要交換密鑰(類似於 Shamir 的 3 路協議),並且伺服器不儲存等效於密碼的資訊,此外,它類似於(有點) Lamport 的鍊式雜湊登錄 (S/KEY)。

所以我的問題是:

  1. 這行得通嗎?
  2. 有沒有明顯的攻擊?
  3. 這是否比任何其他身份驗證協議更好/更差(可能更糟)?
  4. 關於該協議提供的安全性可以說些什麼?

此外,我想嚴格保持它基於對稱密碼+散列。

很抱歉描述冗長,我歡迎知識淵博的人進行編輯。

我認為我對“簡單”的定義與您的不同。:)

有沒有明顯的攻擊?

它容易受到中間人攻擊,例如:

第 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 $ . 標識不強,因為沒有對交換的任何其他數據進行身份驗證。

引用自:https://crypto.stackexchange.com/questions/18414