雙重加密方案的攻擊
在此協議中:
- A → B : { <$$ A, {K}pk(B) $$> }pk(B)
- B → A : { <$$ B, {K}pk(A) $$> }pk(A)
我想確定為什麼這是不安全的。如果 A 和 B 都是誠實的代理,攻擊者如何學習密鑰 K?
這就是我開始的:
- A → B : { <$$ A, {K}pk(B) $$> }pk(B)
攻擊者 M 可以截獲它,但是 M 不能解密它。M 將其發送給 B,因此 B 認為消息來自 M:
- M → B : { <$$ A, {K}pk(B) $$> }pk(B)
然後我遇到了A的身份仍然在消息中的問題。當 B 解密時,他會意識到 D 和 A 不匹配,並結束會話。
任何幫助、提示或建議將不勝感激!謝謝!
編輯:我認為我所做的不僅僅是提供一個提示,所以如果這是一個問題,請不要進一步閱讀。
這個問題與 NSL 協議非常相似,因為它允許中間人,因為雙方都沒有聲明自己的身份:
那是:
A -> E : { <[A, {K}pk(E)]> }pk(E) }
E -> B : { <[A, {K}pk(B)]> }pk(B) }
B -> E : { <[B, {K}pk(A)]> }pk(A) }
E -> A the above
導致:
現在 B 認為它與 A 有一個共享通道,但涉及到 E。您甚至可以完全簡化和省略 A,因為它的存在從未向 B 方證明:
或者:
E -> B : { <[A, {K}pk(B)]> }pk(B) }
B -> anyone : { <[B, {K}pk(A)]>}pk(A) }
和
現在’B’大概相信關鍵 $ K $ 與聚會共享 $ A $ 實際上聚會時 $ E $ 持有副本。
我將就我認為該協議如何被破壞寫一個很好的答案。
閱讀另一個提示,並在繼續下一個之前考慮每個提示一段時間。它們的用處增加了。
提示1:
攻擊者不僅可以觀察數據包,還可以丟棄或替換它們。
提示2:
攻擊不涉及來自攻擊方的解密。
提示 3:
攻擊假設一個中間人場景。
提示4:
通過密鑰確認可以防止攻擊。
提示 5:
攻擊者通過提供密鑰來學習密鑰。
攻擊:
A 啟動與 B 一起執行的標準協議。M 是中間人並丟棄 A 的初始數據包。M 制定數據包 $ M\rightarrow B: { <[A, {K_M}pk(B)]> }pk(B) $ 與 $ K_M $ 他的選擇。B 照常繼續協議並將標準消息發送給 A,除了 $ K $ 被替換為 $ K_M $ 正如他所想,這就是A發送的。現在 M 知道雙方之間的共享密鑰 ( $ K_M $ )。這種攻擊只適用於手頭給出的協議。If A 檢查是否 $ K=K_M $ 他可以發現發生了攻擊並可以警告 B,但如果 A 只是使用在第二條消息中收到的密鑰,則攻擊會起作用。