セッションキーとは?|セッションキーとTLSハンドシェイク

SSL / TLSプロトコルは、公開キーと対称暗号化の両方を使用し、対称暗号化用の新しいキーを各通信セッションに対して生成する必要があります。このようなキーは「セッションキー」と呼ばれます。

Share facebook icon linkedin icon twitter icon email icon

セッションキー

学習目的

この記事を読み終えると、以下のことができます。

  • セッションとは何か、キーとは何か、そして新しいセッションキーをいつ作成する必要があるかを学ぶ
  • 非対称暗号化と対称暗号化の違いを理解する
  • SSL/TLS暗号化プロトコルが両方の種類の暗号化を使用する方法を学ぶ
  • SSL/TLSの対称暗号化に使用される4種類のセッションキーを学ぶ

セッションキーとは?

セッションキーは、任意の暗号化鍵であり、対称暗号化のために、1通信セッションのためだけに利用されます。言い換えれば、1度だけ、特定の持続時間中に、データを暗号化および復号化するために使用される一時的なキーです。両者間のその後の会話は、異なるセッションキーで暗号化されます。セッションキーは、ログインのたびにリセットするパスワードのようなものです。

SSL/TLSでは、通信当事者両(クライアントとサーバー)が、任意の通信セッションの開始時、TLSハンドシェイク中に、4つのセッションキーを生成します。公式のTLSのRFCは、実際にこれらの「セッションキー」を呼び出しませんが、機能的にはまさにそのためのものです。

セッションとは?

セッションは基本的に会話です。セッションはネットワークを介して行われ、2つのデバイスが相互に確認応答して仮想接続を開くと開始されます。2つのデバイスが互いに相手から必要な情報を取得し、「完了」メッセージを送信して接続を終了するときに終了されます。お互いにテキストメッセージを送りあう2人が、「またね」といって会話を終了するのと同様です。接続は、非アクティブのためにタイムアウトすることもあります。これは2人の人がテキストメッセージを送信しあっていて、互いに返事を送らなくなる場合と同様です。

セッションは、一定の期間であることも、両者が通信している限り継続することもあります。前者の場合、セッションは一定時間後に失効します。TLS暗号化のコンテキストでは、2つのデバイスは情報を交換し、新しいセッションキーを生成して接続を再開する必要があります。

暗号鍵とは?

暗号化では、キーはメッセージを変更して暗号化するために、つまりデータがランダム化またはスクランブルされた状態するために使用されるデータ列です。キーは、データの復号化、またはスクランブル状態から元の形式への変換にも使用されます。(詳細については、 暗号化キーとは?を参照してください。)

対称暗号化とは?非対称暗号化とは?

対称暗号化では、会話の両側、暗号化と復号化の両方でまったく同じキーが使用されます。対称暗号化を使用するセッションでは、複数のキーを使用できますが、1つのキーで暗号化されたメッセージは同じキーで復号化されます。

非対称暗号化には2つのキーがあり、1つのキーで暗号化されたデータは、もう1つのキーでのみ復号化できます。これは、対象暗号化では同じキーが暗号化と復号化の両方に使われるのと異なります。これは、いずれかのキーが公に共有されることから公開鍵暗号としても知られています。

HTTPSは対称暗号化を使用しますか、それとも非対称暗号化を使用しますか?

HTTPSは、TLS暗号化プロトコルを使用するHTTPであり、両方の種類の暗号化を使用します。TLSを介したすべての通信は、TLSハンドシェイクで始まります。このTLSハンドシェイクを機能させるためには非対称暗号化が不可欠です。

TLSハンドシェイクの過程で、2つの通信デバイスは4つのセッションキーを確立し、これらは以降のセッションで対称暗号化に使用されます。通常、2つの通信デバイスは、クライアント、またはラップトップやスマートフォンなどのユーザーデバイスと、WebサイトをホストするWebサーバーであるサーバーです。(詳細については、「クライアントサーバーモデルとは?」を参照してください)

TLSハンドシェイクの仕組みは?

TLSハンドシェイク中に、クライアントとサーバーの両方が互いにランダムデータを送信します。これらのデータを使用して、別々に計算を行い、同じセッションキーを取得します。3種類のランダムに生成されたデータが一方から他方に送信されます:

  • 「クライアントランダム」:これは、クライアントがサーバーに送信するランダムなバイト列です。
  • 「サーバーランダム」:これはクライアントランダムと似ていますが、サーバーがクライアントに送信する点が異なります。
  • 「プリマスタシークレット」:これはさらに別のデータ列です。TLSハンドシェイクの一部のバージョンでは、クライアントがこれを生成し、公開鍵で暗号化されたサーバーに送信します。他のバージョンでは、クライアントとサーバーは、プリマスターシークレットをそれぞれ生成しますが、合意されたアルゴリズムパラメーターを使用して同じ結果を得ます。

TLSハンドシェイクは、非対称暗号化を使用して、サーバーランダムを攻撃者から隠す(プライベートキーで暗号化することにより)、またはサーバーが自分のメッセージの1つにデジタル「署名」させることによって、サーバーが主張している身元が正しいことをクライアントが確認できます(実生活で、署名によって身元を確認するのと同様です)。サーバーはプライベートキーで一部のデータを暗号化し、クライアントは公開鍵を使用して復号化し、サーバーが正しいキーを持っていて、正当であることを証明します。

TLSハンドシェイクの「マスターシークレット」とは?

マスターシークレットは、クライアントランダム、サーバーランダム、およびプリマスターシークレットをアルゴリズムを介して組み合わせた最終結果です。クライアントとサーバーにはそれぞれ3つのメッセージがあるため、マスターシークレットの結果は同じになるはずです。

クライアントとサーバーは、マスターシークレットを使用して、そのセッションでのみ使用する複数のセッションキー(正確には4つのセッションキー)を計算します。

TLSハンドシェイクでマスターシークレットから生成される4つのセッションキーとは?

各TLSハンドシェイクで作成される4種類のセッションキーは次のとおりです。

  • 「クライアント書き込みキー」
  • 「サーバー書き込みキー」
  • 「クライアント書き込みMACキー」
  • 「サーバー書き込みMACキー」

クライアント書き込みキーは、クライアントがメッセージの暗号化に使用するキーです。クライアント書き込みキーは対称キーであり、クライアントとサーバーの両方がそれを持っています。これにより、サーバーは同じキーを使用してクライアントからのメッセージを復号化できます。

サーバー書き込みキーは、クライアント書き込みキーと全く同じもので、サーバー側のものでます。要約すると、クライアントからサーバーへのメッセージはクライアント書き込みキーで暗号化され、サーバーはクライアント書き込みキーを使用してこれを復号化します。サーバーからクライアントへのメッセージはサーバー書き込みキーで暗号化され、クライアントはサーバー書き込みキーを使用してメッセージを復号化します。(このプロセス全体は、クライアントデバイスまたはブラウザによって処理されます。ユーザー自身がこの暗号化または復号化を行う必要はありません。)

MAC(メッセージ認証コード)キーは、メッセージのデジタル署名に使用されます。サーバーは、サーバー書き込みMACキーでメッセージに署名し、クライアントがメッセージを受信すると、使用されているMACキーを、自分が所持するサーバーMACキーのレコードと照合して、正当であることを確認できます。クライアントは、クライアント書き込みMACキーでメッセージに署名します。

新しい通信セッションと新しいTLSハンドシェイクごとに、4つの完全に新しいセッションキーのセットが作成されます。異なるクライアント書き込みキー、サーバー書き込みキーなどがありますが、これらの4種類のキーは毎回作成されます。