TLS/SSLの基礎
概要
TLS (Transport Layer Security) と SSL (Secure Sockets Layer) は、インターネット上でデータを安全に送受信するための暗号化プロトコルです。WebブラウザとWebサーバー間の通信(HTTPS)や、メール送信(SMTPS)、ファイル転送(FTPS)など、様々な場面で利用されています。
主な機能は以下の3点です:
- 暗号化 (Encryption): 第三者による盗聴を防ぐ。
- 認証 (Authentication): 通信相手が正当な存在であることを証明する(なりすまし防止)。
- 改ざん検知 (Integrity): 通信途中でデータが書き換えられていないことを保証する。
TLSとSSLの違い
一般的に「SSL」という言葉が広く使われていますが、技術的には TLS が現在の標準です。
- SSL (1.0, 2.0, 3.0): Netscape社によって開発されましたが、脆弱性が発見され、現在はすべて非推奨(廃止)となっています。
- TLS (1.0, 1.1, 1.2, 1.3): SSLの後継としてIETFによって標準化されました。現在、セキュリティ上の理由から TLS 1.2 以上が推奨されており、最新バージョンは TLS 1.3 です。
現在「SSL証明書」や「SSL通信」と呼ばれているもののほとんどは、実際には「TLS」を使用しています。
暗号化の仕組み
TLSでは、通信の安全性と速度を両立させるために、共通鍵暗号と公開鍵暗号を組み合わせたハイブリッド暗号方式を採用しています。
1. 共通鍵暗号 (Symmetric Key Encryption)
暗号化と復号に**同じ鍵(共通鍵)**を使用する方式です。
- メリット: 処理速度が速い。
- デメリット: 鍵を安全に相手に渡す方法(鍵配送問題)が必要。
- 代表的なアルゴリズム: AES, ChaCha20
共通鍵暗号では、通信相手に「共通鍵」を渡す必要がありますが、その鍵自体を暗号化せずに送ると盗聴されるリスクがあります。かといって、鍵を暗号化して送るには別の鍵が必要になり、堂々巡りになってしまいます。これを「鍵配送問題」と呼びます。
2. 公開鍵暗号 (Public Key Encryption)
公開鍵(誰でも取得可能)と秘密鍵(所有者のみが保持)のペアを使用する方式です。公開鍵で暗号化したデータは、対となる秘密鍵でしか復号できません。
- メリット: 鍵配送問題を解決できる。
- デメリット: 共通鍵暗号に比べて処理速度が遅い。
- 代表的なアルゴリズム: RSA, ECDSA (楕円曲線暗号)
3. ハイブリッド暗号 (Hybrid Encryption)
TLS通信では、以下のように両者を組み合わせます:
- 公開鍵暗号を使って、通信の最初に「共通鍵」を安全に交換する。
- その後の実際のデータ通信は、交換した「共通鍵」を使って共通鍵暗号で行う(高速化のため)。
デジタル証明書 (Digital Certificates)
デジタル証明書(SSLサーバー証明書)は、Webサイトの運営者の身元を証明し、通信の暗号化に必要な公開鍵を配布するための電子ファイルです。
証明書の役割
- 実在証明: サイト運営者が実在し、ドメインの使用権を持っていることを証明する。
- 暗号化通信の確立: クライアント(ブラウザ)にサーバーの公開鍵を安全に渡す。
認証局 (CA: Certificate Authority)
証明書を発行する信頼できる第三者機関です。ブラウザやOSには、主要なルート認証局の証明書があらかじめインストールされています。
証明書の種類(認証レベル)
| 種類 | 認証内容 | 特徴 | 用途 |
|---|---|---|---|
| DV (Domain Validation) | ドメインの使用権のみ確認 | 発行が早い、安価(無料もあり) | 個人ブログ、社内システム |
| OV (Organization Validation) | ドメイン使用権 + 組織の実在確認 | 企業名が証明書に含まれる | 一般企業サイト、Webサービス |
| EV (Extended Validation) | 最も厳格な審査 | アドレスバーに組織名が表示される場合がある | 金融機関、ECサイト |
TLSハンドシェイク
TLS通信を開始する際に行われる、暗号化方式の決定や鍵の交換を行う手順を「TLSハンドシェイク」と呼びます。
TLS 1.2 ハンドシェイクの簡略フロー
- Client Hello: クライアントが対応しているTLSバージョンや暗号スイートを提示。
- Server Hello: サーバーが使用するバージョンと暗号スイートを決定し、サーバー証明書(公開鍵含む)を送信。
- 証明書の検証: クライアントが証明書の正当性を検証(有効期限、CAの署名など)。
- 鍵交換: クライアントが共通鍵の元となるデータ(プリマスターシークレット)を生成し、サーバーの公開鍵で暗号化して送信。
- 共通鍵の生成: サーバーは秘密鍵で復号し、双方が同じ共通鍵を生成。
- 暗号化通信開始: 以降、生成した共通鍵でデータを暗号化して通信。
TLS 1.3 の改善点
TLS 1.3では、ハンドシェイクの手順が簡素化され、**1往復(1-RTT)**で通信を開始できるようになりました(TLS 1.2は2往復)。これにより、接続速度が向上し、古い脆弱な暗号アルゴリズムが削除されたことで安全性も高まっています。
まとめ
- TLSはインターネット通信の安全性を支える基盤技術です。
- ハイブリッド暗号により、安全性とパフォーマンスを両立しています。
- デジタル証明書により、通信相手のなりすましを防ぎます。
- Web開発者は、適切な証明書の管理と、最新のTLSバージョン(現在はTLS 1.2以上)の利用を心がける必要があります。