セッション鍵とは何か?TLSの鍵交換・導出・運用を徹底解説する完全ガイド
セッション鍵とは — 概要と役割
セッション鍵(セッションキー、session key)とは、通信セッション単位で生成・使用される対称鍵のことです。ネットワークを介したやり取りにおいて、ある一定の「セッション」(例:ブラウザとサーバ間のTLS接続、SSH接続、VPNトンネルなど)に限って暗号化・復号・認証に用いられます。セッション鍵を用いることで、通信の機密性と完全性を高速かつ効率的に保てます。
なぜセッション鍵が必要か
対称暗号は計算効率が高く、大量データの暗号化に適しているが、鍵配布の問題がある。
公開鍵暗号は鍵配布や認証に有利だが処理コストが高い。そこで公開鍵でセッション鍵を安全に共有し、その後は対称鍵で高速に通信する方式(ハイブリッド暗号)が一般的。
セッション単位で鍵を分けることで、鍵が漏えいした場合の被害範囲を限定できる(鍵のライフタイムを短くするセキュリティ向上)。
セッション鍵が生成・共有される仕組み
一般的な流れは次の通りです。
鍵交換(Key Exchange):Diffie–Hellman(DH)や楕円曲線DH(ECDH/ECDHE)などにより、当事者間で共通の秘密(shared secret)を得る。公開鍵暗号により事前共有された秘密(RSAで暗号化されたプレマスター)を使う実装もあるが、現在はEphemeral DH(E)を使うことが推奨され、PFS(Perfect Forward Secrecy)を実現する。
鍵導出(Key Derivation):得られた共通秘密と双方のランダム値(ClientRandom/ServerRandom等)を入力にして、PRFやHKDFなどの鍵導出関数を用いて実際に使うセッション鍵群(暗号鍵、認証鍵、初期化ベクトルなど)を生成する。TLSでは仕様ごとにPRFやHKDFが定義されている。
使用:生成した対称セッション鍵でデータの暗号化(AES-GCMやChaCha20-Poly1305などのAEAD)やメッセージ認証を行う。
TLSにおけるセッション鍵の具体例
TLS(HTTPSの基礎)を例にすると、TLS 1.2ではクライアントとサーバがプレマスターシークレットを共有し、それを基にPRFでマスターシークレットを作り、さらにそこから暗号・MAC鍵やIVを導出します。TLS 1.3では設計が改善され、暗黙的にDHを用いた一連の鍵導出(HKDF)により「traffic secrets」を生成し、そこからセッション暗号鍵を派生します。TLS 1.3はデフォルトでPFSを提供し、古い脆弱な機能(例えば再交渉による問題)を排した点が特徴です。
セッション鍵と「マスター鍵」「秘密鍵」の違い
秘密鍵(private key):公開鍵暗号の当事者が長期的に保持する鍵。サーバ証明書の秘密鍵などが該当する。
プレマスター/マスターシークレット:鍵交換の過程で生成される中間的な秘密。セッション鍵はこの情報を元に導出される対称鍵群。
セッション鍵:対称暗号で実際の通信を保護するために使われる短命の鍵。
種類と属性:エフェメラル vs スタティック、対称 vs 非対称
セッション鍵自体は基本的に対称鍵ですが、生成に使われる鍵交換方式は非対称(公開鍵)を用いることが多いです。エフェメラル(短命)なDH鍵を用いると、将来そのエフェメラル鍵が漏洩しても過去のセッションが守られる(PFS)。一方でスタティックな鍵を使うと効率は出るが、漏洩時の影響が大きくなることがあります。
セッション管理と再利用(セッション再開)
セッション再開(session resumption)は接続確立コストを下げるための仕組みです。TLS 1.2ではセッションIDやセッションチケット(RFC5077)を使ってセッション状態を再利用しました。TLS 1.3ではPSK(pre-shared key)とチケットを用いた再開が行われ、再開時にも適切な鍵導出を行うことでセキュリティを保ちます。ただし再開用のPSKやチケットの保管・更新ポリシーが弱いと長期的な攻撃対象となるため、有効期限や回数制限を設けることが重要です。
暗号方式と鍵のサイズ、IV/Nonceの取り扱い
現代の標準ではAES-GCM(128/256ビット鍵)やChaCha20-Poly1305が多く使われる。鍵長は128ビット以上が推奨。
AEADを使用する際、IV/Nonceの非再利用(unique per key)が必須。Nonce再利用は重大な暗号破壊につながる。
鍵の長さやアルゴリズムは将来の脅威(量子コンピュータ等)を考慮して選定する必要がある。
セッション鍵のライフサイクルと運用上のベストプラクティス
短命化:セッションごと、または定期的に鍵を交換してライフタイムを短くする。
強力な乱数源:鍵生成には暗号学的に安全な乱数(CSPRNG)を必ず用いる。
PFSの採用:ECDHE等のエフェメラル鍵交換を有効にし、長期秘密鍵が破られても過去通信を守る。
安全なKDF:HKDFや規格化されたPRFを使用して鍵材料を導出する。
セッション再開制御:チケット/PSKの有効期限や復号鍵の保護(HSM等)に気を配る。
ログとモニタリング:異常な再接続や大量のセッション開始を検知する。
よくある脆弱性と注意点
鍵交換アルゴリズムが弱い(例:固定DHの不適切実装)と中間者攻撃や鍵回収のリスクが上がる。
古いプロトコル(SSLv2/3、TLS 1.0/1.1)や弱い暗号スイートを有効にしていると攻撃対象となる。
Nonce/IVの誤使用(再利用や予測可能)はAEADでも致命的。
セッションチケットを暗号化する鍵が漏れると多くのセッションが危険に晒されるため、鍵ローテーションが重要。
実運用での具体例
ウェブサイトのHTTPSでは、初回のTLSハンドシェイクでECDHEにより共有秘密を生成し、HKDFで暗号鍵を導出してセッション中のHTTPデータをAES-GCM等で暗号化する。一定時間後やKeyUpdateにより再鍵交換を行い鍵を更新する。VPNやSSHでも同様にセッション鍵を用いてトンネル内の通信を保護する。
まとめ
セッション鍵は現代のネットワーク暗号化の中核です。公開鍵暗号で安全に共有し、対称暗号で高速に通信を保護するハイブリッド方式は、効率と安全性の両立を実現します。エフェメラル鍵、適切なKDF、AEADの利用、短い鍵ライフサイクル、そして堅牢な乱数源という基本原則を守ることが、セッション鍵運用の鍵です。
参考文献
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
- RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2
- RFC 5869 — HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
- OWASP TLS Cheat Sheet
- NIST — Recommendations for Key Management
- Wikipedia(日本語) — セッション鍵


