web-dev-qa-db-ja.com

なぜ鍵交換が必要なのですか?

「アリス」と「ボブ」が安全でないネットワークを介して互いに通信したいとしましょう。

Diffie–Hellman鍵交換を使用すると、最終的に同じ対称鍵を取得できます。ただし、私が理解しているように、キー交換なしで非対称キーを使用できるため、同じ対称キーを取得する必要はありません。

RSAアルゴリズムを使用すると、アリスとボブは自分の公開鍵(public_apublic_b)を共有し、秘密鍵(private_aprivate_b)。アリスはpublic_bで暗号化されたメッセージをボブに送信することができ、ボブはprivate_bでそれを復号化できます。安全でないネットワークでも通信できますDiffie–Hellman鍵交換なしで

私は自分が間違っている可能性があることはわかっていますが、どこが間違っていたかはわかりません。 Diffie–Hellman鍵交換(または任意の鍵交換)が必要な理由と時期について誰かが考えていますか?上記の状況に適していますか?

48
Firegun

攻撃者がデータを受動的にキャプチャでき、後で証明書の秘密キーにアクセスできる場合(つまり、盗み、ハートブリード攻撃または法執行機関)、暗号化キーが証明書からのみ派生している場合、攻撃者は以前にキャプチャしたすべてのデータをデコードできます。自体。

DHキー交換により、証明書から独立したキーを作成できます。この方法では、証明書の知識だけでは、以前にキャプチャされたデータをデコードするのに十分ではありません。これは前方秘密と呼ばれます。詳細は Wikipedia を参照してください。

DHを使用して機密性を向上させることとは別に、RSA秘密鍵を単に使用する代わりに対称暗号を使用する他の理由があります。したがって、鍵交換にDHを使用しない場合でも、TLSは対称鍵を作成し、それが証明書から派生します。秘密鍵を直接使用して暗号化することが望ましくない理由の詳細については、 PGPが対称暗号化とRSAを使用する理由 を参照してください。

56
Steffen Ullrich

理由を理解するために必要な多くの手順があり、私はそれぞれを案内するように努めます。

1)暗号化を正しく使用してください...

RSAアルゴリズムを使用すると、アリスとボブは自分の公開鍵(public_a、public_b)を共有し、自分の秘密鍵(private_a、private_b)を保持できます。アリスはボブにprivate_aで暗号化されたメッセージを送信するだけでよく、ボブはpublic_aでそれを復号化できます。 Diffie–Hellmanの鍵交換がまったくなくても、安全でないネットワークを介して通信できます。

その部分は明らかに間違っています。この部分で行っているのは、暗号化ではなく署名です。 public_key_aは公開されているため、メッセージは暗号化されません。これを行う代わりに、Aはpublic_key_bでメッセージを暗号化し、Bはprivate_key_bでメッセージを復号化できます。 private_key_bはBだけが知っているので、AはBだけがそれを復号化できることを知っています。

デジタル署名は、メッセージが特定の人からのものであることを証明します。暗号化は、あなた、鍵の所有者、およびメッセージを暗号化した人、メッセージ送信者だけがメッセージを知っていることを証明します。非対称暗号化を使用する場合は、暗号化と署名の両方が必要です。メッセージと署名の機密性を保護するための暗号化により、このメッセージを送信したのがあなたであることを証明します。

しかし、それだけではありません...たとえば、リプレイ攻撃から保護する必要があります。

2)通常、Bobには公開鍵がありません

Alice(A)がサーバーで、Bob(B)がクライアントであるとします。通常、クライアントには公開鍵がありません。たとえば、公開鍵を知っていますか?答えはおそらくNOです。したがって、ボブはアリスからメッセージを受信し、それらが本当にアリスから来たものであることを確認できますが、アリスはボブから受け取ったものが本当にボブから来たものであるかどうかを確認できません。

この問題は、Diffie-Hellmanのようなキー交換プロトコルを追加した根本的な原因の1つです。

3)RSAは1ブロックに制限されています。

暗号ブロックチェーン と呼ばれる長いメッセージを暗号化するために使用される手法があります。悲しいことに、この手法はRSAでは使用できません。それが完全に不可能であるということではなく、それが本当に安全かどうか誰も知らないということです。したがって、RSA暗号化を1つのブロックに制限します。一方、AESのような対称暗号化アルゴリズムは、ブロックチェーンを備えた魅力のように機能し、それを使用する理由です。

さらに読む: https://crypto.stackexchange.com/a/126/16369

4)Diffie-Hellmanはキー交換プロトコルです

Diffie-Hellmanは、対称暗号化に使用できるキーを「作成および共有」するための単なる方法です。 Diffie-Hellmanの強みは、この鍵を作成するためのすべての会話がプレーンテキストで行われる可能性があり、鍵は依然として秘密であることです。

:Diffie-HellmanはMitM攻撃の問題を解決しません。相互に通信する当事者を認証できないためです。この問題は、代わりに デジタル署名 で解決されます。

5)エフェメラルDiffie-Hellmanは、Perfect Forward Secrecyを提供します

Ephemeral Diffie-Hellmanは、セッションごとに新しいDiffie-Hellman鍵ペアを生成していて、それらを保存しないことを意味する、単なる派手な名前です。それらを保存することはないため、攻撃者がそれらを取得することはできません。

詳細については、この非常に良い答えを参照してください: https://security.stackexchange.com/a/38142/50051

6)Ephemeral Diffie-Hellmanはリプレイ攻撃からあなたを守ります

Ephemeral Diffie-Hellmanを使用することの非常に良い副作用は、リプレイ攻撃からも保護することです。サーバーとクライアントはセッションごとに新しいランダムな秘密DHキーを選択しているため、別のセッションからメッセージを再生してサーバーまたはクライアントを偽装することはできません。

結論

これはTLSの動作の非常に簡単な概要であり、安全な接続を提供するにはこれらすべてのパーツが必要です。対称暗号化を使用しないと、長いメッセージを暗号化できず、非対称暗号化を使用しないと、暗号化キーを共有して完全な転送秘密を提供できません。

17
Gudradain

あなたは、アリスとボブが安全でないネットワークを介して公開鍵を確実に交換できると想定しています。

鍵交換プロトコルがなければ、アリスとボブthinkこれが起こっています:(A =アリスの公開鍵、B =ボブの公開鍵)

Alice  ---------- A --------------> Bob


Alice  <----------- B ------------- Bob

これが本当にの場合(M =マロリーの公開鍵)

Alice  ----- A ------> Mallory --------- M ------> Bob

Alice  <---- M ------- Mallory <-------- B ------- Bob

ボブとアリスは、お互いにメッセージを暗号化していると思っています。実際には、意図した受信者を使用してメッセージを復号化、読み取り、再暗号化するマロリーのメッセージを暗号化するだけです。

2
chepner

アルゴリズムは計算コストが高いため、すべてのメッセージにRSAを使用することは望ましくありません。 RSAを使用して対称キーをネゴシエートすると、CPU使用率が高い場合に、より安価にさらにメッセージを送信できます。

1
Lexelby