ネットワークセキュリティ

インターネットの広がりや進化に伴い、人々の生活はとても便利になりました。一方で、サイバー攻撃による不正アクセス、プライバシー侵害、情報漏洩などが問題になっています。個人・企業問わず、活動にインターネットが欠かせない現在、サイバーセキュリティの知識は必須と言えるでしょう。

この記事では、セキュリティプロトコルのTLSについて紹介します。

TLS(Transport Layer Security)とは

TLS(Transport Layer Security)とは、インターネット通信時のプライバシー保護とセキュリティを目的に設計された暗号化技術です。インターネット技術の標準化を推進する任意団体、IETF(Internet Engineering Task Force)によって1999年にリリースされました。

参考:えるべぐ「Transport Layer Security TLSとは(TLS1.3とTLS1.2の違い)」
参考:Kinsta「TLSとSSLの違い(どちらを使用すべきか)」

TLSとSSLの違い

インターネット通信の暗号化と聞くと「SSL」という単語を思い浮かべる人が多いかもしれません。TLSとSSL(Secure Sockets Layer)は、どちらもインターネット上の通信を保護するためのセキュリティプロトコルです。ふたつの違いについて、TLSとSSLの歴史を踏まえて紹介します。

インターネットが誕生し、利用が主に大学や研究機関に限られていた1990年台初期までは、悪質な利用が懸念されることはほとんどありませんでした。しかし1990年代中頃になり、不特定多数の人がインターネットを利用できる状況になったことで、第三者による覗き見やデータ改ざんなどに注意する必要が出てきました。そして、セキュリティ対応が必要とされ始めたタイミングで、当時ブラウザを制作していたNetscape社がセキュリティプロトコル「SSL 1.0」を開発しました。

「SSL 1.0」はセキュリティホールが理由でリリースはされておらず、その後、1994年に「SSL 2.0」、1995年に「SSL 3.0」の形でリリースされています。

その後、普及し始めるSSLをセキュリティ専門家を交えた第三者機関で扱うため、SSLをNetscape社からIETFへ移管する動きが始まりました。1996年にTLSワーキンググループが結成され、1999年1月には「TLS 1.0」という名称でSSL 3.0を元にしたセキュリティプロトコルがリリースされました。

以上の流れから、TLSはSSLの後継プロトコルと理解するとよいでしょう。名称に関しては、「SSL」という呼び方が定着しているため、「TLS」という新名称に切り替えることなく「TLS/SSL」という表現がされるケースがあります。

出典:さくらインターネット株式会社 さくらのSSL「SSLとTLSの違いとは」

暗号化通信にTLSを使用する理由

インターネット上で通信をおこなう際、暗号化されていないデータ(平文)では、第三者に内容を盗み見られたり改ざんされる恐れがあります。また、個人情報やクレジットカード情報を入力するようなサイトでは、サイト運営者を装ったなりすましによる情報漏洩リスクも存在します。

そこで、データ通信時の暗号化による情報保護とサイト運営元確認のためにTLSが利用されています。

2014年にはGoogle社がユーザ保護の観点でSSL/TLSの有無を検索アルゴリズム要素のひとつにすると発表し、2022年12月現在ではTLSの利用が一般化しています。

サイトがSSL/TLSを採用をしているかどうかは、「https://」で始まるURLか、サイト訪問時にURLの左側に鍵のマークがあるかどうかで確認できます。

参考:Google 検索セントラル「ランキングシグナルとしてのHTTPS」
参考:GMOグローバルサイン株式会社 「SSL/TLS総合解説サイト『SSL/TLSってなんだろう?』」

TLSハンドシェイクのしくみ

サイバーセキュリティ

TLSハンドシェイクとは

TLSハンドシェイクとは、TLSを使った通信を開始する際のシーケンスです。TLSハンドシェイク時には通信するクライアントとサーバー間でメッセージをやり取りし、暗号スイートを提示しながら通信相手を証明します。そして、使用する暗号アルゴリズムを決定し、セッション鍵の生成をしていきます。

TLSハンドシェイクのプロセス

TLSハンドシェイクのプロセスは、下記の流れになります。

TLSハンドシェイクのプロセス
  1. クライアントがサーバーへのメッセージ送信
    クライアントがサーバーに「Client Hello」という、クライアントがサポートするTLSのバージョン、対応する暗号スイート、「クライアントランダム」というランダムなバイト文字列を送信し、ハンドシェイクを開始する。

  2. サーバーがクライアントへ返答
    Client Helloメッセージへの返答として、サーバーがサーバーのSSL証明書、選んだ暗号スイート、サーバーが生成した別のバイト文字列「サーバーランダム」を含んだメッセージ、「Server Hello」を送信する。

  3. 認証局がサーバーの本人認証
    クライアントがサーバーのSSL証明書を発行元の認証局に確認する。証明書が正しく発行されていることが確認できれば、通信相手が偽装されたサーバーではないことを証明できます。

  4. クライアントがプレマスタシークレットを送信
    クライアントが、「プレマスタシークレット」と呼ばれるもうひとつのランダムなバイト文字列を、サーバーの公開鍵で暗号化し、サーバーに送信する。サーバーの公開鍵は、3で確認した証明書に付属しています。

  5. サーバーがプレマスタシークレットの解読
    サーバーが秘密鍵を使ってプレマスタシークレットを復号化し、解読する。

  6. セッションキーの生成
    クライアントとサーバーは、プレマスタシークレットからセッションキーを生成する。プレマスタシークレットはクライアントとサーバーで同じ値なので、セッションキーは同じ鍵(共通鍵)となる。

  7. クライアントの準備完了
    クライアントは、セッションキーで暗号化された「finished(完了)」のメッセージを送信する。
     
  8. サーバーの準備完了
    サーバーは、セッションキーで暗号化された「finished(完了)」のメッセージを送信する。

  9. セッションキーを使用した安全な通信を開始
    セッションキーを使用した状態で、通信をおこなう。

出典:Cloudflare「TLS | SSLハンドシェイクの プロセスは?」

TLSの最新バージョンについて

続編の記事では、2022年12月現在における最新バージョンのTLS1.3について紹介します。ぜひ「TLSとは?(2)TLS1.3とTLS1.2の違いを紹介」もご覧ください。