CA
CA
00 学習目標
01 TLS の役割
02 TLS 1.2 手順
03 TLS 1.3 改善
04 鍵交換と PFS
05 X.509 証明書
06 証明書チェーン
07 失効と運用
08 攻撃と対策
09 まとめと用語
10 確認問題
学習目標
本講を終えると、以下の問いに答えられるようになります。
TLS が 機密性・完全性・サーバ認証 の3つを同時に提供するプロトコルであることを説明できる
TLS 1.2 のハンドシェイク(ClientHello → ServerHello+証明書 → 鍵交換 → Finished )の流れを順に説明できる
TLS 1.3 で ハンドシェイクが 1-RTT に短縮 された理由と、RSA 鍵交換が廃止 された理由を述べられる
RSA 鍵交換と (EC)DHE 鍵交換の違い、そして 前方秘匿性(PFS) が何を守るかを説明できる
共通鍵+公開鍵の ハイブリッド暗号 がなぜ採用されているかを説明できる
X.509 証明書の主要フィールド(Subject / Issuer / Validity / Public Key / Signature / SAN)を読める
エンドエンティティ証明書 → 中間 CA → ルート CA の 証明書チェーン と ルートストア の役割を説明できる
証明書失効の3方式(CRL / OCSP / OCSP Stapling )を比較できる
Let's Encrypt の自動発行(ACME)、HSTS、Certificate Transparency が解決した課題を説明できる
このレッスンの目次
TLS は何を守るプロトコルか
TLS(Transport Layer Security) は、TCP の上に「安全な土管」を作り、その中をアプリケーション層のデータ(HTTP / SMTP / IMAP など)が流れるようにするプロトコルです。前身は SSL(Secure Sockets Layer) (1994 年に Netscape 社が開発)。SSL 2.0 / 3.0 は脆弱性が見つかり廃止されており、現在は名前は「SSL 証明書」と呼ばれることが多いものの、実際に使われているのは TLS 1.2 と TLS 1.3 です。
POINT
TLS が同時に提供する3つの保証 ── ① 機密性 (盗聴されない)・② 完全性 (改ざんを検知できる)・③ サーバ認証 (本物のサーバと話していることを確認できる)。HTTPS = HTTP + TLS、SMTPS / IMAPS / POP3S も同じ仕組み。
TLS の位置づけ ── どの層に挟まるのか
TLS は アプリケーション層とトランスポート層の間 で動きます。アプリ側(ブラウザなど)から見ると、TCP に直接書き込んでいたバイト列が、TLS の層で暗号化・MAC 付与されてから TCP に渡されます。受信側はその逆です。アプリケーション層のプロトコルはほとんど書き換えずに、ポート番号を変える(HTTPS なら 443、SMTPS なら 587)だけで TLS の保護を受けられます。
プロトコルスタックでの TLS の位置
アプリ層 HTTP / SMTP / IMAP
TLS(本講)
トランスポート層 TCP
インターネット層 IP
バイト列を暗号化前のまま渡す
暗号化・MAC・ハンドシェイクを担当
暗号化済みバイト列を信頼性つきで運ぶ
パケットを世界中へ届ける
※ HTTPS 通信は「アプリ層 HTTP」と「トランスポート層 TCP」の間に TLS 層が挟まっている形
図の見方:TLS 自体はアプリ層プロトコルではなく、TCP の上に乗る薄いセキュリティ層。アプリは TLS のソケットに書き込むだけで、暗号化・整合性チェック・サーバ認証が透過的に行われる。
考えてみよう: URL が http:// から始まるサイトでパスワードを入力すると、ネットワーク途中の機器が Wireshark のようなパケット解析ツールでそのパスワードをそのまま読めてしまいます。https:// では同じパケットが暗号化された乱数の塊になり、たとえ取られても中身は分かりません。これは TLS の 機密性 が効いている証拠です。
TLS 1.2 のハンドシェイク
TLS は通信を始める前に ハンドシェイク と呼ばれる準備フェーズを行います。目的は次の3つを同時に達成することです:① 使う 暗号スイート を合意する、② 相手(サーバ)が本物であることを 証明書 で確認する、③ 以後の通信で使う 共通鍵 を両者で共有する。TLS 1.2 では下図のように 2 往復(2-RTT) かかります。
POINT
TLS 1.2 ハンドシェイク = ClientHello → ServerHello + Certificate(+ServerKeyExchange) → ClientKeyExchange + Finished → Finished 。これに先立って TCP の 3-way handshake も必要なので、合計で 3-RTT 程度の遅延が発生する。
順を追って観察する(ステップ実行)
クライアント
サーバ
① ClientHello(乱数 + 暗号スイート候補)
① ClientHello(済)
② ServerHello + Certificate + ServerKeyExchange + ServerHelloDone
③ クライアントが証明書チェーンを検証(発行元 CA・有効期限・FQDN 一致)
→ 信頼できれば証明書中の公開鍵を取り出して保持
④ ClientKeyExchange(プレマスタ秘密)+ ChangeCipherSpec + Finished
サーバの公開鍵で暗号化(RSA鍵交換) or DH 公開値を送る
⑤ ChangeCipherSpec + Finished(サーバ側)
両者がプレマスタ秘密から同じマスタ秘密 / 共通鍵を導出
⑥ Application Data(共通鍵 AES などで暗号化された HTTP / メール 等)
以後は共通鍵暗号で双方向の高速通信
← 前のステップ
次のステップ →
最初へ
図の見方:ステップ送りで TLS 1.2 のメッセージ往復を観察できる。最終的に両者が同じ マスタ秘密 → 共通鍵 を持つに至り、以後はそれで対称暗号通信を行う。証明書はサーバから一方的に提示され、クライアントはそれを検証して公開鍵を取り出す。
暗号スイートの読み方
TLS 1.2 で使われる「暗号スイート」は、鍵交換 / 署名 / 共通鍵暗号 / ハッシュ関数 の組み合わせを 1 つの ID で表したものです。たとえば TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 は次のように読みます。
区切り 意味 この例の値
鍵交換 共通鍵を作るアルゴリズム ECDHE (楕円曲線 DH 鍵交換、PFS あり)
署名 サーバ証明書に使われている署名アルゴリズム RSA
共通鍵暗号 本データを守る対称暗号 AES_128_GCM (認証付き暗号)
ハッシュ MAC や鍵導出に使うハッシュ関数 SHA256
TLS 1.2 では何百種類もの暗号スイートが定義されており、サーバとクライアントが「両者ともサポートしている中で最強のもの」を選ぶ仕組みです。
TLS 1.3 でなにが変わったか
TLS 1.3 (RFC 8446、2018 年標準化)は、TLS 1.2 から大胆な簡素化と高速化を行いました。最大の特徴は ハンドシェイクが 1-RTT に短縮 されたこと、そして 古いアルゴリズムが軒並み削除 されたことです。
POINT
TLS 1.3 = 1-RTT(再開時は 0-RTT も可) + (EC)DHE 専用 (RSA 鍵交換は廃止) + AEAD 専用 (CBC モード廃止) + 暗号スイートの大幅整理 (数百個 → 5 個)。前方秘匿性が事実上必須になった。
TLS 1.2 と TLS 1.3 を並べて比較する
ハンドシェイク往復数
TLS 1.3 ではサーバが ServerHello と一緒に DH 公開値・証明書・Finished までまとめて送る ため、初回でも 1-RTT で暗号通信に入れます。再接続(再開)では 0-RTT (初回パケットに早くもアプリデータを乗せる)も可能です。
段階 TLS 1.2 TLS 1.3
初回接続(TLS のみ) 2-RTT 1-RTT
再接続 1-RTT(セッション再開) 0-RTT (early data)
合計遅延感(TCP 含む) 3-RTT 程度 2-RTT 程度
つながる知識: 0-RTT は「以前確立した鍵で初回パケットから暗号化する」ため、リプレイ攻撃に弱い面があります。POST のような副作用のあるリクエストには使わないのが原則です。
鍵交換
TLS 1.2 では RSA を鍵交換に使う暗号スイートが残っていましたが、TLS 1.3 では (EC)DHE のみ になりました。理由は 前方秘匿性(PFS) を全接続で強制するためです(次節で詳述)。
TLS 1.2:RSA / DHE / ECDHE などから選択(RSA は PFS なし)
TLS 1.3:ECDHE / DHE のみ 。RSA 鍵交換は仕様から削除
暗号スイート
TLS 1.3 で実装が必須/推奨される暗号スイートはわずか 5 個。すべて AEAD(認証付き暗号) に統一されています。
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256 (モバイル向けに高速)
TLS_AES_128_CCM_SHA256
TLS_AES_128_CCM_8_SHA256
暗号スイート名から「鍵交換」「署名」が消えたのは、それらがハンドシェイクの別パラメータとして独立に交渉されるようになったためです。
廃止された機能
TLS 1.3 では次のような旧アルゴリズム / 機能が 削除 されました。脆弱性が見つかったり、もはや必要ないものを切り捨てた形です。
RSA 鍵交換(PFS が無いため)
静的 DH 鍵交換
CBC モード対称暗号(POODLE / Lucky13 攻撃の懸念)
RC4(統計的偏りで解読された)
MD5 / SHA-1 ベースの署名
圧縮機能(CRIME 攻撃に悪用された)
再ネゴシエーション(設計簡素化のため)
もっと詳しく:TLS 1.3 の 1-RTT を実現する仕組み
TLS 1.2 ではサーバの公開鍵証明書を もらってから プレマスタ秘密を暗号化して送るため、どうしても 2 往復必要でした。TLS 1.3 ではクライアントが ClientHello に あらかじめ DH 公開値(key_share 拡張) を載せて投機的に送ります。サーバは ServerHello に自分の DH 公開値を入れた段階でもう共通鍵を計算でき、続けて証明書・Finished までを 同じ往復で 暗号化して返せます。クライアントも届いた時点で鍵を確定でき、次の自分のパケットからは暗号化済みでアプリデータを送れます。
鍵交換アルゴリズムと前方秘匿性
TLS の心臓部は 「両者が安全に同じ共通鍵を持つ」 仕組みです。TLS にはいくつかの鍵共有方式がありますが、現代では (EC)DHE (楕円曲線 Diffie-Hellman 鍵交換、毎回鍵を作り直す版)が標準です。本節では、なぜ古い RSA 方式から DHE へ移ったのか、その理由となる 前方秘匿性(PFS) を理解します。
POINT
RSA 鍵交換 :クライアントが乱数(プレマスタ)をサーバの公開鍵で暗号化して送る。サーバの 長期秘密鍵が漏れると、過去のすべての通信が復号 できてしまう。
(EC)DHE 鍵交換 :接続ごとに使い捨ての DH 鍵ペアを生成。サーバの長期鍵が将来漏れても 過去の通信は復号できない (=前方秘匿性 )。
RSA 鍵交換 と DHE 鍵交換のちがい
RSA 鍵交換(古い方式)
1. クライアントが乱数 R を生成
2. サーバの公開鍵で R を暗号化
3. サーバが秘密鍵で復号 → R 共有
4. 両者が R から共通鍵を導出
⚠ 長期秘密鍵が漏れると、保存された
過去の通信もすべて復号できる
PFS なし(no Forward Secrecy)
→ TLS 1.3 では削除
(EC)DHE 鍵交換(現代)
1. 両者が 使い捨ての DH 鍵ペアを生成
2. 公開値だけを交換(秘密値は手元)
3. 数学的計算で同じ共有値に到達
4. 共有値から共通鍵を導出 → 廃棄
✓ 接続ごとに鍵が違うので、長期鍵が
漏れても過去通信の復号には使えない
PFS あり(Perfect Forward Secrecy)
→ TLS 1.3 で唯一の鍵交換方式
図の見方:RSA 鍵交換は「サーバの長期秘密鍵」が共通鍵生成のすべてを握っているため、その鍵が将来漏れた瞬間にすべての過去通信が読めてしまう。DHE は接続ごとに使い捨ての鍵ペアを作るので、長期鍵が漏れても過去通信は守られる。
ハイブリッド構造 ── なぜ公開鍵だけで通信しないのか
公開鍵暗号は「鍵配送問題を解く」点で画期的ですが、実は処理がとても遅い (数百〜数千倍のオーダ)。だから TLS は次のように 役割を分けて 使います。
公開鍵暗号 / DH :ハンドシェイク時の 鍵共有 (セッションごとに 1 回)
共通鍵暗号(AES-GCM など) :本データの 大量の暗号化 (以後ずっと)
署名(RSA / ECDSA) :証明書の信頼確認のみ
ハッシュ関数(SHA-256 / SHA-384) :鍵導出と完全性チェック
これを ハイブリッド暗号 と呼びます。「鍵を運ぶ箱は公開鍵で、運んだあとの会話は共通鍵で」と覚えるとよいです。
Q. 「前方秘匿性(PFS)」が守るものは次のどれですか?
A. これから先に行う未来の通信を、量子計算機による解読から守る
B. 過去にすでに行われた通信を、サーバの長期鍵が将来漏れても守る
C. クライアント側に保存されたパスワードをマルウェアから守る
D. 中間者攻撃そのものをハンドシェイク中に防ぐ
正解:B 。「Forward(前方)」は時間軸で「未来から振り返って過去」を意味します。今やった通信を盗聴者がコピーして取っておいて、何年も後にサーバ側の長期秘密鍵を入手したとしても、(EC)DHE で鍵を毎回作り直していれば過去の通信は復号できません。これが前方秘匿性です。A は耐量子暗号、C は端末セキュリティ、D は証明書による認証の話で、PFS とは別。
X.509 公開鍵証明書のフィールド
TLS で使われる サーバ証明書 は、X.509 v3 という ITU-T 規格(RFC 5280 でも定義)で書かれた構造化データです。要するに 「公開鍵に CA がハンコを押した文書」 ですが、その中には公開鍵以外にも多くの情報が入っています。
POINT
X.509 証明書 = 本体(TBSCertificate) + 署名アルゴリズム + CA による署名 。本体は誰の(Subject)・誰が発行した(Issuer)・いつまで(Validity)・公開鍵(Public Key)・拡張(SAN ほか)を含む。
主要フィールド一覧
フィールド 意味 / 役割 例
Version X.509 のバージョン v3(現代の標準)
Serial Number CA 内で一意な証明書番号 0x1a2b3c…
Signature Algorithm 下の Signature を作るのに使ったアルゴリズム sha256WithRSAEncryption
Issuer この証明書を発行した CA の DN(識別名) CN=Let's Encrypt R3, O=Let's Encrypt
Validity 有効期限(notBefore / notAfter) 2026-01-01 〜 2026-04-01
Subject この証明書の所有者 DN(サーバ名など) CN=example.com
Subject Public Key Info 所有者の公開鍵(アルゴリズムも含む) RSA 2048-bit / ECDSA P-256
Extensions(拡張) 追加情報(用途・SAN など) 下記 SAN ほか
Signature 本体に対する CA の署名(完全性と発行者保証) 長いビット列
重要な拡張フィールド
Subject Alternative Name(SAN) :証明書が有効な FQDN を列挙(例:example.com, www.example.com, *.api.example.com )。現代のブラウザは SAN のみ を見て CN は無視する
Key Usage / Extended Key Usage :この鍵の用途(署名 / 鍵暗号化、サーバ認証 / クライアント認証)
Basic Constraints :CA: TRUE なら他の証明書を発行できる中間 CA、CA: FALSE ならエンドエンティティ
CRL Distribution Points / Authority Information Access :失効情報(CRL / OCSP)の取得先 URL
SCT(Signed Certificate Timestamp) :Certificate Transparency ログへ登録された証拠
X.509 v3 証明書の構造(概念図)
本体(TBSCertificate)── ここに CA が署名する
Version / Serial Number / Sig.Alg.
Issuer:CN=Let's Encrypt R3 …
Validity:2026-01-01 〜 2026-04-01
Subject:CN=example.com
Subject Public Key Info:RSA 2048-bit(または ECDSA P-256)— 利用者の公開鍵
Extensions:
• SAN = example.com, www.example.com, *.api.example.com
• Key Usage / Basic Constraints / CRL DP / OCSP / SCT …
CA の署名(Signature):本体ハッシュを CA の秘密鍵で署名した値
.crt / .pem ファイル
図の見方:X.509 証明書は中央の「本体」と末尾の「CA 署名」に大別される。本体には Subject(誰の)・Issuer(誰が発行した)・Validity(いつまで)・公開鍵・拡張(SAN ほか)が並ぶ。CA はこの本体全体のハッシュに対して秘密鍵で署名するので、1 ビットでも改ざんすると署名検証が必ず失敗する。
証明書チェーンと PKI の階層
あなたのブラウザは、なぜ example.com の証明書が「本物」だと判断できるのでしょうか。それは 信頼の連鎖(チェーン) をルートまでたどることで確認しているからです。本節ではチェーン検証と ルートストア の仕組み、そして PKI(公開鍵基盤)の階層を見ていきます。
POINT
PKI 階層 = ルート CA(自己署名)→ 中間 CA(ルートが署名)→ エンドエンティティ証明書(中間 CA が署名) 。ブラウザ / OS は ルートストア に組み込まれた数百のルート証明書 だけ を最初から信頼する。それ以外は誰かが「これは信頼してよい」と署名でつないでくれないと信頼されない。
チェーン検証のアニメーション
3 階層のチェーン検証(下から上へ署名を辿る)
エンドエンティティ証明書
Subject: example.com
Issuer: 中間 CA
中間 CA 証明書
Subject: 中間 CA(例: R3)
Issuer: ルート CA
ルート CA 証明書
Subject = Issuer(自己署名)
OS / ブラウザに最初から内蔵
① 中間 CA の公開鍵で検証
② ルート CA の公開鍵で検証
下から見上げる:各証明書の「署名」を、上の証明書の「公開鍵」で検証していく。最上段は ルートストア に存在することで自動的に信頼される。
▶ 再生
⏸ 一時停止
⟳ はじめから
図の見方:再生ボタンで「下から上へ署名検証が伝播していく」様子を観察できる。① エンドエンティティ証明書の署名を中間 CA の公開鍵で検証 → ② 中間 CA 証明書の署名をルート CA の公開鍵で検証。ルートはあらかじめ OS / ブラウザに入っているので、そこに到達した時点でチェーン全体が信頼される。
ルートストア ── ブラウザ / OS が「最初から信頼している」リスト
各 OS / ブラウザには ルートストア(信頼アンカー集合) が組み込まれており、その中のルート証明書は 無条件で信頼 されます。代表的なものは Mozilla NSS(Firefox / Linux)、Microsoft Trusted Root Program(Windows / Edge)、Apple Root Program(macOS / iOS)、Chrome Root Store などです。それぞれ厳格な監査(WebTrust)を経た CA だけが収録されます。
考えてみよう: なぜルート CA の証明書は「自己署名」(Subject = Issuer)なのに信頼されるのでしょうか。答えは「署名で信頼しているのではなく、ルートストアに入っていることで信頼している 」から。ルートストアに入る = OS / ブラウザの監査を通った、という社会的・運用的な信頼が根拠です。
認証局の責任 ── 不正発行が起きると何が壊れるか
CA は「インターネットの公証人」として絶大な権限を持ちます。もし CA が不正な証明書(例:他人のドメインに対する証明書)を発行してしまうと、攻撃者がその証明書を使って 本物そっくりの偽サイト を立ち上げ、ブラウザの鍵マークを偽装できます。実際、2011 年の DigiNotar 事件では大規模な不正発行が起き、その CA はルートストアから追放されました。CA の信頼は「失った瞬間に終わる」のです。
Q. もしあるルート CA の 秘密鍵 が漏洩したら、世界に何が起こるでしょうか。少し考えてからクリック。
答えを見る
攻撃者は 任意のドメインに対する証明書 を作り放題になる(google.com でも your-bank.jp でも)
そのルートを信頼している すべての 端末 / ブラウザが、攻撃者の偽サイトを「正規」と判定してしまう
緊急対応として、各 OS / ブラウザは ルートストアからその CA を削除 する更新を配布する必要がある(全世界の端末が更新を当てきるまで時間がかかる)
その CA から発行された すべての正規証明書 も信頼を失うので、世界中のサイトが鍵マークを失い、再発行が必要になる
結果、運営者はビジネス上ほぼ「廃業」となる(DigiNotar の例)。だからルート鍵は HSM(専用ハードウェア)とオフラインで厳重に保管される
証明書の失効と現代の運用
証明書には有効期限がありますが、それより 前 に「もうこの証明書を信頼しないでほしい」と取り消したい場面があります。サーバの秘密鍵が漏れた、サイト所有者が変わった、証明書情報に誤りがあった ── こうしたとき使うのが 失効処理 です。さらに、現代の TLS 運用で重要な仕組み(Let's Encrypt / HSTS / Certificate Transparency)もここで扱います。
POINT
失効確認方式は3種類 ── CRL (失効した証明書のリストをまとめてダウンロード)・OCSP (1枚ずつ CA に問い合わせ)・OCSP Stapling (サーバが事前取得した OCSP 応答をハンドシェイクで一緒に渡す)。プライバシ・速度の観点から OCSP Stapling が望ましい。
3つの失効確認方式の比較
方式 仕組み 長所 短所
CRL (Certificate Revocation List)
CA が失効した全証明書のシリアル番号をまとめて公開、クライアントが定期取得
実装が単純
サイズが巨大(数 MB)、最新性が悪い
OCSP (Online Certificate Status Protocol)
クライアントが接続のたびに CA の OCSP レスポンダに「この証明書は有効?」と問い合わせ
最新の状態が分かる
CA に「誰がどのサイトを見たか」が漏れる(プライバシ問題)、OCSP サーバ障害で接続が遅延
OCSP Stapling
サーバ側が事前に OCSP 応答を取得し、TLS ハンドシェイクで 証明書と一緒に 渡す
高速・プライバシ良好・CA 障害の影響が小さい
サーバ側の設定が必要
もっと詳しく:OCSP Stapling のしくみ
従来の OCSP では、ブラウザが接続するたびに CA の OCSP レスポンダ に問い合わせを行っていました。これにはふたつの問題があります。①「ユーザがどのサイトに接続したか」が CA に漏れる(プライバシ)。②CA のレスポンダが落ちると TLS が遅くなる(可用性)。
OCSP Stapling では、サーバ自身が定期的に CA に問い合わせて 新鮮な OCSP 応答(CA 署名つき) を取得しておき、クライアントとのハンドシェイク時に CertificateStatus として一緒に「ホチキス止め(staple)」して渡します。クライアントは追加の問い合わせなしに、CA 署名つきの状態情報を受け取れます。HTTP/2 + TLS 1.3 + OCSP Stapling は現代的なセットアップの定番です。
Let's Encrypt と無料・自動化された TLS
2010 年代までサーバ証明書は 有償 (年額数千〜数万円)で、申請から発行まで人手の認証作業が必要でした。Let's Encrypt (2015 年開始、ISRG が運営)は、これを 無料 + 完全自動 + 短期(90 日) に変革し、HTTPS 普及を爆発的に加速させました。
もっと詳しく:Let's Encrypt の自動発行(ACME プロトコル)
Let's Encrypt は ACME(Automatic Certificate Management Environment) という API を公開しています。サーバ管理者は certbot などのクライアントを使って、次の流れを自動実行します。
クライアントが Let's Encrypt にアカウント鍵を登録
「example.com の証明書がほしい」と注文
Let's Encrypt が ドメイン所有を確認するチャレンジ を返す(例:/.well-known/acme-challenge/xxx に特定の文字列を置け)
クライアントがファイルを設置 → Let's Encrypt が HTTP / DNS で確認(DV: Domain Validation )
確認が通ったら証明書を発行・ダウンロード
有効期限は 90 日。cron で 60 日ごとに自動更新するのが標準
「短い有効期限 + 自動更新」の組み合わせは、人手で 1 〜 2 年証明書を運用する従来方式より 失効リスクが小さい (漏れたとしても自然に有効期限が切れる)というメリットもあります。
HSTS:HTTP に落とさせない仕組み
HSTS(HTTP Strict Transport Security、RFC 6797) は、サーバが HTTPS で次のような応答ヘッダを返すと、ブラウザが 以後そのドメインへの HTTP アクセスを自動で HTTPS に書き換える 仕組みです。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
これにより、ユーザが http://bank.example と打ち込んでも HTTPS に強制リダイレクトされ、最初の 1 回目の通信から平文に落ちません。HPKP(HTTP Public Key Pinning) という関連仕様もありましたが、運用ミスでサイトが復旧不能になる事故が多く 廃止 され、現在は Certificate Transparency に役割が移っています。
Certificate Transparency:不正発行を「見える化」する
Certificate Transparency(CT、RFC 6962) は、すべての公的な証明書発行を 公開ログ に記録する仕組みです。Chrome では 2018 年以降、CT ログに登録されていない証明書は警告/エラーになります。
CA は新しい証明書を発行するたびに、複数の CT ログサーバに登録する
登録の証拠(SCT :Signed Certificate Timestamp)が証明書の拡張に含まれる
誰でも CT ログを監視でき、自分のドメインに不正な証明書が発行されたら気づける
CT は「CA を信頼する」モデルに 監視と説明責任 を加えるもので、PKI の弱点を補完する重要な仕組みです。
TLS への攻撃と現代の対策
TLS と PKI は理論的にはきれいですが、運用と歴史の中でさまざまな攻撃を受けてきました。代表的な脅威を整理しておきましょう。
主な攻撃
中間者攻撃(MITM) :通信路で双方になりすまして鍵交換を肩代わりする(認証なしの素の DH は脆弱)
証明書偽造 / 不正発行 :CA を騙したり買収したりして本来の所有者でないドメインの証明書を入手
ダウングレード攻撃 :両者が新しいプロトコルに対応していても、攻撃者が ClientHello を書き換えて古い脆弱な版に落とさせる(POODLE、FREAK など)
長期鍵漏洩+保存型復号 :暗号文を取っておいて、後で漏洩した RSA 秘密鍵で復号(PFS が無いと有効)
ハッシュ衝突 / 弱い乱数 :MD5 / SHA-1 衝突で偽造証明書、CSPRNG の不備で予測される鍵
対応する対策
サーバ証明書による認証 :ハンドシェイク中に CA 署名つきの証明書を提示
CT による監視 + 短い有効期限 + ACME 自動失効で被害最小化
TLS 1.3 でダウングレード保護 (古い版とのネゴ手順を簡素化)、HSTS で HTTP への陥落を防止
(EC)DHE による PFS を全接続で必須化(TLS 1.3)
SHA-256 以上 + AEAD(GCM / CHACHA20-POLY1305)+ HSM 保管の組合せ
TLS 検査(企業 MITM)の是非
企業ネットワークでは、社内の DLP(情報漏洩防止)/ アンチウイルス装置のために、意図的な MITM を行うことがあります。仕組みは:① 社内端末に 会社専用のルート CA 証明書 を強制インストール、② 出口装置がリアルタイムで偽の証明書を生成して TLS を 復号→検査→再暗号化 する。これにより HTTPS の中身を社内で検査できますが、利用者から見ると会社が すべての通信を読める状態 になります。教育機関 / 医療機関 / 銀行サイトを通すと法的問題が発生しうるため、近年は 除外リスト (検査をバイパスするドメインリスト)を必ず併用する運用が一般的です。
考えてみよう: もしあなたの大学が「すべての TLS 通信を復号して内容をチェックしている」と仮定したら、ブラウザの鍵マークはどう見えるでしょうか。実は 普通の鍵マークのまま (ただし発行元 CA が大学の名前になっている)のが多いです。鍵マークは「途中で読まれていない」ことを保証するわけではなく、「証明書チェーンが あなたの端末のルートストア に到達している」ことを保証するに過ぎない、という限界を理解しておきましょう。
まとめと用語チェック
SUMMARY
1. TLS は TCP の上に乗るセキュリティ層で、機密性 + 完全性 + サーバ認証 を同時に提供する
2. TLS 1.2 は 2-RTT、TLS 1.3 は 1-RTT(再開時 0-RTT)。1.3 では RSA 鍵交換 / CBC モード / MD5 / SHA-1 など旧式が削除
3. 鍵交換は (EC)DHE が主流。接続ごとに使い捨ての鍵で 前方秘匿性(PFS) を確保
4. ハンドシェイク後は 共通鍵(AES-GCM など) で大量データを高速に暗号化(ハイブリッド暗号)
5. X.509 証明書 = Subject / Issuer / Validity / Public Key / Extensions(SAN)+ CA 署名
6. PKI 階層 = ルート CA → 中間 CA → エンドエンティティ。OS / ブラウザの ルートストア が信頼の起点
7. 失効処理は CRL / OCSP / OCSP Stapling (現代は Stapling 推奨)
8. Let's Encrypt(ACME) で TLS 証明書は無料 + 自動更新が標準に。HSTS で HTTP 陥落を防止、Certificate Transparency で不正発行を可視化
用語チェック
用語 1行説明
TLS / SSL TCP 上で機密性・完全性・認証を提供するセキュリティ層。SSL は廃止、現役は TLS 1.2 / 1.3
ハンドシェイク 本通信前に暗号スイート合意・サーバ認証・鍵共有を行う準備フェーズ
ClientHello / ServerHello ハンドシェイクの最初に交わされる、乱数や対応暗号スイート一覧を含むメッセージ
暗号スイート 鍵交換 / 署名 / 共通鍵暗号 / ハッシュの組合せを表す ID
1-RTT / 0-RTT ハンドシェイクの往復数。TLS 1.3 で大幅短縮
(EC)DHE 使い捨て鍵を使う Diffie-Hellman 鍵交換(楕円曲線版含む)。PFS を提供
前方秘匿性 (PFS) 長期鍵が将来漏れても過去通信が復号されない性質
ハイブリッド暗号 公開鍵で鍵共有、共通鍵で本データ暗号化と役割分担する設計
X.509 公開鍵証明書のフォーマット規格(RFC 5280)
Subject / Issuer 証明書の所有者 / 発行者の DN(識別名)
SAN Subject Alternative Name。証明書が有効な FQDN のリスト
PKI 公開鍵基盤。CA・証明書・失効・運用を含む信頼の枠組み
ルート CA / 中間 CA 自己署名で信頼の起点となる CA / ルート配下で証明書を発行する CA
ルートストア OS / ブラウザにあらかじめ組み込まれたルート証明書集合
CRL / OCSP / OCSP Stapling 証明書失効を伝える3方式
Let's Encrypt / ACME 無料・自動・短期で証明書を発行する CA とその API
HSTS HTTP に落ちないようブラウザに HTTPS 強制を指示する仕組み
Certificate Transparency すべての証明書発行を公開ログに記録し監査可能にする仕組み
ダウングレード攻撃 新しいプロトコルから古く脆弱な版へ落とさせる攻撃
NEXT: 次回(第26回)は、TLS の応用編として、HTTP・SMTP・IMAP・POP3・FTP といった古典プロトコルをどう TLS に被せるか (HTTPS / SMTPS / IMAPS / FTPS / SFTP) を整理します。続く第27回で ファイアウォール / IDS / IPS / WAF といった境界防御の仕組みと典型的な攻撃を扱います。
確認問題
問1. TLS が同時に提供する保証として、最も適切な組合せを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. 機密性のみ(暗号化だけが目的)
B. 機密性 + クライアント認証(常に双方向認証)
C. 機密性 + 完全性 + サーバ認証
D. パケットの送信順序保証 + 経路最適化 + 暗号化
正解:C
TLS は ① 機密性(共通鍵暗号で盗聴を防ぐ)、② 完全性(MAC / AEAD で改ざんを検知)、③ サーバ認証(証明書で相手が本物か確認)の3つを同時に提供する。クライアント認証はオプションで、Web では普通使われない(B は不適)。経路最適化は IP / ルーティングの仕事(D は誤り)。
問2. TLS 1.3 で RSA 鍵交換が削除された 主な理由として最も適切なものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. RSA は計算が重く、当時のサーバ性能では実装が困難だったため
B. RSA 鍵交換は前方秘匿性(PFS)が無く、長期秘密鍵が将来漏れると過去の通信がすべて復号されるため
C. 量子コンピュータがすでに RSA を破ったため
D. 特許の関係で TLS 1.3 では使えなかったため
正解:B
RSA 鍵交換ではプレマスタ秘密がサーバの長期公開鍵で暗号化されるため、対応する秘密鍵が将来漏洩すると、過去に保存された暗号文がすべて復号できてしまう。一方 (EC)DHE は接続ごとに使い捨ての鍵を使うので、長期鍵が漏れても過去通信は守られる(=PFS)。TLS 1.3 はこの PFS を全接続で強制するために RSA 鍵交換を削除した。A は史実と逆、C は誤り(2026 年時点で大規模 RSA は破られていない)、D は事実誤認。
問3. X.509 証明書の SAN(Subject Alternative Name) 拡張の役割として正しいものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. 証明書の発行 CA を識別するための ID
B. CRL の取得先 URL を示すフィールド
C. 証明書の有効期限の終了日時
D. その証明書が有効なサーバ名(FQDN)を複数指定するためのフィールド
正解:D
SAN は example.com, www.example.com, *.api.example.com のように、その証明書が どのドメインに対して有効か を列挙する拡張。古くは Subject の CN フィールドが使われていたが、現代のブラウザ(Chrome 58 以降など)は CN を無視して SAN のみを参照する。A は Issuer、B は CRL Distribution Points、C は Validity の話。
問4. 「ルート CA 証明書がブラウザに信頼される根拠」として最も適切な説明を1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. OS / ブラウザに最初から組み込まれている ルートストア に登録されているから
B. ルート CA の証明書は IETF の RFC で個別に列挙されているから
C. 上位の「メタルート CA」がデジタル署名しているから
D. 自己署名されており、署名検証の数学的性質上、自動的に信頼されるから
正解:A
ルート CA 証明書は自己署名(Subject = Issuer)なので、署名そのものから信頼を得ているわけではない 。OS / ブラウザの ルートストア (Mozilla NSS、Microsoft Trusted Root、Apple Root、Chrome Root Store)に組み込まれている という社会的・運用的な事実 によって信頼の起点になっている。だから D は誤り(自己署名自体には数学的な信頼性は無い)。B は誤り(個別の RFC 列挙ではなく各ベンダのプログラム)。C のような「メタルート」は存在しない。
問5. 証明書失効方式について 誤った 説明はどれか。
次の選択肢から最も適切なものを選択してください。
A. CRL は失効した証明書のシリアル番号をまとめたリスト全体を取得する方式である
B. OCSP Stapling では、クライアントが接続のたびに CA の OCSP レスポンダへ問い合わせるためプライバシ問題がある
C. OCSP は接続のたびに CA に問い合わせる方式で、最新性は良いが CA への依存とプライバシ漏洩の懸念がある
D. OCSP Stapling では、サーバが事前取得した OCSP 応答を TLS ハンドシェイクに添付して渡す
正解:B(誤った説明)
B は OCSP Stapling と素の OCSP の説明を混同している。Stapling では サーバ側が 事前に CA から OCSP 応答(CA 署名つき)を取得しておき、TLS ハンドシェイク時に証明書と一緒に「ホチキス止め(staple)」して渡す。クライアントは追加の問い合わせを行わないので、CA への通信が発生せず、プライバシも可用性も改善する。A・C・D はそれぞれ正しい説明である。