ハイブリッドPQCと暗号アジリティ
PQCへ一気に乗り換える怖さを、古典鍵交換との併用で消せる。X25519+ML-KEMのKEM結合子がなぜ安全か、TLSでの鍵共有の実際の載せ方、そしてアルゴリズムを設定として扱う暗号アジリティ設計まで、構造から判断できるようになります。
- ハイブリッドPQCは古典KEM(X25519)とPQ KEM(ML-KEM)の共有鍵を結合子(combiner)で1本に混ぜる方式。片方が破れても最終鍵は漏れないので、PQCの未知の欠陥と量子計算機の両方に同時に備えられる。
- 結合子はただの連結ではなくKDFで束ねる。両入力を鍵導出に取り込む構成にすると、片方のKEMがIND-CCA安全なら全体もIND-CCA安全という頑健性(robustness)が保証され、ダウングレード耐性も得られる。
- 暗号アジリティは、アルゴリズムをコードに埋めず識別子(TLSならX25519MLKEM768=0x11EC)として交渉し、差し替え境界を局所化する設計。これが無いとPQC移行のたびにプロトコルごと作り直すことになる。
なぜ「ハイブリッド」なのか:二つの異なる賭けを同時にヘッジする
ポスト量子暗号(PQC)への移行で、ML-KEM 単独に乗り換えず古典方式と併用するのがハイブリッド PQC です。動機は二つのリスクを別々にヘッジする点にあります。第一に、量子計算機(CRQC)が完成すれば X25519 や RSA のような古典鍵交換は Shor のアルゴリズムで破れる。第二に、ML-KEM のような格子ベース KEM は標準化されて日が浅く、実装バグや未知の解読法が残る可能性がある。この二つは性質がまったく違う賭けです。
横にスクロール
ハイブリッドは、両者の共有鍵(shared secret)を一本のセッション鍵へ結合することで、「どちらか一方が破れても最終鍵は安全」という状態を作ります。古典側に欠陥が出れば PQC 側が、量子計算機が来れば古典側に代わって PQC 側が守る。移行という不確実な時期を渡り切るための冗長構成であり、PQC が枯れたと確信できるまでの保険です。移行の時間軸や優先順位そのものは 量子耐性移行戦略 で扱うので、本稿は結合の中身の正しさとアジリティの設計に踏み込みます。
KEM(Key Encapsulation Mechanism、鍵カプセル化)は「公開鍵で対称鍵の種を封じて相手に渡す」部品で、三つの操作からなります。KeyGen で鍵ペアを生成、Encaps(pk) で共有鍵 ss とカプセル ct を作り、受信側が Decaps(sk, ct) で同じ ss を復元します。ML-KEM(FIPS 203)は格子(Module-LWE)を基盤とする KEM で、X25519 も「一時公開鍵を渡し合う」形にすれば KEM として抽象化できます。KEM-DEM の一般論は ハイブリッド暗号と KEM-DEM、格子の困難性は 格子暗号とLWE を参照してください。
結合子(combiner):連結ではなくKDFで束ねる理由
ハイブリッドの核心は、二つの共有鍵をどう一本にするかを担う KEM 結合子(combiner) です。素朴には「二つを連結して終わり」に見えますが、そのままでは危うい。正しい構成は、両方の共有鍵を鍵導出関数(KDF)の入力に取り込むことです。
ss = KDF( ss_classical || ss_pq || context )
# ss_classical : X25519 の共有鍵
# ss_pq : ML-KEM の Decaps 出力
# context : 交渉内容やカプセル等を束ねる文脈情報
ここで結合子に求められる性質が robustness(頑健性) です。定義はこうです――二つの入力 KEM のうち少なくとも一方が IND-CCA 安全なら、結合後の KEM 全体も IND-CCA 安全である。これが成り立てば、片方の KEM がまるごと破れても最終鍵の秘匿は崩れません。ハイブリッドの安全性主張はこの一点に懸かっています。
二つの共有鍵を単に ss_a XOR ss_b で混ぜる構成は、片方の KEM が能動的攻撃(選択暗号文攻撃)に対して可鍛(malleable)だと危険です。攻撃者が一方のカプセルを細工して ss_a を予測可能な差分にずらせれば、XOR で他方の寄与を打ち消せてしまう。KDF(内部は HMAC のような dual-PRF)で束ねる構成は、どちらの入力を固定しても出力が擬似ランダムになるため、片側を攻撃者が操作しても全体は予測できません。加えて結合子には ss だけでなくカプセル ct や公開鍵も KDF に含めるのが安全側の作法です。ML-KEM 自体は Fujisaki-Okamoto 変換で内部的に再暗号化して復号の一貫性を検証し IND-CCA を得ますが、結合の外側でも文脈を縛ることでバインディングを補強します。
この頑健性がそのままダウングレード耐性にもつながります。中間者が交渉を細工して PQ 側の寄与を無効化しようとしても、ss_pq が KDF 入力に入っている限り、攻撃者が ss_pq を知らなければ最終鍵は導けません。逆に言えば、結合子が両入力を確実に取り込む設計であることが、移行期に古典のみへ落とされる事故を構造で防ぐ前提になります。交渉の改ざん検知(ネゴシエーション完全性)そのものは 暗号アジリティとバージョン交渉 を参照してください。
TLSでのハイブリッド鍵共有:識別子と載せ方
では実際の TLS 1.3 でどう運ぶか。TLS の鍵交換は key_share 拡張で行われ、対応する群(group)を名前付き識別子で示します。ハイブリッドは古典群でも純 PQC 群でもなく、両者を合成した専用のコードポイントとして登録されます。代表が X25519MLKEM768(IANA 割当 0x11EC)です。
ClientHello
supported_groups = [ X25519MLKEM768(0x11EC), X25519(0x001D), ... ]
key_share:
X25519MLKEM768 -> (ML-KEM-768 公開鍵 ‖ X25519 公開鍵) # 連結して1つの share
ServerHello
key_share:
X25519MLKEM768 -> (ML-KEM-768 カプセル ‖ X25519 公開鍵)
ポイントは二つあります。第一に、ハイブリッドは独立した暗号スイート識別子として交渉に載る――これは暗号アジリティの「追加」能力そのものです。第二に、key_share の中身は二つの鍵材料を決まった順序で連結したバイト列であり、連結順序(X25519MLKEM768 では ML-KEM が先、X25519 が後)は仕様で固定されます。順序を取り違えれば相手と鍵が一致しません。導出された ss_classical と ss_pq は、上述の結合子を通して TLS の鍵スケジュール(HKDF ベース)に注入されます。TLS のレコード保護や鍵スケジュールの流れは TLSレコード層 を参照してください。
| 観点 | 古典のみ (X25519) | ハイブリッド (X25519MLKEM768) |
|---|---|---|
| 群コードポイント | 0x001D | 0x11EC(合成群) |
| ClientHello share | X25519 公開鍵 32B | ML-KEM pk 1184B + X25519 32B |
| ServerHello share | X25519 公開鍵 32B | ML-KEM ct 1088B + X25519 32B |
| 量子耐性 | 無し(Shor で破れる) | 有り(PQ 側が担保) |
| 古典欠陥への耐性 | - | 有り(古典側が担保) |
ML-KEM-768 の公開鍵は約 1184 バイト、カプセルは約 1088 バイトです。これがハイブリッド key_share に乗ると ClientHello 単体で初期輻輳ウィンドウや MTU を超え、複数レコードへの分割や往復増を招きます。一部の中間装置(ミドルボックス)は「大きすぎる・分割された ClientHello」を想定しておらず接続を落とすことがあり、これは古典 TLS では顕在化しなかった実装非互換です。移行では性能だけでなく経路上の機器の許容度を検証する必要があります。
暗号アジリティ:アルゴリズムを「資産」でなく「設定」にする
ハイブリッドをこれほど滑らかに導入できるのは、TLS が最初から暗号アジリティ――アルゴリズムを後から差し替えられる設計――を持っていたからです。アジリティの本質は、RSA や ML-KEM のような具体アルゴリズムをコードに埋め込まず、識別子として交渉で選ぶ一段の抽象化にあります。アルゴリズムは計算機の高速化・解読法の進歩・量子計算機によって必ず老いるので、これが無い設計は危殆化のたびにプロトコルごと作り直す羽目になります。
(1) 識別と交渉:両端が対応アルゴリズムを ID で列挙し、共通かつ最強のものを選べる(TLS の supported_groups)。(2) 追加と削除:新方式を足し、危殆化した方式を無効化できる(X25519MLKEM768 を足し、旧群を切る)。(3) 境界の局所化:暗号処理を差し替え可能なモジュールに閉じ込め、鍵長やフォーマットをアプリ本体にハードコードしない。ハイブリッド PQC 移行は、この三条件がすべて働くアジリティの実地試験です。
設計上の要点は、アルゴリズム固有の定数をコードから追い出すことです。共有鍵の長さ、カプセルサイズ、公開鍵フォーマットをハードコードした実装は、ML-KEM のようにサイズが古典方式より1〜2桁大きい方式を後から入れられません。移行に強いコードは、鍵材料を可変長のバイト列として抽象化し、群 ID からサイズやパーサを引くレジストリ(対応表)を持ちます。こうしておけば、将来 ML-KEM が別方式に置き換わっても、レジストリへの追加とネゴシエーションの更新だけで済みます。
ハイブリッド PQC で問われる典型は三点です。(1) なぜ併用か――PQC の未知の欠陥(実装・解読)と量子計算機という異なる二つのリスクを同時にヘッジするため。(2) 結合子の頑健性――片方の入力 KEM が IND-CCA 安全なら全体も安全、を満たす KDF ベースの結合が必須で、単純 XOR では能動攻撃に弱い。(3) アジリティの三条件――識別/交渉・追加/削除・境界の局所化。「ハイブリッド群が新しい暗号スイート識別子として交渉に載る」ことが、アジリティの実例として狙われます。
まとめ
ハイブリッド PQC は、古典 KEM(X25519)と PQ KEM(ML-KEM)の共有鍵を結合子で一本に混ぜる方式です。狙いは、量子計算機による古典鍵交換の崩壊と、新しい格子暗号の未知の欠陥という二つの異質なリスクを同時にヘッジすること。片方が破れても最終鍵は守られます。
結合子は生の連結や XOR ではなく KDF で両入力を束ねるのが正解で、これにより「一方の入力 KEM が IND-CCA 安全なら全体も安全」という頑健性と、移行期のダウングレード耐性が得られます。TLS ではハイブリッドが X25519MLKEM768(0x11EC)という専用コードポイントで交渉に載り、key_share は決まった順序で連結した鍵材料を運びます。ML-KEM の 1KB 超の鍵材料による ClientHello 肥大が最大の実装課題です。
そしてこれらを支えるのが暗号アジリティ――アルゴリズムを識別子として交渉し、追加・削除でき、差し替え境界を局所化する設計です。鍵長やフォーマットをハードコードしない実装だけが、PQC 移行も将来の標準更新も安価に渡り切れます。移行の順序は 量子耐性移行戦略、交渉とダウングレード防御は 暗号アジリティとバージョン交渉、原理の土台は ハイブリッド暗号と KEM-DEM と 格子暗号とLWE を合わせて押さえてください。
セキュリティの記事ガイド
ハイブリッドPQCと暗号アジリティを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ポスト量子暗号
比較で見る軸
難易度: advanced / カテゴリ: セキュリティ / タグ数: 6
導入後に効く点
結合子はただの連結ではなくKDFで束ねる。両入力を鍵導出に取り込む構成にすると、片方のKEMがIND-CCA安全なら全体もIND-CCA安全という頑健性(robustness)が保証され、ダウングレード耐性も得られる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- セキュリティ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ポスト量子暗号 / ML-KEM」に近いか確認する。
- 強みである「ハイブリッドPQCは古典KEM(X25519)とPQ KEM(ML-KEM)の共有鍵を結合子(combiner)で1本に混ぜる方式。片方が破れても最終鍵は漏れないので、PQCの未知の欠陥と量子計算機の両方に同時に備えられる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。