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へ移行しています)