Mímisbrunnr知恵の泉

← サイバーセキュリティ 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:デジタル署名と証明書(PKI) ⚠️ 推奨設定は更新される(要最新確認)。本稿は TLS 1.3 を現行標準として記述。

要点(BLUF)

概念:暗号の道具を組み合わせる

ここまでの道具を1つに束ねたのが TLS です。

「相手確認 → 鍵合意 → 本文暗号化」の流れを自動でやってくれるのが TLS です。

仕組み:TLS 1.3 ハンドシェイク

TLS 1.3 は1往復(1-RTT)で鍵合意まで終え、旧バージョンより速く安全になりました。守る側が知っておく流れはこうです。

  1. ClientHello:クライアントが対応する暗号方式と、鍵交換用の材料((EC)DHE の公開値)を送る。
  2. ServerHello+証明書:サーバが方式を選び、自分の証明書(デジタル署名と証明書(PKI))と署名、鍵交換材料を返す。
  3. 鍵合意:双方が交換した材料から共有のセッション鍵を各自で計算する。鍵そのものは回線に流れない。
  4. 暗号化通信:以降は AEAD(AES-GCM など)でアプリデータを暗号化。
sequenceDiagram
    participant C as クライアント
    participant S as サーバ
    C->>S: ClientHello(対応方式・鍵交換材料)
    S->>C: ServerHello・証明書・署名・鍵交換材料
    Note over C,S: 双方が共有のセッション鍵を各自計算(鍵は流れない)
    C->>S: Finished(ここから暗号化)
    S->>C: 暗号化されたアプリデータ

仕組み:前方秘匿性(forward secrecy)

TLS 1.3 は鍵交換に毎回使い捨ての一時鍵((EC)DHE)を使います。これにより前方秘匿性が得られます。すなわち、将来サーバの長期秘密鍵が漏れても、過去に記録された通信は復号できない。セッション鍵は使い捨ての一時値から作られ、長期鍵だけでは再現できないからです。TLS 1.3 は前方秘匿性のない方式(旧来の RSA 鍵交換)を廃止しました。

防御側の使い方/設定

なぜ安全か:3つの保証を1つの流れで

TLS が通信を守れるのは、ハンドシェイクの中で3つを同時に達成するからです。(1) 証明書と署名で相手が本物だと確かめ(真正性)、(2) 一時鍵の交換で盗聴者には作れないセッション鍵を共有し(機密性)、(3) AEAD で改ざんを検知する(完全性)。前方秘匿性により、長期鍵が将来漏れても過去ログは守られます。

仕組みの直観

TLS は初対面の二人が、公証人の身分証(証明書)で相手を確認し、その場限りの合言葉(セッション鍵)を周りに聞かれず作って、以降はその合言葉で素早く会話する手順です。合言葉は毎回作り直すので、後日どちらかの金庫の鍵が盗まれても、昔の会話は再現できません。

⚠️ よくある誤解・設定ミス

対応 lab

TLS は複数の道具の組み合わせのため専用 lab は置かず、構成要素を security-study/labs/ の各デモで確認します(鍵=対称/公開鍵、証明書=署名 digital_signature_demo.py、本文暗号=symmetric_aead_demo.py)。

関連