セッション鍵とは?セッション鍵とTLSハンドシェイク

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

学習目的

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

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

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

セッションキーとは?

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

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

セッションとは?

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

セッション鍵 - それぞれに新しい鍵を使用する3つのセッション

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

暗号鍵とは?

暗号技術では、暗号化アルゴリズムの特別な入力を指すために、(通常は短いデータ)について話すことが一般的です。最も一般的な鍵はデータの暗号化に使われるものですが、目的に応じて他の種類の鍵も存在します。

データ暗号化アルゴリズムでは、(秘密)鍵を用いてメッセージを暗号文に変換します。つまり、スクランブルされた読めないバージョンのメッセージです。復号化鍵を使うと、暗号文から元のメッセージを復元することができます。

対称型暗号化アルゴリズムでは、暗号化鍵と復号化鍵はどちらも同じものです。したがって、秘密鍵を持つ人なら誰でもデータの暗号化・復号化が可能であり、このため対称鍵という言葉がよく使われます。

逆に、 非対称暗号化 アルゴリズム(公開鍵暗号化としても知られている)では、2つの鍵が存在します。1つは公開鍵で、データを暗号化するためにのみ使用でき、残る1つは秘密鍵で、暗号文を復号するためにのみ使用されます。

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

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

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

また、TLSのハンドシェイクでは、クライアントとサーバーは、

  • どの暗号化アルゴリズムを使用するかを交渉します(非対称暗号方式で安全に行います)
  • (非対称暗号を使用して)TLS証明書と照合し、サーバーのIDを認証します。

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

マスターシークレットは、クライアントが送信したランダムなデータ列と、サーバーが送信したランダムなデータ、そして「プリマスターシークレット」と呼ばれる別のデータ列をアルゴリズムで結合した結果です。クライアントとサーバーにはそれぞれ3つのメッセージがあるため、マスターシークレットの結果は同じになるはずです。

クライアントとサーバーは、マスターシークレットを使用して、そのセッションでのみ使用する複数のセッション鍵を計算します。最終的に同じセッション鍵になるはずです。

TLSの仕組みについての詳細はこちら:TLSハンドシェイクで何が起こるのか?