私は読んでいます Bulletproof SSL and TLS
Diffie Hellmanは鍵交換メカニズムであり、サーバーとクライアントのそれぞれが秘密を共有します。バツ そしてgy ここで、gはあるグループのジェネレーターです。彼らは秘密のS =(gy)バツ と(gバツ)y それぞれ。途中の攻撃者はgからSの値を取得できないことに注意してくださいバツ そしてgy、離散対数は難しい問題です。しかし、アクティブな攻撃者はサーバーとクライアントの両方を偽装してだますことができます。
RSA_DHでは、サーバーがクライアントに送信する値、つまりgバツ 修正され、証明書に保存されます。したがって、「ServerKeyExchange」メッセージは送信されません。今、クライアントはそのgを送信しますy 「ClientKeyExchange」メッセージの値。これは、証明書サーバーが「Certificate」メッセージですでに送信したRSA公開鍵暗号アルゴリズムで暗号化されます。
RSA_DHEでは、サーバーがgを送信する場所で「ServerKeyExchange」メッセージが発生しますバツ クライアントに。
今私の質問は、2つの違いは何ですか?プレマスターシークレットは値(gバツ)y、したがって、RSA_DHでも、クライアントが異なるgを送信した場合y 各セッションの値、次に(gバツ)y 値は異なります。 (彼がまだ私の主張が成り立たない場合でも、私は思う)したがって、RSA_DHEの場合と同様に、前方秘密を実現します。そして、貧しい攻撃者は、gの値を取得した後でも、プリマスターシークレットを取得できません。y サーバーの秘密鍵を危険にさらすことによって。したがって、どちらの場合も、プレマスターシークレットを計算することはできません。では、なぜEphemeralの1つ(RSA_DHE)が前方秘密を達成し、他の1つは達成しないと言われているのですか?
Diffie-Hellmanは、公開鍵と秘密鍵を持つ非対称アルゴリズムです。
「DH_RSA」暗号スイートでは、サーバーの「永続的な」鍵ペアはDH鍵ペアです。公開鍵はサーバーの証明書にあります。その証明書は、他の証明書と同様に、CAによって署名されており、そのCAはRSA鍵ペアを使用します(これが「DH_RSA」で「RSA」が意味するものです)。
「DHE_RSA」暗号スイートでは、サーバーの永続キーペアのタイプはRSAです。 RSA公開鍵はサーバーの証明書に含まれています(暗号スイートは、発行CAが使用する鍵のタイプについては何も述べていませんが、通常はRSAでもあります)。クライアントが接続すると、サーバーは一時的なDH鍵ペアを生成し、公開鍵をServerKeyExchange
メッセージとしてクライアントに送信します。サーバーsigns永続的なRSA秘密鍵を含むメッセージ。
Forward secrecyは、サーバーシークレットの盗難に対して相対的に定義されるプロパティです。 "DHE_RSA"暗号スイートは、前方機密を提供します理由実際の鍵交換の秘密(DH秘密鍵)は一時的であるため、サーバーによって保存されません-サーバーがその鍵をディスクに保存しない場合、それから、それは後部の盗難に対して免疫であるべきです。逆に、「DH_RSA」は、DH秘密鍵がサーバーのハードディスクのどこかに格納されていることを意味し、その鍵が盗まれた場合、過去に記録されたセッションを復号化できます。
一部のサーバーは、通常はRAM内にDHキーペアをしばらく保持します。クライアントごとに新しいDHキーペアを作成することはありません。この動作にはパフォーマンス上の利点がありますが、定義上、前方秘密性はわずかに弱まります。これは、「過失窃盗」を定義するために使用するモデルに本当に依存します。つまり、ごみ箱にある古いハードディスクの取得、またはRAMの内容を検査するマルウェア)について話しているのですか。
しかし、単純なRSA_DHが前方機密をサポートしない理由を理解できませんでした。
アリスがクライアントでボブがサーバーで、ダイアグラムの変数名を使用するとします。
非重点では、dh bは証明書の一部です。つまり、Bは長期的な秘密です。イブはaの値を含むセッションを記録します。
しばらくして、イブはBを手に入れました。おそらく彼女はサーバーをハッキングしました。おそらく彼女は法執行機関の友達に電話をかけて、サーバー管理者にそれを引き渡すよう強要しました。その後、イブはB したがって、セッションシークレットを計算し、セッションを復号化します。
Emprealでは、dh Bは短期間の秘密にすぎません。したがって、イブが後でサーバーに侵入したとしても、それが明らかになる可能性ははるかに低くなります。