Hash
Diffie-Hellmann-key-exchanged 通道上的這種身份驗證是否有效?
在我問我的問題之前,讓我說我不知道 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 第二原理的密碼學;這很脆弱,不能一概而論。