共有シークレット
(shared secret から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/03/11 12:44 UTC 版)
共有シークレット(きょうゆうシークレット、英: shared secret)とは、複数の通信当事者だけが共有する秘密値である。暗号理論および情報セキュリティでは、事前に安全な経路で共有される場合と、鍵共有プロトコルの実行結果として新たに生成される場合がある。共有シークレットは、そのまま共通鍵暗号やメッセージ認証符号の鍵として使われることもあるが、多くの場合は鍵導出関数に入力され、暗号鍵やセッション鍵などの鍵素材へ変換される。[1][2]
概要
共有シークレットは、暗号通信において通信当事者だけが知る秘密情報を指す。これは、あらかじめ当事者間で共有された事前共有鍵(PSK)のような形を取ることもあれば、ディフィー・ヘルマン鍵共有のような鍵共有方式の出力として得られることもある。NISTは鍵共有を、当事者間で共有された秘密の鍵素材を得るための手続きとして位置づけている。[1][3]
共有シークレットは最終的な通信鍵と同一とは限らない。多くのプロトコルでは、共有シークレットから鍵導出関数により暗号化鍵、完全性保護鍵、初期化用の秘密値などを派生させる。HKDFを定義するRFC 5869は、このような入力鍵素材から利用目的に応じた鍵を導出するための一般的な方法を規定している。[2]
生成方法
共有シークレットの生成方法は大きく分けて、事前共有と鍵共有プロトコルによる生成の二つがある。
- 事前共有
- 共有シークレットが通信や認証の開始前に安全な経路を通じて配布されている場合、それは事前共有鍵(PSK)と呼ばれる。PSKは、無線LAN、VPN、組み込み機器間通信、TLSの一部運用などで用いられる。TLS 1.3では`pre_shared_key`拡張が規定されており、再接続や外部PSKによる認証に利用できる。[4]
- 鍵共有プロトコルによる生成
- 共有シークレットは、鍵共有プロトコルの実行結果として新たに生成されることもある。典型例はディフィー・ヘルマン鍵共有であり、通信当事者は公開値を交換することで、通信路上に直接送信されない共有秘密を得る。この共有秘密は、その後に鍵導出関数へ入力されて実際の暗号鍵に変換される。NISTの鍵共有勧告でも、共有秘密から鍵導出を行う構造が採用されている。[3][2]
また、認証サーバを介して秘密値を共有する方式もある。たとえばKerberosでは、利用者と認証サーバ、あるいはサービスと認証サーバの間で保持される共有秘密が認証およびセッション鍵配布の前提となる。
鍵導出との関係
共有シークレットは、そのまま暗号鍵として使うよりも、鍵導出関数を通じて用途別の鍵素材に変換して用いられることが多い。 RFC 5869で定義されるHKDFは、共有秘密のような入力鍵素材から、抽出(extract)と展開(expand)の二段階で鍵を導出する方式である。これにより、同じ共有シークレットから複数の鍵を安全に分離し、異なる用途に割り当てることができる。[5]
TLS 1.3も、PSKやDiffie–Hellmanから得られる共有秘密を直接通信鍵にせず、HKDFベースの鍵スケジュールに組み込んで複数の段階的な秘密値を導出する。[4]
利用例
共有シークレットは、暗号化・認証・セッション管理などの多くの用途で用いられる。
- 事前共有鍵方式
- 事前に共有された秘密値を使って通信相手を認証し、その後の暗号通信に必要な鍵を導出する。TLS 1.3のPSKモードはその一例である。[4]
- ディフィー・ヘルマン鍵共有
- 公開値の交換により共有シークレットを得て、それをセッション鍵へ変換する。共有秘密そのものは通信路上に直接送信されない。[3]
- 再接続・セッション再開
- TLS 1.3では、過去の接続から得たPSKを用いてセッション再開を行うことができる。[4]
- Web APIやサービス間認証
- APIキーや共有トークンのように、通信当事者だけが知る秘密値を認証に用いる構成がある。これらは広義には共有シークレットの一種として扱えるが、実際には鍵管理・更新・用途制限の設計が重要である。
セキュリティ上の論点
共有シークレットの安全性は、その生成方法、配布方法、エントロピー、保存方法に大きく依存する。事前共有された秘密値が漏洩した場合、当事者認証と通信機密性の両方が損なわれる可能性がある。また、低エントロピーのパスワードを共有シークレットの代わりに使うと、辞書攻撃や総当たり攻撃に弱くなる。[4][6]
IETFのTLS PAKE草案は、TLS 1.3 のPSK機構は人間が入力するような低エントロピー秘密には適さないと述べており、そのような場合にはパスワード認証鍵共有(PAKE)のような別方式が必要になる。[6]
また、共有シークレットを長期間固定のまま使い続けると、漏洩時の影響範囲が大きくなるため、鍵更新や期限管理が重要になる。TLS 1.3は、外部PSKに加えて`psk_dhe_ke`のように一時的な鍵共有と組み合わせる方式も規定している。[4][7]
関連項目
- 事前共有鍵
- 鍵共有
- ディフィー・ヘルマン鍵共有
- 鍵導出関数
- HKDF
- TLS
- Kerberos
脚注
- ^ a b “NIST Publishes Updates to SP 800-56A and 800-56C”. CSRC. NIST (2018年4月16日). 2026年3月7日閲覧。
- ^ a b c Krawczyk, Hugo; Eronen, Pasi (May 2010). HMAC-based Extract-and-Expand Key Derivation Function (HKDF) (英語). doi:10.17487/RFC5869. RFC 5869.
- ^ a b c “SP 800-56: Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography”. CSRC. NIST. 2026年3月7日閲覧。
- ^ a b c d e f Rescorla, Eric (August 2018). The Transport Layer Security (TLS) Protocol Version 1.3 (英語). doi:10.17487/RFC8446. RFC 8446.
- ^ Krawczyk, Hugo; Eronen, Pasi (May 2010). HMAC-based Extract-and-Expand Key Derivation Function (HKDF) (英語). doi:10.17487/RFC5869. RFC 5869.
- ^ a b “A Password Authenticated Key Exchange Extension for TLS 1.3”. IETF Datatracker (2025年3月2日). 2026年3月7日閲覧。
- ^ DeKok, Alan (June 2025). Operational Considerations for Using TLS Pre-Shared Keys (TLS-PSKs) with RADIUS (英語). doi:10.17487/RFC9813. RFC 9813.
- 共有シークレットのページへのリンク