CRYPTOGRAPHY / POST-QUANTUM
耐量子暗号(PQC)とは?RSA・量子コンピュータの脅威からML-KEMの仕組みまで図解
量子コンピュータが普及しても、今の暗号は安全なのか?
公開鍵と秘密鍵の違いから、量子計算が壊し得る仕組み、標準化された耐量子暗号、実際の鍵確立プロトコルまで順番にたどります。
耐量子暗号の仕組みを基礎から解説。共通鍵・公開鍵・電子署名、量子計算によるRSAへの影響、NISTのML-KEM・ML-DSA、TLSでの鍵共有、QKDとの違いを図解と操作デモで学びます。
1. そもそも暗号は何を守っているのか
A. 共通鍵暗号(AESなど)
送信者
秘密の共通鍵 K で平文を暗号化
受信者
同じ K で復号・認証。Kを安全に共有する仕組みが必要
B. 公開鍵を使う鍵確立(KEMの例)
受信者
公開鍵 pk と秘密鍵 sk を生成。pkだけ公開
双方で同じ共有秘密を取得
skや共有秘密そのものを通信路に流さない
暗号化/鍵確立/電子署名は異なる機能です。KEMだけでは相手の本人確認はできないため認証を組み合わせます。
「暗号化」は、第三者に読み取られたくない情報を、鍵なしでは意味を理解しにくいデータへ変換する処理です。一方、デジタル署名は送信者の正当性やデータの改ざんを検証するための仕組みです。目的が違うため、利用するアルゴリズムも区別します。
共通鍵暗号
例:AES-GCM
送信側
同じ秘密鍵 K で平文を暗号化
受信側
同じ秘密鍵 K で復号・検証
高速で大量データ向き。ただし、通信前に同じ秘密鍵を安全に共有する必要があります。
公開鍵暗号/公開鍵方式
公開鍵と秘密鍵のペア
公開鍵 pk
相手に渡してよい。暗号化や鍵確立、署名検証などに使う
秘密鍵 sk
本人だけが保持。復号・鍵復元・署名作成などに使う
公開鍵を配布できる利点がありますが、実際の機能は暗号化・鍵確立・署名の方式によって異なります。
鍵・署名・ハッシュを混同しない
- 平文 / 暗号文
- 暗号化前のデータ/暗号化後のデータ。暗号文は原則として復号鍵がないと読めません。
- 公開鍵 / 秘密鍵
- 鍵ペアのうち公開してよい情報/厳重に保持する情報。公開鍵から秘密鍵を求めにくいように設計します。
- デジタル署名
- 秘密鍵で署名を作り、公開鍵で検証します。データの秘匿そのものは提供しません。
- ハッシュ関数
- 入力データから固定長の値(ダイジェスト)を計算します。通常の暗号化と異なり、復号する操作はありません。
2. 量子コンピュータは何を変えるのか
現在広く使われてきたRSAは、大きな整数の素因数分解が困難であることを安全性の基礎としています。楕円曲線暗号(ECC)は、楕円曲線上の離散対数問題の難しさに依存します。いずれも、十分大規模で誤り訂正された量子コンピュータが実現した場合、ショアのアルゴリズムによる脅威を受けます。
ショアのアルゴリズム:小さな数で原理をイメージ
教材用の小さな整数であり、実際のRSAの鍵サイズではありません
公開される数
N = 15
素因数分解
15 = 3 × 5
秘密に関係する情報
大きなNの因数が分かるとRSAの秘密鍵計算に影響
15は暗算で分解できます。しかし実際のRSAでは何百桁もの整数を使います。ショアのアルゴリズムは量子計算を用いて、こうした問題を古典計算機の既知の一般的手法より効率的に解くアルゴリズムです。現在の一般的な量子デバイスで実用的なRSA鍵を容易に破れる、という意味ではありません。
公開鍵方式:RSA / ECDH / ECDSA など
量子計算により、素因数分解や離散対数問題への依存が長期的な問題となる
共通鍵方式:AESなど
ショアのアルゴリズムで同じように破られるわけではない。グローバーのアルゴリズムなどを考慮した鍵長選択が必要
盗聴した暗号文を今保存しておき、将来より強力な量子コンピュータで復号を狙う考え方を「Harvest Now, Decrypt Later(今収集し、後で復号)」と呼びます。長期間秘密にする必要がある情報では、現時点から鍵確立方式の見直しが重要です。
RSAの小さな計算例:暗号文はどう作られる?
整数を小さくした学習用の例。実際のRSAでは安全なパディングと大きな鍵を使います。
公開鍵を (n=55, e=3)、秘密鍵の指数を d=27 とする簡略例です。5×11=55、φ(55)=40、3×27=81≡1(mod 40)という関係を使います。
平文 m = 7
数値に変えたメッセージ。実際の通信ではこのままRSAを使わない
暗号化 c = m³ mod 55
7³ mod 55 = 343 mod 55 = 13
復号 m = c²⁷ mod 55
13²⁷ mod 55 = 7 に戻る
これはRSAの数学を理解するための教具です。パディングなしの教科書的RSAは安全ではなく、実サービスでは使用しません。ショアのアルゴリズムが問題にするのは、公開される大きな n を因数分解する困難さです。
3. PQC(耐量子暗号)とは
PQC(Post-Quantum Cryptography)は、量子コンピュータを使う攻撃者に対しても安全性を保てると考えられる暗号アルゴリズム群です。「量子コンピュータで実行する暗号」という意味ではありません。多くは通常のCPUでも実行でき、量子通信回線も必要ありません。
従来方式とPQCの違い
どちらも通常のネットワーク・コンピュータ上で実装できる
従来の公開鍵方式
RSA:素因数分解問題 / ECC:楕円曲線離散対数問題
大規模な量子計算に弱い
PQC
ML-KEM・ML-DSA:格子に関連する計算問題 / SLH-DSA:ハッシュに基づく構成
現時点で知られる量子攻撃への耐性を想定
耐量子性は「永久に解読不能」という保証ではありません。暗号解析の進展と実装の安全性を継続的に確認する必要があります。
NISTの標準は用途が違う
| 標準 | アルゴリズム | 何のため? |
|---|---|---|
| FIPS 203 | ML-KEM | 通信相手と共通の秘密を確立(KEM) |
| FIPS 204 | ML-DSA | デジタル署名の作成と検証 |
| FIPS 205 | SLH-DSA | ハッシュベースのデジタル署名 |
4. ML-KEMはどうやって同じ鍵を作るのか
KEM(Key-Encapsulation Mechanism、鍵カプセル化機構)は、公開鍵を使って通信相手との間に同じ共有秘密を確立する仕組みです。共有秘密は実際のデータをそのまま暗号化するためのアプリケーション鍵と同義ではなく、適切な鍵導出処理で通信鍵を作ることがあります。
公開回線上のKEM通信
情報が公開されても秘密鍵は渡さない
受信者
KeyGen() → 公開鍵 pk / 秘密鍵 sk を生成
送信者
Encaps(pk) → 暗号文 ct / 共有秘密 ss₁ を生成
受信者が Decaps(sk, ct)
同じ共有秘密 ss₂ を復元。正常な交換では ss₁ = ss₂。公開回線には ss 自体を流さない
INTERACTIVE LAB / KEY ENCAPSULATION
ML-KEMの鍵共有を、通信する機器で追跡する
クライアントとサーバーの間を何が移動し、どの値が機器の内部に残るのかを6段階で確認します。
STEP 1 / 6
鍵ペアの生成
サーバー内で公開鍵 pk と秘密鍵 sk を生成。秘密鍵 sk はサーバーの外へ出しません。
(pk, sk) = KeyGen()
共有秘密と本文そのものは別です。鍵確立後に本文を別途暗号化します。
APIとして見ると3つの関数
// 説明のための疑似コード。実ライブラリのAPIではありません。
const { publicKey, secretKey } = ML_KEM.keyGen();
// 送信側:公開鍵から暗号文と共有秘密を生成
const { ciphertext, sharedSecret: secretA } =
ML_KEM.encapsulate(publicKey);
// 受信側:秘密鍵と暗号文から共有秘密を復元
const secretB = ML_KEM.decapsulate(secretKey, ciphertext);
// 正常なら secretA と secretB が一致する
// → プロトコルの仕様に従い鍵導出・認証・AEADへここでの ciphertext はKEMのカプセル化暗号文です。暗号化した見積書などのアプリケーション本文ではありません。本文を保護するには、確立した秘密を適切に処理し、AES-GCMのような認証付き暗号(AEAD)へ渡す必要があります。
5. ネットワークではどこでPQCを使う?
PQCはOSI参照モデルの新しいレイヤではありません。暗号アルゴリズムを取り替える技術です。たとえばHTTPSで使うTLSはアプリケーションを保護するセキュリティプロトコルで、鍵確立や署名に関する処理へ耐量子方式を組み込めます。
Web通信における役割の位置づけ
TLSは単純にOSIの一層だけへ完全対応させるものではありません
HTTP:アプリケーションの要求・応答
GET /、JSON、HTMLなどを扱う
TLS:認証・鍵確立・通信の保護
鍵確立の候補:PQCを用いるKEM / 認証:電子署名 / データ保護:AEAD
TCP または QUIC / UDP
通信の転送方式。QUICはUDP上に構築されたトランスポートプロトコル
IP → Ethernet等
宛先アドレスによる配送と、各リンクでのフレーム伝送
代表例の概念図です。HTTPSは通常TCP上のTLS、HTTP/3はQUIC内のTLS 1.3ハンドシェイクを利用するなど、具体的なカプセル化は構成によって異なります。
TLSのハンドシェイクと暗号化データ
アルゴリズムだけでなく相手の認証も必要
クライアント → サーバー
対応する鍵交換方式などを提示。ハイブリッド方式では従来の鍵共有とPQCを組み合わせる場合もある
サーバー → クライアント
サーバー証明書などを提示し、方式に応じた鍵確立に必要なデータを交換
鍵の確立・認証
共有秘密から通信鍵を導出。証明書・署名等により相手とハンドシェイクを認証
HTTPデータの保護
AES-GCMなどの認証付き共通鍵暗号で通常のアプリケーション通信を保護
「公開鍵方式が量子に強くなった」だけでは通信が安全とは限りません。証明書の署名方式、実装のサイドチャネル耐性、暗号アルゴリズムの切替可能性(Crypto Agility)、運用する鍵の寿命なども考えます。
6. なぜ格子暗号が候補になるのか
ML-KEMは「Module Learning with Errors(Module-LWE)」と呼ばれる数学的問題の難しさに関連しています。直感的には、計算結果に小さなノイズが混ざるため、元の秘密を逆算しにくくする考え方です。ただし実際のML-KEMは多項式・剰余演算などを含む複雑な方式であり、次の図はあくまでイメージです。
ノイズがある逆問題のイメージ
実際のML-KEMを数式どおり再現したものではありません
秘密 s
本人しか知らない数値・ベクトル
計算 + 小さな誤差 e
公開情報と秘密を組み合わせ、誤差を加える
公開される結果
多数の結果を見ても秘密を復元するのが難しいと考えられる
7. よく混同される量子技術も図で整理
量子アニーリング:最適化問題を扱う計算モデル
量子アニーリングは、エネルギーが低い状態を探索するという考え方で最適化問題を解く計算アプローチです。回路の小型化・消費電力削減を意味する言葉ではありませんし、耐量子暗号の定義でもありません。
量子アニーリングの考え方
最適化問題
多数の候補から良い組合せを探す
エネルギー表現
問題をエネルギー関数に対応付ける
低エネルギー状態
より良い解の候補を求める
ショアのアルゴリズム:既存の暗号を脅かす側
ショアのアルゴリズムとPQCの関係
ショアのアルゴリズム
量子計算で素因数分解・離散対数問題を効率的に扱い、RSA・ECCなどへの脅威となる
PQC
そうした量子攻撃を考慮し、異なる困難な数学的問題などを基礎に設計する暗号
QKD(量子鍵配送):量子通信で鍵を共有する
QKD(Quantum Key Distribution)は、光子などの量子状態を利用して鍵素材を共有する方式です。PQCとは異なり、専用の量子通信路と古典通信路、相手を認証する仕組みなどが必要です。QKDだけで大量のデータが高速転送できるわけではありません。
QKDで利用する2種類の通信路
送信側
量子状態に情報を載せる
受信側
量子状態を測定する
量子通信路で配送するのはアプリケーションの大容量データではなく、鍵の共有に使う量子状態です。古典通信路の認証が欠かせません。
PQCとQKD、最後に何が違う?
| 観点 | PQC | QKD |
|---|---|---|
| 中心となる技術 | 量子攻撃に耐えるよう設計した数学的暗号 | 量子状態を利用する鍵配送 |
| 必要な通信路 | 通常のデジタルネットワーク | 量子通信路と古典通信路 |
| 代表的な用途 | 鍵確立、デジタル署名 | 鍵素材の共有 |
| 大容量データの暗号化 | 確立した鍵を共通鍵暗号に利用 | 配送した鍵を別の暗号方式に利用 |
8. 実際のシステム導入で気を付けること
PQCのライブラリを導入するだけでは安全性は完成しません。特に公開鍵・暗号文・署名などのサイズの増加は、通信量、TLSの処理、証明書、端末性能などに影響します。また、KEM単独には通信相手の本人確認がないため、認証処理と安全に統合する必要があります。
9. 理解度を確認する
Q. どれが「耐量子暗号」の説明に当てはまる?
- 量子アニーリングにより、コンピュータの消費電力を必ず下げる方式
- 量子計算で素因数分解を高速化し、RSA鍵を解析するアルゴリズム
- 大規模な量子コンピュータによる既知の攻撃にも耐えることを目指して設計された暗号方式
- 量子通信路だけで大量のアプリケーションデータを高速送信する方式
答えと理由を表示する
3です。量子アニーリングは計算モデル、ショアは量子アルゴリズムによる暗号への脅威、QKDは量子通信を用いた鍵配送です。PQCは通常のコンピュータ上でも利用できる耐量子暗号アルゴリズムを指します。
まとめ
PQCを理解する近道は「何を暗号化するか」ではなく、まず鍵をどう確立するのか/誰の署名をどう検証するのかを分けて考えることです。ML-KEMは鍵カプセル化、ML-DSAとSLH-DSAは署名の技術です。実際の通信では、これらを認証やAES-GCMなどの共通鍵暗号と適切に組み合わせます。