Key-Exchange

儘管有 MITM,如何使用一些已知的短密碼交換密鑰?

  • January 21, 2021

簡單的場景是一個 WiFi 網路上的兩個設備並排放置。使用者可以將一個短程式碼從一台設備複製到另一台設備作為“密碼”,但此程式碼不能太長。假設它最多為 12 位十進制數字。這些設備將只允許一次嘗試,因此任何 MITM 攻擊者都必須抓住只有萬億分之一的機會才能成功,這也會提醒使用者他(攻擊者)在那裡,這樣對於“足夠”安全我。這就是全部,也就是說,沒有兩個設備都有其公鑰的伺服器。

但這將如何運作?我想到了以下類似的方法,但遇到了問題。如果此密鑰交換方案有標準解決方案,請隨意忽略以下內容:

我認為設備d1可以在上述範圍內創建一個隨機數,並將其用作 Rijndael 加密其公共加密密鑰的密鑰,但不需要填充,以便所有密文都可以“解密”,這樣 MITM 就不會能夠通過警告錯誤的人是錯誤的來蠻力正確的。然後,第二個設備d2使用該密碼來解密密文(通過 wifi 傳輸)。然後它使用它來加密並發送d1其(d2的)密鑰。這個想法是,MITM 不會知道萬億可能的破譯文本中哪一個是正確的。甚至當他(MITM)看到來自d2的消息時,將無法暴力破解它,因為發送的密文的明文將是隨機的(因為它是未知密鑰對的公鑰)並且將像第一個那樣被加密,沒有填充和因此攻擊者無法看到他們得到的是正確的明文還是錯誤。

不幸的是,這可能不起作用,因為 MITM 可能能夠先發製人地製作一組密鑰(對某個密鑰進行萬億次解密),其中可以從密文中檢測到所使用的密鑰,並將該密鑰發送到d2,然後發現“密碼" 來自d2的回應。這可以做到嗎?

此外,不推出我自己的加密方案的通正常則。

那麼,有沒有一種安全的方式來交換密鑰,儘管有 MITM,使用一些已知的短密碼?(最好使用前向保密,這樣暴力破解,如果需要一個月的時間,不會讓攻擊者有能力從那時起開始冒充其中一個設備。)

我認為設備 d1 可以在上述範圍內創建一個隨機數,並將其用作 Rijndael 加密其公共加密密鑰的密鑰,但不需要填充,以便所有密文都可以“解密”,這樣 MITM 就不會能夠通過警告錯誤的人是錯誤的來蠻力正確的。

依賴於公鑰與隨機密鑰的不可區分性是一種非常不尋常的安全屬性,需要仔細考慮所涉及的方案才能不被違反。

幸運的是,還有另一種選擇。您可以使用平衡的PAKE,其中一個設備生成密碼,使用者將其傳輸到另一個設備 - 這就是問題試圖建構的內容。或者考慮到這些“密碼”實際上沒有充分的理由預先選擇,我們可以使用基於短身份驗證字元串的密鑰交換。Sylvain Pasini 的博士論文 (PDF)是一個很好的資源。特別是它在圖 10.5 中提供了一個預先實例化的認證密鑰交換:

  • **參數:**一個安全的散列函式 $ h $ 像SHA3-256SHA-256,一個Diffie-Hellman 組 $ \mathbb G $ 帶發電機 $ g $ ,例如x25519或 secp256r1 或 secp256k1,以及一個承諾方案,例如Pedersen Commitments,一個函式 $ f $ 將 256 位字元串映射到人類可讀和可驗證(縮短?)表示,同時保留盡可能多的熵,例如通過將輸入解釋為 256 位整數並執行模組化歸約 $ \bmod 10^{12} $ .
  • Alice 選擇了一個私人 DH 密鑰 $ x_A $ 併計算 $ y_A\gets g^{x_A} $ - DH 公鑰。然後 Alice 還選擇了一個 256 位的均勻隨機位串 $ K $ 並承諾兩者 $ y_A $ 和 $ K $ . 最後,Alice 將承諾和公鑰發送給 Bob。
  • Bob 還選擇了一個私人 DH 密鑰 $ x_B $ 併計算 $ y_B\gets g^{x_B} $ 並且還隨機均勻地選取一個 256 位的字元串,稱為 $ R $ . 鮑勃傳輸 $ y_B $ 和 $ R $ .
  • 然後,Alice 將承諾的開啟發送給 Bob。Alice 顯示短身份驗證字元串 (SAS) $ f(R\oplus h(y_B,K)) $ .
  • 鮑勃現在學會了 $ K $ 並確認承諾是 $ K $ 和 $ y_A $ ,如果不是他流產。Bob 展示了 SAS $ f(R\oplus h(y_B,K)) $ .
  • 使用者確認兩個顯示的 SAS 字元串匹配(在兩個設備上)。如果設備沒有收到確認,或者如果使用者向設備指示不同的 SAS,它就會中止。
  • 愛麗絲輸出 $ y_B^{x_A} $ 作為共享秘密。
  • 鮑勃輸出 $ y_A^{x_B} $ 作為共享秘密。

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