web-dev-qa-db-ja.com

Diffie-HellmanとそのTLS / SSLの使用

TLSでのDiffie-Hellman(DH)の(非)使用を理解するのに苦労しています。

  • DHは長い間使用されてきましたが、なぜほとんど誰もそれを使用しないのですか?
  • DHは「鍵の共有」にのみ使用されていますが、なぜDHシークレットを使用してすべてを暗号化しないのですか?すでにDHシークレットがあるときに、さらに別のシークレットを転送するのに十分な対称キーが必要なのはなぜですか。これはSSHにも適用されます(そうではありませんか?)。簡単な答えはあると思いますが、見つかりませんでした。
35
David Halter

Diffie-Hellman is SSL/TLSで「エフェメラルDiffie-Hellman」(名前に「DHE」が含まれる暗号スイート。 標準 を参照)として使用されます。非常にまれに発生するのは「静的Diffie-Hellman」(名前に「DH」が含まれるが、「DHE」も「DH_anon」も含まれない暗号スイート)です。これらの暗号スイートでは、サーバーがcertificateを所有している必要があります= DH公開鍵が含まれています。これは、さまざまな歴史的および経済的理由でサポートされることはめったにありません。その中で主なものは、RSAの無料標準( PKCS#1 )の可用性です。 Diffie-Hellmanの対応する標準( x9.42 )は100ドルかかります。これは多くはありませんが、ほとんどのアマチュア開発者を抑止するには十分です。

Diffie-Hellmanは 鍵合意プロトコル です。つまり、2つのパーティ(たとえば、SSLクライアントとSSLサーバー)がこのプロトコルを実行すると、最終的に共有シークレット[〜# 〜] k [〜#〜]。ただし、クライアントもサーバーもchoose[〜#〜] k [〜#〜]の値を取得しません。それらの観点から見ると、[〜#〜] k [〜#〜]はランダムに生成されたように見えます。それはsecret(彼らだけが知っている[〜#〜] k [〜#〜]であり、回線上の盗聴者は知らない)およびshared(どちらも同じ値[〜#〜] k [〜#〜])を取得しますが、-chosenは取得しません。これは暗号化ではありません。共有シークレット[〜#〜] k [〜#〜]は、対称暗号化アルゴリズムでテラバイトのデータを処理するには十分です(同じ[〜#〜] k [ 〜#〜]片側で暗号化し、反対側で復号化します)、そしてそれがSSLで起こります。

ただし、RSAと呼ばれるよく知られた非対称暗号化アルゴリズムがあります。 RSAを使用すると、送信者はメッセージを暗号化できます[〜#〜] m [〜#〜]受信者の公開鍵を使用し、受信者はそれを復号化して復元できます[〜#〜] m [〜#〜]彼の秘密鍵を使用。今回は、送信者can[〜#〜] m [〜#〜]の内容を選択します。

だからあなたの質問は次のようになるかもしれません:RSAの世界で、なぜ私たちはAESに悩むのでしょうか?答えは次の点にあります。

  • [〜#〜] m [〜#〜]には制約があります。受信者の公開鍵のサイズがn(2048ビットのRSA鍵の場合はバイト単位でn = 256など)の場合、最大サイズは[〜 #〜] m [〜#〜]n-11バイトです。より長いメッセージを暗号化するには、メッセージを十分に小さなブロックに分割し、いくつかの再構成メカニズムを含める必要があります。 安全にする方法を誰も本当に知りません。単一のメッセージに対するRSAは安全であると私たちが信じるに足る正当な理由がありますが、微妙な弱点がどのような分割および再構成システムにも潜んでいる可能性があり、私たちはそれに不快です。 対称暗号 の場合はすでに問題が多く、数学的な状況はより単純です。

  • 分割・組立は対応できても、サイズは大きくなります。 2048ビットのRSA鍵では、内部メッセージチャンクのサイズは最大で245バイトですが、暗号化すると256バイトのシーケンスになります。これは私たちの生活エネルギー、つまりネットワーク帯域幅を浪費します。対称暗号化は限られたオーバーヘッドしか発生しません(まあ、SSLはデータサイズに比例してわずかなオーバーヘッドを追加しますが、RSAのみのプロトコルで発生するオーバーヘッドよりもはるかに小さいです)。

  • AESと比較して、RSAは地獄のように遅いです、

  • RSAの代わりにDHのような鍵合意プロトコルを使用するオプションが本当に欲しいです。昔(2001年より前)、RSAは特許を取得しましたが、DHは特許を取得していなかったため、米国政府はDHを推奨していました。今日では、アルゴリズムが壊れた場合にアルゴリズムを切り替えられるようにしたいと考えています。鍵合意プロトコルをサポートするために、対称暗号化が必要なので、RSAで使用することもできます。実装とプロトコル分析を簡素化します。

SSLがどのように機能するかの詳細な説明については この回答 を参照してください。

48
Thomas Pornin

私は Security Now ep。412 "SSL&Perfect Forward Secrecy" があなたの望むものを持っていると思います。

これらのポッドキャストには、要点に達する前に多くのニュースやその他のものが含まれているので、多分あなたは「-Diffie」の その筆記録を読む を検索するだけです。

引用:

しかし、今日の多くのブラウザー、そして今日の多くのサーバーは、DHEと呼ばれるDiffie-Hellman Ephemeralをサポートしています。エフェメラルとは、特に「今のところ」を意味します。つまり、これはDHEであり、Diffie-Hellman Ephemeralは、サーバーの認証から切り離された技術であり、これが「切り離された」鍵です。また、Diffie-Hellmanについて述べたように、インターチェンジを監視しているサードパーティには知識がありません。これは、SSL接続で長期アーカイブから保護するためのものです。サーバーの秘密鍵の長期アーカイブとその後の暴露は、Diffie-Hellman一時保護を解読するのに誰にも助けを与えません。

彼らは具体的になぜそれがまだ完全に使用されていないのかについて述べています:

しかしマイクロソフトは、暗号であるRC4も備えているDiffie-Hellman Ephemeralを提供していません[...]。残念ながら、これらはすべてCBC、暗号ブロックチェーンです。そして、それがBEAST攻撃に対して脆弱な暗号化プロトコルです。

ここでは、epで説明した SSLLabs テストを参照しています。 395(および396)。

4
user13695