ブラウザは、SSLハンドシェイク中にどのように対称キーを生成しますか

StackOverflow https://stackoverflow.com/questions/3936071

  •  30-09-2019
  •  | 
  •  

質問

典型的なHTTPS Webシナリオで、ブラウザとサーバーの間のSSLハンドシェイクについて少し混乱しています。

私がこれまでに理解してきたのは、SSLハンドシェイクの過程で、クライアント(この場合のブラウザ)が、ランダムに選択された対称キーを公開キー(サーバーから受け取った証明書)で暗号化することです。これはサーバーに送り返され、サーバーは秘密鍵でそれを復号化します(対称キー)。この対称キーは、セッションの残りの期間中に、両端でメッセージを暗号化/解読するために使用されます。そうする主な理由の1つは、対称キーを使用したより速い暗号化として与えられることです。

質問

1)ブラウザは、この「ランダムに」選択した対称キーをどのように選択および生成しますか?

2)開発者(または/およびブラウザーユーザー)は、対称キーを生成するこのメカニズムを制御していますか?

役に立ちましたか?

解決

ここ HTTPS接続の確立がどのように機能するかについての非常に良い説明です。セッションキーが両当事者(クライアントとサーバー)によって取得される方法を要約します。このプロセスは「キー契約プロトコル」として知られています。

  1. クライアントは、48バイトの「Pre-Master Secret」ランダム値を生成します。
  2. クライアントは、これらのバイトをランダムデータでパッドして、入力を128バイトに等しくします。
  3. クライアントは、サーバーの公開キーでそれを暗号化し、サーバーに送信します。
  4. 次に、マスターキーは両当事者によって次の方法で作成されます。

    master_secret = PRF(
       pre_master_secret, 
       "master secret", 
       ClientHello.random + ServerHello.random
    )
    

PRFは、仕様でも定義されており、非常に賢い「擬似ランダム機能」です。秘密、ASCIIラベル、およびMD5とSHA-1ハッシュ関数の両方のキー付きHASHメッセージ認証コード(HMAC)バージョンを使用して提供するシードデータを組み合わせます。入力の半分は各ハッシュ関数に送信されます。 MD5とSHA-1の弱点に直面しても、攻撃に対して非常に耐性があるため、賢いです。このプロセスは、それ自体にフィードバックし、必要な数のバイトを生成するために永遠に繰り返します。

この手順に従って、48バイトの「マスターシークレット」を取得します。

他のヒント

ネットワークビデオのこの素晴らしいビデオから引用して、 分1:18:07

コンピューターは決定論的なデバイスであるため、コンピューターのランダム性はどこにありますか?

マウスストロークの動き、キーストロークの動き、ハードディスクのタイミングなどのエントロピーを収集します。宇宙からのランダムさをすべてプルに収集して、ランダムキーを生成できるようにしようとします。 1つの接続[このセッション. 。そして、そのランダム性が壊れており、過去30年間に何度も起こった場合、これはどれも機能しません。敵があなたのランダム性が何であるかを理解できる場合、彼らはあなたの鍵を推測することができます。したがって、ランダムさを適切に使用してください。

注:キーが作成されます セッションごと.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top