Diffie–Hellman鍵交換プロトコルは中間者攻撃に対して脆弱ですか?はいの場合、それはどのタイプのMITMですか?確かに、それはリプレイ攻撃かリレー攻撃だと思います。
1つのバージョンで脆弱です。より明確にするために、Diffie-Hellmanの3つの基本バージョンは次のとおりです。
匿名DH。アリスとボブは単に互いに符号なしの値を送信します。
修正されたDH(単にDHと呼ばれることもあります)。
エフェメラルDH(下記参照)。
匿名DHは、次のように、MitM攻撃に対して簡単に脆弱です。
アリスは値Xを生成し、ボブはYを生成し、イブはZを生成します。
アリスはg ^ X mod pを送信します。イブはメッセージを傍受し、ボブに送信する前に、g ^ Z(自分のランダム値)mod pで変更します。
署名も他の認証メカニズムもないので、ボブはアリスが彼にg ^ Z mod pを送ったと今考えています。
ボブはg ^ Y mod pを送信します。 Eveはメッセージを傍受し、g ^ Z mod pで変更して、Aliceに送信します。
Aliceは(g ^ Z mod p)^ X mod pを計算するようになりました。
Bobは(g ^ Z mod p)^ Y mod pを計算するようになりました。
Eveは、アリスの秘密である(g ^ X mod p)^ Z mod pと、ボブの秘密である(g ^ Y mod p)^ Z mod pを計算します。
アリスは、「I love you」を(g ^ X mod p)^ Z mod pで暗号化します。
そのキーはEveと合意しているため、Eveはメッセージを復号化し、「I hate you」に変更して、Bobの秘密で再暗号化できます。言い換えると、イブはアリスとボブと異なるキーについて合意したことにより、プロキシとして機能することができます。
これは、Fixed DH(g ^ Xとg ^ Yが信頼できるCAによって署名されている)を使用することで回避できます。
エフェメラルDH(DHE)では、X、Yは毎回、つまり各セッションで変更されます。また、MitMを防ぐために署名されています。ただし、それらは常に変更され、署名は署名されたメッセージで変更されるため、相手は署名の信頼性をどのように確認できますか?
DHEソリューションは単純です。証明書を使用します。アリスが秘密鍵で自分のg ^ Xに署名し、対応する公開鍵が自分に関連付けられていることを証明書を介して証明できる場合、ボブは証明書を検証できます。そうすることで、アリスのIDを検証し、したがって彼女のgの信憑性を検証できます。 ^ X。
したがって、DHEはこのように機能します。
より正式には、証明書はCert_Alice =(Alice、PKAlice)_CAです。これは、証明書がAlice PKAliceの公開鍵を含み、CAによって署名されていることを意味します。
同じことが、同様の証明書を取得するボブによって行われます。
アリスはXを生成し、g ^ X mod pを計算します。
次に、アリスはボブに2つのメッセージを送信します。M1=(g ^ X mod p、PKAlice)_Alice(Aliceによって署名)およびM2 = Cert_Alice。
ボブは、M2が信頼できるCAによって本当に署名されていること(既知のPKCAを使用して、署名されたメッセージが署名と一致するかどうかを確認すること)と、それが本当にアリスに属していることを確認します。
M2が前のテストに合格した場合は、それがアリスによって送信されたことを意味します(誰かがアリスの秘密鍵を盗んだり、証明書がまだ有効である場合を除きます)。この時点で、ボブはM2内にある認定されたPKAliceを使用して、M1の署名を検証します。すべて問題なければ、ボブはg ^ X mod pを保存します。
ボブはYを生成し、g ^ Y mod pを計算します。
次に、ボブは2つのメッセージをアリスに送信します。M3=(g ^ Y mod p、PKBob)_Bob(ボブが署名)とM4 = Cert_Bobです。
アリスはM4の有効性をチェックします(4を参照)。
M4が完全に検証されている場合、アリスはM4内にある認定PKBobを使用してM3の署名を検証します。すべて問題なければ、アリスはg ^ Y mod pを保存します。
アリスとボブは別々に(g ^ Y mod p)^ X mod p ==(g ^ X mod p)^ Y mod pを計算します。
新しいセッションごとに、2から再起動します。
もちろん、DH交換後に署名付きメッセージを使用すると、奇妙なことが起こったことをすぐに検出できますが、匿名DH自体にはMitM攻撃を防ぐものはありません。