株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.
PQC耐量子暗号量子コンピュータML-KEMML-DSA

CRYPTOGRAPHY / POST-QUANTUM

耐量子暗号(PQC)とは?RSA・量子コンピュータの脅威からML-KEMの仕組みまで図解

量子コンピュータが普及しても、今の暗号は安全なのか?

公開鍵と秘密鍵の違いから、量子計算が壊し得る仕組み、標準化された耐量子暗号、実際の鍵確立プロトコルまで順番にたどります。

公開鍵暗号の基礎
ML-KEMの通信図
QKD・ショアとの比較

耐量子暗号の仕組みを基礎から解説。共通鍵・公開鍵・電子署名、量子計算によるRSAへの影響、NISTのML-KEM・ML-DSA、TLSでの鍵共有、QKDとの違いを図解と操作デモで学びます。

1. そもそも暗号は何を守っているのか

共通鍵暗号と公開鍵方式は、鍵の扱いが異なる

A. 共通鍵暗号(AESなど)

送信者

秘密の共通鍵 K で平文を暗号化

暗号文 →(通信路)→

受信者

同じ K で復号・認証。Kを安全に共有する仕組みが必要

B. 公開鍵を使う鍵確立(KEMの例)

受信者

公開鍵 pk と秘密鍵 sk を生成。pkだけ公開

公開鍵 pk ← / カプセル化暗号文 ct →

双方で同じ共有秘密を取得

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 203ML-KEM通信相手と共通の秘密を確立(KEM)
FIPS 204ML-DSAデジタル署名の作成と検証
FIPS 205SLH-DSAハッシュベースのデジタル署名
公式資料を実際に見る ↗NIST FIPS 203 — ML-KEM実際に標準化された鍵カプセル化の仕様。KeyGen・Encaps・Decapsのアルゴリズムとパラメータが確認できます。

4. ML-KEMはどうやって同じ鍵を作るのか

KEM(Key-Encapsulation Mechanism、鍵カプセル化機構)は、公開鍵を使って通信相手との間に同じ共有秘密を確立する仕組みです。共有秘密は実際のデータをそのまま暗号化するためのアプリケーション鍵と同義ではなく、適切な鍵導出処理で通信鍵を作ることがあります。

公開回線上のKEM通信

情報が公開されても秘密鍵は渡さない

受信者

KeyGen() → 公開鍵 pk / 秘密鍵 sk を生成

pk →

送信者

Encaps(pk) → 暗号文 ct / 共有秘密 ss₁ を生成

受信者が Decaps(sk, ct)

同じ共有秘密 ss₂ を復元。正常な交換では ss₁ = ss₂。公開回線には ss 自体を流さない

INTERACTIVE LAB / KEY ENCAPSULATION

ML-KEMの鍵共有を、通信する機器で追跡する

クライアントとサーバーの間を何が移動し、どの値が機器の内部に残るのかを6段階で確認します。

クライアントブラウザーやアプリサーバー公開鍵・秘密鍵を生成公開鍵 pk : まだない共有秘密 ss₁ : まだない公開鍵 pk : あり秘密鍵 sk : あり暗号文 ct : 未受信共有秘密 ss₂ : まだない機器の内部処理青い矢印は通信路に流れる情報。共有秘密や秘密鍵は送信しません。
説明用の模式図。実際のML-KEM演算・通信・暗号化は行いません。

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)へ渡す必要があります。

公式資料を実際に見る ↗NIST SP 800-227 — KEMの使い方KEMによる共有秘密の確立、鍵の後処理、暗号用途への適切な利用方法を説明する公式ガイドです。

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種類の通信路

送信側

量子状態に情報を載せる

光子など →

受信側

量子状態を測定する

量子通信路:量子状態を送る
古典通信路:基底照合・誤り訂正・プライバシー増幅等の情報を交換し、通信相手も認証
QKDは通常のインターネット通信だけでは完結しない
Alice量子状態を準備Bob量子状態を測定量子通信路(光子など)古典通信路(認証・照合)鍵素材を共有し、その後は別の暗号方式でデータを保護

量子通信路で配送するのはアプリケーションの大容量データではなく、鍵の共有に使う量子状態です。古典通信路の認証が欠かせません。

PQCとQKD、最後に何が違う?

観点PQCQKD
中心となる技術量子攻撃に耐えるよう設計した数学的暗号量子状態を利用する鍵配送
必要な通信路通常のデジタルネットワーク量子通信路と古典通信路
代表的な用途鍵確立、デジタル署名鍵素材の共有
大容量データの暗号化確立した鍵を共通鍵暗号に利用配送した鍵を別の暗号方式に利用

8. 実際のシステム導入で気を付けること

PQCのライブラリを導入するだけでは安全性は完成しません。特に公開鍵・暗号文・署名などのサイズの増加は、通信量、TLSの処理、証明書、端末性能などに影響します。また、KEM単独には通信相手の本人確認がないため、認証処理と安全に統合する必要があります。

ハイブリッド鍵共有
従来の鍵共有とPQCを組み合わせるアプローチ。構成と鍵の合成方法はプロトコル仕様に従います。
暗号アジリティ
アルゴリズムを将来変更できる設計。方式名や鍵長をコードに固定し過ぎない工夫です。
サイドチャネル攻撃
計算時間や消費電力など、処理結果以外の観測情報から秘密を推定しようとする攻撃です。
KEMと認証
共通の秘密を得られても、相手が本物とは限りません。署名・証明書などの認証が必要です。

9. 理解度を確認する

Q. どれが「耐量子暗号」の説明に当てはまる?

  1. 量子アニーリングにより、コンピュータの消費電力を必ず下げる方式
  2. 量子計算で素因数分解を高速化し、RSA鍵を解析するアルゴリズム
  3. 大規模な量子コンピュータによる既知の攻撃にも耐えることを目指して設計された暗号方式
  4. 量子通信路だけで大量のアプリケーションデータを高速送信する方式
答えと理由を表示する

3です。量子アニーリングは計算モデル、ショアは量子アルゴリズムによる暗号への脅威、QKDは量子通信を用いた鍵配送です。PQCは通常のコンピュータ上でも利用できる耐量子暗号アルゴリズムを指します。

まとめ

PQCを理解する近道は「何を暗号化するか」ではなく、まず鍵をどう確立するのか/誰の署名をどう検証するのかを分けて考えることです。ML-KEMは鍵カプセル化、ML-DSAとSLH-DSAは署名の技術です。実際の通信では、これらを認証やAES-GCMなどの共通鍵暗号と適切に組み合わせます。