TLS

TLS通信とSSL/TLSアクセラレーターまとめ


TLSの通信の機能

  • 暗号化通信の提供: 通信内容を暗号化し、盗聴を防ぐ 共通暗号化方式、AES
  • 鍵交換: 鍵は公開鍵方式で共有。DHE(Ephemeral Diffie-Hellman)やECDHE(Ephemeral Eliptic Curve Diffie-Hellman)の利用が推奨されている。※
  • 認証機能: サーバやクライアントの正当性を証明(主にサーバ証明書)
    • サーバ:証明書内のFQDN(Fully Qualified Domain Name)が正しいかを認証
    • クライアント:クライアント証明書によるクライアントの認証
  • 改ざん検知(完全性の保証) 通信データが途中で書き換えられていないかを検出 パケットにハッシュを追加することで実現

※これらは過去のセッション鍵の安全性が保たれるというPFS(Perfect Forward Security)または前方秘匿性という性質を持つため。

TLSの特徴

  • トランスポート層のプロトコル
  • HTTPSに使われる標準プロトコル
    • HTTPにTLSを組み合わせたものがHTTPS。
  • 公開鍵暗号と共通鍵暗号の併用
    • 初期の鍵交換に公開鍵暗号を使い、その後の通信は高速な共通鍵暗号で行う。
  • 認証局(CA)が信頼の基盤
    • サーバ証明書はCAによって発行され、クライアントはCAを信頼することでサーバの正当性を判断。
  • SSLの後継技術
    • TLSはSSLの脆弱性を改善したプロトコルで、現在はTLSが主流。

ハンドシェイク

下記で伝達されたプリマスターシークレットを元にマスターシークレットを作成し,それを元にセッション鍵を生成し,暗号化通信を行う。

セッション鍵を私用した暗号化通信を行うプロトコルをレコードプロトコルと呼ぶ。

sequenceDiagram
    participant クライアント
    participant サーバ

    サーバ ->> クライアント: クライアントハローリクエスト
    クライアント ->> サーバ: クライアントハロー送信
    サーバ ->> クライアント: サーバハロー送信
    Note over クライアント,サーバ: この段階で暗号化アルゴリズムなど共有済み

    サーバ ->> クライアント: サーバ証明書送信 (Server Certificate) *
    Note over クライアント: サーバの認証を実施

    サーバ ->> クライアント: 一時的な鍵の送付 (Server Key Exchange) * ※証明書を持っていない場合
    サーバ ->> クライアント: Certificate Request * ※クライアントにも証明書を要求する場合

    サーバ ->> クライアント: Server Hello Done
    Note over クライアント: サーバの信頼性を確認OK
    

    クライアント ->> サーバ: クライアント証明書送信 (Client Certificate) *
    クライアント ->> サーバ: Client Key Exchange 
    Note over クライアント,サーバ: 暗号化のセッション鍵生成に必要な情報(プリマスタシークレット)を伝達

    クライアント ->> サーバ: Certificate Verify *
    Note over クライアント,サーバ: ここまでのデータが間違いなく伝達されたことの確認用

    クライアント ->> サーバ: 鍵交換完了通知 (Finished) 
    サーバ ->> クライアント: 鍵交換完了通知 (Finished) 
    Note over クライアント,サーバ: 共有鍵により通信データを暗号化開始

*: オプションなので必ず必要というわけではない。


プレマスターシークレット(Pre-Master Secret)とは

  • TLSハンドシェイク中に生成・共有される一時的な秘密データ
  • クライアントが乱数で生成し、サーバの公開鍵で暗号化して送信(RSA方式)
  • TLS1.3ではDHEやECDHEにより、安全に共有される

マスターシークレット(Master Secret)とは

  • クライアントとサーバが同じ値を持つ共通鍵の元になる中核データ
  • 次の式で生成される:
マスターシークレット = PRF(プレマスターシークレット, クライアントランダム + サーバランダム)
  • これを元に、通信で使う「暗号鍵」「MAC鍵」「IV(初期化ベクトル)」などが派生

■ まとめイメージ(Mermaid形式)

graph TD
    A[クライアント] --> B1[クライアントランダム]
    A --> B2[プレマスターシークレット]
    B2 --> C[PRF関数で処理]
    C --> D[マスターシークレット]
    D --> E[通信暗号鍵・MAC鍵を生成]

    F[サーバ] --> G1[サーバランダム]
    F --> G2[プレマスターシークレット]
    G2 --> C

■ SSL/TLSアクセラレーターとは

概要

  • TLS通信における暗号処理(主にハンドシェイク)を高速化・オフロードする技術や装置
  • サーバのCPU負荷を大幅に軽減し、大量接続にも対応可能

高速化の対象処理

  • 鍵交換(RSA、DHE、ECDHE)
  • サーバ証明書の署名検証
  • 対称鍵による暗号化・復号
  • ハッシュ(MAC、HMAC)

アクセラレーターの種類

種類 特徴
ハードウェア型 専用チップやカードで高速・高セキュリティ(例:HSM、NIC内蔵)
ソフトウェア型 OpenSSLなどの高速化ライブラリ(例:Intel QAT、BoringSSL)
クラウド型 CDNやロードバランサーがTLS終端を担当(例:AWS CloudFront)

● TLS終端(TLS Termination)とは?

[クライアント] ⇄(TLS)⇄ [TLS終端装置] ⇄(平文)⇄ [アプリケーションサーバ]
  • TLS通信を中間装置で「終端」し、以降は平文でやり取りする方式
  • 内部ネットワークのセキュリティ対策が必須

● メリットと注意点

メリット 注意点
サーバ負荷の軽減 終端以降の通信は暗号化されていない
高速な接続処理 専用機器のコストがかかる可能性あり
多数セッションへの対応 アクセラレーターが単一障害点になる可能性も

TLS バージョン別ざっくり比較まとめ

■ TLS 1.0(1999年)

  • SSL 3.0の後継として登場(実質はSSL 3.1)
  • 基本的な暗号化と認証の枠組みを定義
  • 今となっては古く、脆弱性が多数
    • 例:BEAST攻撃などに弱い
  • 2020年に主要ブラウザ・OSで非推奨・無効化

■ TLS 1.1(2006年)

  • TLS 1.0のマイナーアップデート
  • 初期化ベクトル(IV)を明示的に送信してセキュリティ向上
  • しかし暗号スイート構造や設計はあまり変わらず
  • 現在はTLS 1.0と同様に使用禁止扱い

■ TLS 1.2(2008年)

  • 現在でも広く使われている安定バージョン
  • 主な特徴:
    • SHA-256ベースのハッシュアルゴリズム対応
    • **AEAD暗号(GCMなど)**に対応
    • 柔軟な暗号スイートの選択が可能
  • 多くのWebサービス・APIで標準的に利用されている

■ TLS 1.3(2018年)

  • セキュリティ強化 + 大幅な高速化を実現
  • 主な特徴:
    • ハンドシェイクの回数削減(1-RTT)
    • 前方秘匿性(PFS)の強制
    • 古い暗号スイート・機能をばっさり削除
      • RSA鍵交換、静的DH、SHA-1、CBCなど
    • セキュリティもパフォーマンスも大幅改善

■ バージョン別ざっくり比較表

項目 TLS 1.0 / 1.1 TLS 1.2 TLS 1.3
リリース年 1999 / 2006 2008 2018
主な特徴 SSLの延長 安定・多機能 高速・高セキュア
暗号スイート構成 複雑 柔軟(自由に選べる) シンプル(固定方式)
鍵交換方式 RSA主流 RSA・DHE・ECDHE DHE・ECDHE(のみ)
ハンドシェイク速度 遅い(2-RTT) 普通(2-RTT) 速い(1-RTT)
使用推奨 ❌非推奨 ✅主流 ✅推奨(対応が必要)

※ TLS 2.0 は存在しません(スキップされており、1.2 → 1.3へ移行しています)