使用普通的 Diffe-Hellman 進行具有已知公鑰的伺服器身份驗證
除了其他考慮之外,是否可以使用 DH 和已建立的公鑰(連同固定的 g、p、q)來安全地驗證伺服器而不是使用某些簽名算法?
換句話說,我們將替換 $ SIG_S(Data) $ 在這個方案的一些協議中。下面描述的步驟可以與使用的任何協議合併,因此不需要添加更多步驟。
客戶 $ C $ 知道 $ g $ , $ p $ , $ q $ 和 $ g^s $ .
- $ C \rightarrow S : { g^c } $
- 伺服器生成一個隨機值[Math Processing Error] $ N_S $ .
- $ K \leftarrow KDF(N_S, g^{cs}) $
- $ S \rightarrow C : { N_S, HMAC_K(Data) } $ 在哪裡 $ Data $ 是我們正在修改的協議中籤署的相關數據。
- $ C $ 結構體[Math Processing Error] $ K $ 並驗證 HMAC 計算是否匹配。
假設沒有一個[Math Processing Error] $ K $ ,[Math Processing Error] $ N_S $ ,[Math Processing Error] $ g^s $ 或者[Math Processing Error] $ g^c $ 曾經被回收用於任何其他用途(例如密鑰生成)。
我想知道的是,這是否可以替代使用 DSA/RSA/etc 進行簽名以證明此特定設置中的身份。
例子:
僅具有伺服器身份驗證的普通 STS
- $ C \rightarrow S: { g^x $ }
- $ S \rightarrow C: { g^y, S, { SIG_S(g^x, g^y) }_{K_s} } $
普通STS 修改
- $ C \rightarrow S: { g^x, g^c } $
- [Math Processing Error] $ S \rightarrow C: { g^y, S, { N_S, HMAC_K(g^x, g^y) }_{K_s} } $
僅帶有伺服器身份驗證的普通 SIGMA
- $ C \rightarrow S: { g^x $ }
- $ S \rightarrow C: { g^y, S, SIG_S(g^x, g^y), MAC_{K_m}(S) } $
普通SIGMA修改
- $ C \rightarrow S: { g^x, g^c } $
- [Math Processing Error] $ S \rightarrow C: { g^y, S, N_S, HMAC_K(g^x, g^y), MAC_{K_m}(S) } $
對手可以(反复)送出[Math Processing Error] $ h $ 作為[Math Processing Error] $ g^c $ 得到一個隨機的[Math Processing Error] $ N_s $ 這樣對手將
能夠以啟發式壓倒性的準確性進行測試,無論是否 $ : \operatorname{KDF}(N_s,h^s) = x ; $ .
攻擊者還可以通過在密鑰協商後向伺服器發送所謂的密文來
嘗試更多地了解伺服器獲得的會話密鑰 。 (特別是,對手可以在看到客戶的實際價值後做這些事情
$ g^c $ .)
展示針對此類攻擊的安全性而不展示
針對以下情況的安全性將是棘手的,對於每個 $ h $ 價值,對手將學習
$ \langle N_s,\operatorname{KDF}(N_s,h^s)\rangle: $ 對於隨機 $ N_s $ (在對手選擇後選擇 $ h $ )。
這樣的安全結果在某種程度上類似於 CCA2 安全;
如果這個類比會更好 $ N_s $ 每次都是一樣的。 $ ;; $ 與我之前提到的類似結構不同,我現在確信這將在[Math Processing Error] $ : $ KEA1 + KDF-is-a-random-oracle +計算-diffie-hellman[Math Processing Error] $ : $ .
在這三個假設下,密鑰協議對於可以選擇伺服器隨機數
的對手來說是安全的
[Math Processing Error] $ N_s $ ,包括使他們重複的能力。
(這是四個,因為中間一個提供了一個使用隨機預言機的變體。) 但是, 只有已知且非常小的安全性降低才能獲得
潛在的效率改進 。 特別是,在您的四個範例中的三個範例中,它只會降低針對 活躍對手的安全性,儘管該對手與誠實的雙方都 沒有可靠的通信。 對於第一個範例和最後兩個範例,加密或 MAC 與
[Math Processing Error] $ K_s $ 或者[Math Processing Error] $ K_m $ 分別
將防禦一個對手
[Math Processing Error]$$ can modify a message in transit but will later
be unable to communicate with either $C$ or $S\hspace{.02 in}$ $$執行“弱錯誤綁定”。
(我使用“弱”一詞,因為無論使用什麼協議
,完全控制通信通道的對手 都必須這樣做。)
此外,對於第一個範例,加密不一定會
成功實現該目標,儘管我懷疑它啟發式地應該這樣做。
對於 STSsao,加密簽名將(也)阻止被動竊聽者
能夠證明伺服器執行了密鑰協議。
這些是使用的唯一原因 $ K_s $ 和 $ K_m $ .
如果拒絕使用相關密鑰,那麼顯然也不應該導出該密鑰。