Key-Exchange

只需將密碼用作 PAKE 的第三個“私鑰”

  • November 16, 2019

我正在閱讀 PAKE 協議的開發,從 EKE 和 SPEKE 開始,它們的潛在缺陷以及促使他們選擇協議的原因。我一直想知道,對經典 DH 進行以下(非常簡單的)修改以製作 PAKE 有什麼問題:

讓 Alice 和 Bob 有一個共享的秘密s = hash(password)。Alice 和 Bob 選擇私鑰a, b。從 DH 開始,Alice 和 Bob 計算他們的公鑰為

$ A = g^{as}\mod p $

$ B = g^{bs}\mod p $

在他們交換公鑰後,他們可以計算出他們的共享密鑰為 $ K = g^{abs}\mod p $

這個簡單的方案有什麼問題?我猜它以某種方式允許對s. 我知道s沒有低熵,但我仍然不知道如何。

這是這個方案的問題:假設 $ A $ 是誠實的客戶,並且 $ B $ 是不誠實的伺服器(誰不知道 $ s $ )。然後, $ A $ 嘗試登錄,他選擇 $ a $ 並傳輸

$$ A = g^{as} \bmod p $$

然後, $ B $ 只是選擇一個隨機值 $ b $ , 並傳輸

$$ B = g^b \bmod p $$

然後, $ A $ 將計算一個​​“共享秘密”$$ S = B^a \bmod p $$(這將是 $ g^{abs} \bmod p $ 有 $ B $ 誠實地執行協議,相反,我們有 $ S = g^{ab} \bmod p $ )。然後, $ A $ 發送消息 $ M_S $ 由該共享秘密加密(無論是密鑰確認消息還是初始加密數據交換,都無關緊要)。

$ B $ 沒有進一步的互動 $ A $ .

那麼,這裡是什麼 $ B $ 可以做; 他可以在他的字典中選擇一個條目 $ password’ $ 併計算 $ s’ = hash(password’) $ . 然後他可以計算 $ S’ = A^{s’^{-1}b} \bmod p $ ; 如果他碰巧選擇了正確的密碼,那麼 $ s = s’ $ , 所以 $ S’ = A^{s^{-1}b} = g^{as \cdot s^{-1}b} = g^{ab} = S $ ,因此他可以使用該共享密鑰來驗證消息。

如果他沒有碰巧選擇正確的密碼,他可以返回並在他的字典中選擇另一個條目,並重複離線計算,直到找到正確的條目。

底線:使用您的協議,主動攻擊者可以通過單次交換進行完整的字典搜尋。

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