Hash

Diffie-Hellmann-key-exchanged 通道上的這種身份驗證是否有效?

  • December 16, 2016

在我問我的問題之前,讓我說我不知道 OTR 背後的數學,所以我不知道 OTR 中的身份驗證過程是否與此類似。


  • Alice 和 Bob 使用 Diffie-Hellman 密鑰交換交換了密鑰
  • 有一個中間人——夏娃。
  • 這是加密“電路”:Alice -- e_alice -- Eve -- e_bob -- Bob
  • Alice 和 Bob 都使用e來表示他們使用的加密密鑰。
  • 因此,在沒有 MitM 的情況下,e_alice==e_bob
  • Alice 想驗證沒有中間人,所以使用驗證問題(和答案)(如 XMPP 中的 OTR):

問:Do you have a cat?

A:Yes

注意:顯然對 . 使用強值A。不要問貓的存在,而是貓的名字(理想情況下,如果它是包含數字和特殊字元的唯一名稱):P

  • Alice 發送 Q 給 Bob
  • 鮑勃發送hash(e_bob+A). hash是任何安全的散列算法,e_bob是 Bob 使用的加密密鑰,並且A是答案,在這種情況下是鹽。
  • 愛麗絲比較received == hash(e_alice+A)。如果這是真的,那麼就沒有 MitM。

在這種情況下:

  • 零知識證明的雜湊算法
  • 加密密鑰是預先共享的(由密鑰交換)秘密
  • 答案被用作鹽(同時是另一個預先共享的秘密),所以 Eve 無法想:“哦,看,這是一個 sha1 雜湊。讓我們嘗試破解它。哦,看,這是我們的加密密鑰——這是一個不——去”
  • 可能添加額外的 en編碼,如 base64,以最大限度地減少散列內容出現在單詞列表中的機會。( hash(base64(e_bob+A)))

問題:是否有任何嚴重的漏洞,或者這是否適用於不安全的加密通道的身份驗證?

在目前的問題中,沒有什麼能阻止 Eve 轉發給 Bob,通過測試從 Bob 獲得的 A的好壞Do you have a cat?來得到答案 A = ,然後發送給 Alice 並破壞協議。Yes``Yes``No``hash(e_bob+A)``hash(e_alice+A)

在現已消失的評論中,補充說我們

應該對 A 使用“強值”;只發送 Q,從不發送純 A。

請注意,為了讓 Alice 執行檢查,Alice 必須事先知道 A。如果 Alice 和 Bob 知道這種“強值”(或者甚至是按照描述的方式使用它的約定),但 Eve 不知道,那麼該技術就有效。

如果只有 Eve 不知道“強值”,它就充當 ad-hoc 協議中的密鑰(對於一些學術我們希望使用這個“強值”作為消息 HMAC 的密鑰e

如果 Eve 不知道這個約定,那就不是現代意義上的Kerckhoffs 第二原理的密碼學;這很脆弱,不能一概而論。

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