はじめに
本書は、BlazeQ キー交換プロトコルについて説明します。BlazeQ は、公開鍵を用いた相互認証を行いながら、2者間で共有秘密鍵を確立する仕組みを提供します。BlazeQ は、ポスト量子セキュリティを確保した前方秘匿性を実現します。
BlazeQ は、非同期環境向けに設計されており、一方の当事者(「Bob」)がオフラインであっても、事前に特定の情報をサーバーに公開することで、もう一方の当事者(「Alice」)がこの情報を活用し、Bob に対して暗号化されたデータを安全に送信し、将来の通信のために共有秘密鍵を確立することができます。
本書は、英語版原文の日本語翻訳版です。技術的な詳細については、英語版をご参照ください。
記法について
本書では以下の記法を使用します。
X || Y は、バイト列 X と Y の連結を表します。
DH(SK, PK) は、楕円曲線ディフィー・ヘルマン(ECDH)演算によって生成される共有秘密を表すバイト列です。SK はある鍵ペアの秘密鍵、PK は別の鍵ペアの公開鍵です。共有秘密はこれら2つの鍵を組み合わせることで導出されます。
SIG(SK, M) は、Ed25519 または Ed448 署名アルゴリズムを使用して秘密鍵 SK でメッセージ M に生成された署名を表します。署名は SK から導出された対応する公開鍵を使って検証できます。
ML-DSA-SIG(SK, M) は、ML-DSA 署名アルゴリズム(ML-DSA-44、ML-DSA-65、または ML-DSA-87)のいずれかを使用して秘密鍵 SK でメッセージ M に生成された署名を表します。
(CT, SS) = ML-KEM-ENC(PK) は、ML-KEM アルゴリズム(鍵サイズに応じて ML-KEM-512、ML-KEM-768、または ML-KEM-1024)によって生成された KEM 暗号文 CT と、公開鍵 PK を使用して暗号文にカプセル化された共有秘密 SS のタプルを表します。
ML-KEM-DEC(SK, CT) は、暗号文のカプセル化に使用された公開鍵 PK に対応する秘密鍵 SK を使用して、PQKEM 暗号文 CT から復号された共有秘密 SS を表します。
役割
BlazeQ プロトコルには、Alice、Bob、サーバーの3つの主要な参加者が存在します。
- Alice — Bob に暗号化データを送信しながら、安全な双方向通信のための共有秘密鍵を確立することを目的とします。
- Bob — Alice などの相手との安全な通信を促進し、共有鍵の確立と暗号化データの送受信を可能にします。ただし、Alice が通信を開始しようとする際、Bob が常にオンラインとは限りません。そのため、Bob はサーバーとの関係を持ちます。
- サーバー — 2つの主要な機能を担います。Alice から Bob へのメッセージを保存し、Bob がオンラインになった際に取得できるようにすること、および Bob が共有鍵確立に必要なデータを公開できるようにすることです。サーバーへの信頼レベルは重要な考慮事項です。
実装においては、サーバーの役割は複数のエンティティに分散されていますが、簡略化のため本プロトコルでは Alice と Bob に対してこれらの機能をすべて実行する単一のサーバーを想定します。
楕円曲線キー
BlazeQ は以下の楕円曲線キーを使用します。
IKa— Alice の楕円曲線アイデンティティ鍵IKb— Bob の楕円曲線アイデンティティ鍵EKa— Alice の楕円曲線エフェメラル鍵LKb— Bob の長期楕円曲線鍵SPKb— Bob の短期事前生成鍵(OPKb1, OPKb2, OPKb3, …)— Bob のワンタイム事前生成鍵のセット
ポスト量子鍵カプセル化キー
BlazeQ は以下のポスト量子鍵を使用します。
PQIKa— Alice のポスト量子アイデンティティ鍵PQIKb— Bob のポスト量子アイデンティティ鍵PQLKb— Bob のポスト量子長期鍵PQSPKb— Bob のポスト量子短期事前生成鍵(PQOPKb1, PQOPKb2, PQOPKb3, …)— Bob のポスト量子ワンタイム事前生成鍵のセット
プロトコルの概要
BlazeQ は3つのフェーズで構成されます。
- Bob は楕円曲線アイデンティティ鍵、ポスト量子アイデンティティ鍵、楕円曲線事前生成鍵、ポスト量子事前生成鍵をサーバーに公開します。
- Alice はサーバーからアイデンティティ鍵と「事前生成鍵バンドル」を取得し、Bob への初回メッセージ送信に使用します。
- Bob は Alice の初回メッセージを受信・処理します。
鍵の公開
Bob はサーバーに以下の楕円曲線鍵のセットを公開します。
- Bob の楕円曲線アイデンティティ鍵
IKb - Bob の署名付き楕円曲線長期鍵とその識別子
(LKb, Id(LKb)) - 楕円曲線長期鍵への Bob の署名
SIG(IKb, LKb) - Bob の署名付き楕円曲線短期事前生成鍵とその識別子
(SPKb, Id(SPKb)) - 楕円曲線短期事前生成鍵への Bob の署名
SIG(IKb, SPKb) - Bob の楕円曲線ワンタイム事前生成鍵のセットとその識別子
(OPKb1, OPKb2, OPKb3, …) - 楕円曲線署名付きワンタイム事前生成鍵への Bob の署名のセット
(SIG(IKb, OPKb1), SIG(IKb, OPKb2), SIG(IKb, OPKb3), …)
Bob はサーバーに以下のポスト量子鍵のセットを公開します。
- Bob のポスト量子アイデンティティ鍵
PQIKb - Bob の署名付きポスト量子長期鍵とその識別子
(PQLKb, Id(PQLKb)) - ポスト量子長期鍵への Bob の署名
ML-DSA-SIG(PQIKb, PQLKb) - Bob の署名付きポスト量子短期事前生成鍵とその識別子
(PQSPKb, Id(PQSPKb)) - ポスト量子短期事前生成鍵への Bob の署名
ML-DSA-SIG(PQIKb, PQSPKb) - Bob のポスト量子ワンタイム事前生成鍵のセットとその識別子
(PQOPKb1, PQOPKb2, PQOPKb3, …) - 署名付きポスト量子ワンタイム事前生成鍵への Bob の署名のセット
(ML-DSA-SIG(PQIKb, PQOPKb1), ML-DSA-SIG(PQIKb, PQOPKb2), ML-DSA-SIG(PQIKb, PQOPKb3), …)
メッセージの送信
Alice は Bob との BlazeQ 鍵交換を開始するため、サーバーに接続して「事前生成鍵バンドル」を取得します。
事前生成鍵バンドルには以下の楕円曲線鍵が含まれます。
- Bob の楕円曲線アイデンティティ鍵
(IKb) - Bob の署名付き楕円曲線長期鍵とその識別子
(LKb, Id(LKb)) - 楕円曲線長期鍵への Bob の署名
SIG(IKb, LKb) - Bob の署名付き楕円曲線短期事前生成鍵とその識別子
(SPKb, Id(SPKb)) - 楕円曲線短期事前生成鍵への Bob の署名
SIG(IKb, SPKb) - Bob の署名付き楕円曲線ワンタイム事前生成鍵とその識別子
(OPKb, Id(OPKb)) - 楕円曲線ワンタイム事前生成鍵への Bob の署名
SIG(IKb, OPKb)
事前生成鍵バンドルには以下のポスト量子鍵も含まれます。
- Bob のポスト量子アイデンティティ鍵
(PQIKb) - Bob の署名付きポスト量子長期鍵とその識別子
(PQLKb, Id(PQLKb)) - ポスト量子長期鍵への Bob の署名
ML-DSA-SIG(PQIKb, PQLKb) - Bob の署名付きポスト量子短期事前生成鍵とその識別子
(PQSPKb, Id(PQSPKb)) - ポスト量子短期事前生成鍵への Bob の署名
ML-DSA-SIG(PQIKb, PQSPKb) - Bob の署名付きポスト量子ワンタイム事前生成鍵とその識別子
(PQOPKb, Id(PQOPKb)) - ポスト量子ワンタイム事前生成鍵への Bob の署名
ML-DSA-SIG(PQIKb, PQOPKb)
サーバーは利用可能な Bob のワンタイム事前生成鍵のうち1つを提供し、使用後に削除します。Bob のワンタイム事前生成鍵がすべて削除されている場合、バンドルにはワンタイム事前生成要素は含まれません。
Alice は、利用可能な Bob の署名付きワンタイム事前生成鍵の使用を優先します。サーバー上の Bob の署名付きワンタイム事前生成鍵がすべて使用済みの場合、Alice は Bob の短期署名付き事前生成鍵を使用します。
Alice は事前生成鍵の署名を検証します。署名検証に失敗した場合、Alice はプロトコルを中止します。すべての署名チェックが通過した場合、Alice はエフェメラル楕円曲線鍵 EKa を生成し、以下を計算します。
DH1 = DH(LKa, LKb)DH2 = DH(EKa, LKb)DH3 = DH(EKa, OPKb)(OPKb が存在する場合)、存在しない場合はDH3 = DH(EKa, SPKb)DH4 = DH(LKa, OPKb)(OPKb が存在する場合)、存在しない場合はDH4 = DH(LKa, SPKb)
Alice は、利用可能な Bob のワンタイム事前生成鍵を使用してポスト量子カプセル化共有秘密を生成します。利用可能な鍵がない場合は、Bob の短期事前生成鍵を使用します。並行して、Alice は Bob の長期鍵を使用してポスト量子カプセル化共有秘密も生成します。
(CT1, SS1) = ML-KEM-ENC(PQLKb)(CT2, SS2) = ML-KEM-ENC(PQOPKb)(PQOPKb が存在する場合)、存在しない場合は(CT2, SS2) = ML-KEM-ENC(PQSPKb)
最後に、Alice は鍵導出関数 KDF を使用して共有鍵 SK を計算します。
SK = KDF(DH1 || DH2 || DH3 || DH4 || SS1 || SS2)
Alice は Bob に以下を含む初回メッセージを送信します。
- Alice の楕円曲線アイデンティティ鍵
IKa - Alice の楕円曲線長期鍵
LKa - Alice の楕円曲線エフェメラル鍵
EKa - それぞれ
SS1とSS2をカプセル化するポスト量子暗号文CT1とCT2 - ポスト量子暗号文への Alice の署名:
ML-DSA-SIG(PQIKa, CT1)、ML-DSA-SIG(PQIKa, CT2) - Alice が使用した Bob の事前生成鍵を示す識別子
- SK から導出された暗号鍵と AD を関連データとして使用した AES-GCM で暗号化された初回暗号文
メッセージの受信
Bob は Alice の初回メッセージから以下の値を取得します。
- Alice の楕円曲線アイデンティティ鍵
(IKa) - Alice の楕円曲線長期鍵
(LKa) - Alice の楕円曲線エフェメラル鍵
(EKa) - ポスト量子暗号文
(CT1, CT2) - Alice が使用した事前生成鍵の識別子
- AEAD 暗号化された初回暗号文
Bob は、Alice が使用した事前生成鍵が自身がサーバーに提供したものと一致することを検証します。識別子がワンタイム鍵に対応する場合、Bob はその鍵が以前に使用されていないことを確認し、セッション後に削除します。ワンタイム鍵が利用できない場合、Bob は Alice が自身の短期鍵を使用したことを確認します。
Bob は必要なディフィー・ヘルマン共有秘密を計算します。
DH1 = DH(LKb, LKa)DH2 = DH(LKb, EKa)DH3 = DH(OPKb, EKa)(OPKb が存在する場合)、存在しない場合はDH3 = DH(SPKb, EKa)DH4 = DH(OPKb, LKa)(OPKb が存在する場合)、存在しない場合はDH4 = DH(SPKb, LKa)
Bob はポスト量子カプセル化共有秘密を復号します。
SS1 = ML-KEM-DEC(PQLKb, CT1)SS2 = ML-KEM-DEC(PQOPKb, CT2)(PQOPKb が存在する場合)、存在しない場合はSS2 = ML-KEM-DEC(PQSPKb, CT2)
Bob は鍵導出関数 KDF を使用して共有鍵を導出します。
SK = KDF(DH1 || DH2 || DH3 || DH4 || SS1 || SS2)
セキュリティ考慮事項
BlazeQ プロトコルのセキュリティは、量子攻撃者が存在する環境においても、安全な鍵確立と前方秘匿性を確保するよう慎重に設計されています。本プロトコルは古典的な楕円曲線ディフィー・ヘルマン(ECDH)とポスト量子鍵カプセル化機構(PQKEM)の両方を活用しますが、プロトコルのセキュリティを支える潜在的な攻撃ベクトルと前提条件を考慮することが重要です。
BlazeQ は、楕円曲線ベースの鍵交換(ECDH)とポスト量子 KEM を組み合わせたハイブリッドアプローチを使用することで、ポスト量子前方秘匿性を保証します。鍵確立プロセスには、古典的なディフィー・ヘルマン問題と KEM のポスト量子セキュリティ前提条件の両方を解く必要があり、どちらのコンポーネントを標的とした量子攻撃に対しても強い耐性を提供します。
認証
BlazeQ は、楕円曲線署名とポスト量子暗号署名を組み合わせたデュアル署名アプローチを採用することで、Alice と Bob の相互認証を保証します。このハイブリッドメカニズムにより、量子能力を持つ攻撃者に対しても堅牢な認証が確保されます。ただし、鍵交換の前後に、Alice と Bob はアウト・オブ・バンドの方法(例:指紋比較や QR コードスキャン)によって互いのアイデンティティを独自に認証する必要があります。
そのような方法が採用されない場合、特に悪意のあるサーバーや中間者攻撃が存在する状況では、プロトコルは通信相手が誰であるかを保証しません。
否認防止
BlazeQ は暗号学的否認性をサポートします。これは、参加者が通信内容の暗号学的証拠や通信が行われたという証拠を提供しないことを意味します。
本プロトコルはオフライン否認性を目指しており、第三者(例:裁判官)が参加者の秘密鍵の一つへのアクセスを取得した場合でも、トランスクリプトのみに基づいて通信が行われたことを証明することはできません。この特性は、一方の当事者が後に関与を否定する必要がある状況での通信において重要です。
量子攻撃者の場合における否認性は引き続き課題です。将来の改訂では、量子安全な否認性を提供するメカニズムが導入される可能性があります。
前方秘匿性
BlazeQ の前方秘匿性は、エフェメラル鍵とワンタイム事前生成鍵の使用によって保証されます。参加者の長期秘密鍵が将来的に漏洩した場合でも、過去のセッション鍵(SK)は安全に保たれます。これは、ワンタイム事前生成鍵を使用後に削除し、エフェメラル鍵を使用してセッション鍵を確立することで実現されます。
鍵漏洩の場合、エフェメラル鍵と事前生成鍵が適切に管理されている限り、セッション鍵は保護されます。本プロトコルは、関連するワンタイム鍵またはエフェメラル鍵が再利用または露出されない限り、当事者の秘密鍵が後に漏洩した場合でも前方秘匿性を提供します。
鍵の漏洩対策
鍵漏洩シナリオは重大なセキュリティリスクをもたらしますが、BlazeQ はこれらのリスクを軽減するための戦略を組み込んでいます。参加者の秘密鍵の漏洩は、なりすましや過去の通信のセッション鍵の漏洩につながる可能性があります。ただし、本プロトコルは漏洩した鍵が将来の通信のセキュリティを直ちに損なわないことを保証します。
アイデンティティ鍵の漏洩:参加者のアイデンティティ鍵(例:IKa または PQIKa)が漏洩した場合、将来のセッションでの認証能力に影響します。ただし、エフェメラル鍵または事前生成鍵が露出していない限り、過去のセッションのセッション鍵は安全に保たれます。
事前生成鍵の漏洩:事前生成鍵(例:SPKb、PQSPKb)の漏洩は、これらの事前生成鍵を使用した過去のセッション鍵を潜在的に危険にさらす可能性があります。事前生成鍵の頻繁なローテーションとラチェットプロトコルの使用により、セッション鍵を頻繁に更新することでこのリスクを軽減できます。
ワンタイム事前生成鍵の漏洩:攻撃者がセッション中またはセッション後にワンタイム事前生成鍵(例:OPKb または PQOPKb)を漏洩させた場合、その特定のセッションにのみ影響します。ただし、これらの鍵は使用後に削除されるため、攻撃者はそれらを再使用できず、影響は単一のセッションに限定されます。
受動的量子攻撃者
BlazeQ は、楕円曲線上の離散対数を計算できる量子コンピュータを持つ攻撃者による「今収集して後で解読する」攻撃のリスクを軽減するよう特別に設計されています。BlazeQ のセキュリティは主にポスト量子鍵交換メカニズム(PQKEM)に基づいていますが、AEAD がポスト量子 IND-CPA および INT-CTXT セキュリティを提供する能力にも依存しています。
- 量子耐性の公開鍵保護:攻撃者が公開データと Alice から Bob への送信メッセージを記録していた場合、量子コンピュータへのアクセスがあってもセッションの秘密鍵(SK)を危険にさらすことはできません。
- ワンタイム事前生成鍵のセキュリティ:ポスト量子鍵カプセル化のワンタイム事前生成鍵(PQOPKB)がプロトコルセッションで使用され、使用後に適切に削除された場合、将来量子コンピュータにアクセスしても攻撃者は SK を復元できません。
- ワンタイム事前生成鍵が使用されない場合の影響:プロトコル実行中にポスト量子ワンタイム事前生成鍵が使用されなかった場合、量子コンピュータへのアクセスと PQSPKB の秘密鍵の漏洩により、そのセッションで計算された SK が潜在的に明らかになる可能性があります。事前生成鍵の頻繁なローテーションとラチェットプロトコルの使用により、このリスクを軽減することを推奨します。
能動的量子攻撃者
BlazeQ は、能動的量子攻撃者に対する防御のために特別に設計されています。楕円曲線上の離散対数を計算できる量子コンピュータを持つ能動的攻撃者は、すべての楕円曲線鍵に対して DH(PK1, PK2) および Sig(PK, M) を計算できます。しかし、BlazeQ はポスト量子署名を含むポスト量子暗号技術を組み込んでおり、量子コンピュータを持っていても攻撃者が Alice または Bob になりすますことはできません。
Bob になりすまそうとする悪意のあるサーバーの場合、BlazeQ は Bob がポスト量子アイデンティティ鍵を使用してポスト量子事前生成鍵に署名できるようにし、Alice が実際に Bob と通信していることを暗号学的に検証できるようにします。これにより、量子能力を持つ攻撃者による中間者攻撃を防ぎます。
さらに、BlazeQ は相互認証を保証します。これにより、Alice と Bob の両者が互いのアイデンティティを確認できます。この相互認証は、ポスト量子署名の使用によって実現され、交換された鍵の整合性を保護し、攻撃者が通信を偽造または改ざんすることを防ぎます。
おわりに
BlazeQ は、量子時代に向けたセキュアな鍵交換プロトコルを提供します。本プロトコルは、既存の楕円曲線ベースの技術とポスト量子暗号技術を組み合わせることで、耐量子セキュリティを実現します。今後の研究により、さらなる最適化やセキュリティ強化が見込まれます。