量子時代の暗号技術：ポスト量子暗号(PQC)とは？

# 第1章 はじめに

近年、「量子コンピュータ」という言葉を耳にする機会が増えてきました。  
Google、IBM、国内では理化学研究所などが開発に取り組み、量子ビットを使った全く新しい計算方式が注目されています。

この技術は、機械学習や最適化問題など、私たちの生活を大きく変える可能性を秘めています。  
しかしその一方で、セキュリティの世界ではある種の「危機感」が高まりつつあります。


## 量子コンピュータによって破られる暗号

現在、インターネットで広く使われているRSAや楕円曲線暗号（ECC）などの**公開鍵暗号方式**は、「現代のコンピュータでは解読が現実的でないこと」を前提に安全性が成り立っています。

しかし量子コンピュータが実用化されると、※**Shorのアルゴリズム**という量子アルゴリズムによって、これらの暗号は短時間で解読可能になります。

- RSA：素因数分解に依存
- ECC：離散対数問題に依存  
→ どちらもShorのアルゴリズムに弱い

> **つまり、「十分安全」とされていた暗号技術が根底から崩れ去る可能性があるのです。**

:::note info

Shor（ショア）のアルゴリズムとは、**量子コンピュータで動作する素因数分解と離散対数の高速アルゴリズム**で、1994年に数学者 Peter Shor によって発表されました。
このアルゴリズムの登場により、RSAやECC（楕円曲線暗号）など**現代の公開鍵暗号の安全性が理論的に崩壊する**ことが示されました。

:::

## なぜ今、ポスト量子暗号（PQC）が注目されるのか

量子コンピュータがすぐに実用化されるわけではありません。  
しかし、インフラ・政府・医療などの重要なシステムでは **「今のデータが、将来解読されるリスク」** がすでに問題視されています。

そのような背景から、現在世界中で注目されているのが **ポスト量子暗号（Post-Quantum Cryptography, PQC）** です。

PQCは、量子コンピュータでも**短時間で破ることができない新しい暗号技術群**であり、以下のような研究が急速に進んでいます。

<!-- 図1: 「現在の暗号技術」と「量子コンピュータの影響」および「PQCの位置づけ」を示した概念図を挿入 -->
<!-- 図の例: 暗号技術の系統図 + Shorのアルゴリズムが影響する範囲の可視化 -->


## 本記事の目的

この記事では、以下のことをわかりやすく解説していきます。

- 現在の暗号がなぜ量子コンピュータで危うくなるのか
- ポスト量子暗号とはどのような技術か
- 現在標準化が進められているPQCの代表的なアルゴリズム
- Web・アプリ開発者にとっての影響と備え

専門的な数学の知識がなくても読めるよう、できるだけ丁寧に構成しています。


# 第2章 現在使われている暗号とその限界

本章では、現代のインターネットやシステムで広く使われている**公開鍵暗号**を中心に、その基本的な仕組みと、量子コンピュータ登場によるリスクについて説明します。


## 公開鍵暗号と秘密鍵暗号の違い

暗号には大きく分けて以下の2種類があります。

- **共通鍵暗号（対称鍵暗号）**：暗号化・復号に同じ鍵を使う
- **公開鍵暗号（非対称鍵暗号）**：暗号化と復号で異なる鍵を使う（公開鍵・秘密鍵）

現代のWebサービスでは、たとえば以下のように使い分けられています：

| 方式 | 用途 | 例 |
|------|------|----|
| 共通鍵暗号 | 通信の中身の暗号化 | AES, ChaCha20 |
| 公開鍵暗号 | 鍵の配送、署名検証 | RSA, ECC, ElGamal |

<!-- 図2: 共通鍵暗号と公開鍵暗号の違いを視覚化した図を挿入 -->
<!-- 図例: 鍵の共有方法を示す簡易フローチャート -->


## RSA暗号の原理と強さの根拠

RSAは1977年に発表された、最も有名な公開鍵暗号のひとつです。

その安全性は、「非常に大きな数を素因数分解するのが現実的に難しい」という数学的性質に基づいています。

### 簡単な流れ（概要）：

1. 大きな素数 $p$, $q$ を選ぶ  
2. $N = p \times q$ を求めて公開  
3. 暗号化：$c = m^e \mod N$  
4. 復号：$m = c^d \mod N$


この \( N \) を素因数分解できれば復号できてしまいますが、従来のコンピュータでは**非常に時間がかかる**ため、安全とされてきました。


## ECC（楕円曲線暗号）の特徴

ECC（Elliptic Curve Cryptography）は、RSAよりも小さな鍵サイズで同等の安全性が得られる方式です。近年のTLSやスマートフォンの通信にもよく使われています。

ECCは「楕円曲線上の離散対数問題」が難しいことを安全性の根拠としています。


## 量子コンピュータとShorのアルゴリズム

1994年、ピーター・ショア（Peter Shor）は、**量子コンピュータ上で動作する素因数分解アルゴリズム**を発表しました。これにより、RSAやECCなどの暗号は理論上すべて破られることが示されました。

| アルゴリズム | 解ける問題 | 影響する暗号 |
|--------------|------------|---------------|
| Shorのアルゴリズム | 素因数分解、離散対数 | RSA, DSA, DH, ECC など |
| Groverのアルゴリズム | 総当たり探索の高速化 | AES など（2倍速くなるが安全性は残る） |

> 量子コンピュータが十分な規模で実現すれば、RSA 2048bit も一瞬で解読される可能性があると言われています。

<!-- 図3: Shorのアルゴリズムが破る暗号と影響範囲をまとめた図を挿入 -->
<!-- 例：暗号方式 → 安全性の根拠 → Shorの影響あり/なしを線でつなぐ図 -->


## 対称鍵暗号は安全なのか？

対称鍵暗号（例：AES）はShorのアルゴリズムでは破られませんが、Groverのアルゴリズムによって**探索速度が平方根レベルで高速化**されます。

たとえば AES-128 は Grover によって **事実上 AES-64 相当の強度に低下**します。

→ そのため、**AES-256のようなより長い鍵長の採用が推奨**されています。


## まとめ

現在の公開鍵暗号の多くは、量子コンピュータが実現すれば**安全性を失うリスク**を抱えています。

このような背景から、次章では「量子耐性を持つ新たな暗号技術＝ポスト量子暗号（PQC）」について詳しく見ていきます。

# 第3章 ポスト量子暗号（PQC）とは？

前章で見たように、RSAやECCなどの現代暗号は量子コンピュータによって理論的に破られる可能性があります。  
これに対して、量子コンピュータでも安全であると考えられている新しい暗号方式群が **「 ポスト量子暗号（Post-Quantum Cryptography, PQC）」** です。


## ポスト量子暗号とは何か？

ポスト量子暗号とは、以下のような特徴を持つ暗号方式です。

- **量子コンピュータによっても効率的に破られない**（Shorのアルゴリズムに耐性あり）
- 現在のコンピュータでも実用的に動作可能（低コスト）
- 秘密鍵や署名のサイズは大きくなることが多い

重要なのは、**量子コンピュータを前提にしても破られにくい安全性を持ちつつ、今すぐ実装可能である**という点です。


## なぜ量子コンピュータでも破られないのか？

ポスト量子暗号では、Shorのアルゴリズムが適用できない数学的構造を利用しています。  
具体的には以下のような問題を基に設計されています。

| 分類 | 基本となる困難な問題 | 使用例 |
|------|----------------------|---------|
| 格子暗号 | 最短ベクトル問題（SVP） | Kyber, Dilithium |
| 符号理論 | 符号のデコード困難性 | BIKE, Classic McEliece |
| 多変数多項式系 | 方程式系の解法困難性 | Rainbow（辞退） |
| ハッシュベース | セキュアなハッシュ関数 | SPHINCS+ |

<!-- 図4: PQCの主要な分類と、Shorのアルゴリズムに対する耐性を示す図を挿入 -->
<!-- 例：暗号方式のツリー構造、赤＝破られる／青＝耐性あり、など色分け -->


## 量子耐性とは？

ここでいう「量子耐性（quantum resistance）」とは、**量子アルゴリズムを使っても現実的な時間内に解読できないこと**を意味します。

- RSA：Shorで破られる → 耐性なし
- AES：Groverで2倍速くなるが安全性あり → 一部耐性あり
- PQC：Shor・Groverいずれにも強い設計 → 耐性あり

量子耐性は暗号設計において今後最も重要な基準の1つになります。


## 移行が急がれている理由

量子コンピュータの実用化が数十年先だったとしても、「**今暗号化して保存されたデータが、将来解読される**」という問題（Harvest Now, Decrypt Later）が指摘されています。

これにより、特に以下のような領域では早急な対応が求められています。

- 政府・軍事・医療・金融など長期保管が必要な機密データ
- IoTや自動車など製品寿命が長いデバイス
- ブロックチェーン技術（公開鍵に依存）


## まとめ

ポスト量子暗号（PQC）は、量子コンピュータ時代を見据えた次世代の暗号方式です。  
これらは現在、国際的な標準化が進められており、次章では**代表的なPQCアルゴリズムとその特徴**について詳しく見ていきます。

# 第4章 現在注目されているPQCアルゴリズムたち

ポスト量子暗号（PQC）は現在、世界中で活発に研究・実装が進められており、特に **米国国立標準技術研究所（NIST）** が主導する標準化プロジェクトが国際的に注目されています。


## NISTによるPQC標準化プロジェクト

NISTは2016年に**ポスト量子暗号標準化プロジェクト**を立ち上げ、世界中から提案されたアルゴリズムを評価してきました。最終的に以下のアルゴリズムが**標準候補**として選定されています。

| 種別 | アルゴリズム | ベース技術 | 用途 |
|------|--------------|------------|------|
| 鍵共有・暗号化 | Kyber | 格子暗号 | 鍵交換、KEM |
| デジタル署名 | Dilithium | 格子暗号 | 電子署名 |
| デジタル署名 | Falcon | 格子暗号 | 電子署名（高速・小サイズ） |
| デジタル署名 | SPHINCS+ | ハッシュベース | 電子署名（冗長だが信頼性高） |

<!-- 図5: PQC候補アルゴリズムの比較チャートを挿入（速度、鍵サイズ、署名サイズ） -->


## Kyber：次世代の鍵交換方式

**Kyber**は、NISTによって鍵共有アルゴリズムの標準として選ばれた方式です。  
内部的には「モジュラー格子（Module-LWE）」と呼ばれる数学構造に基づいており、量子コンピュータに対しても高い耐性を持ちます。

### 特徴：

- 鍵生成・暗号化・復号いずれも高速
- 小さめの鍵サイズと優れた実装性
- TLS 1.3 などのプロトコルとの統合も容易

**用途例**：HTTPSの鍵交換、VPN、IoTセキュリティ


## Dilithium：標準的な署名アルゴリズム

**Dilithium**は電子署名用のアルゴリズムで、Kyberと同様に格子暗号をベースとしています。  
堅牢性とパフォーマンスのバランスに優れており、**PQC署名の「デフォルト」として推奨**されることが多いです。

### 特徴：

- 安定した署名生成と検証速度
- 鍵サイズと署名サイズのバランスが良好
- 実装が比較的単純で、検証しやすい

**用途例**：電子文書署名、ソフトウェア署名、IoTファームウェア検証


## Falcon：高速・軽量な署名方式

**Falcon**は同じく格子暗号ベースの署名方式ですが、より**署名サイズのコンパクトさ**と**高速性**を重視しています。  
一方で、実装がやや複雑であるという課題もあります。

### 特徴：

- 非常に短い署名（数百バイト程度）
- 高速な検証処理
- セキュア実装に注意が必要

**用途例**：IoT、小型デバイス、モバイルアプリの署名処理

## SPHINCS+：ハッシュベースの堅牢署名方式

**SPHINCS+** はハッシュ関数だけで成り立つ電子署名方式で、**理論上の信頼性が非常に高い**という特徴があります。

### 特徴：

- ハッシュ関数だけで構成されるため安全性が明確
- 鍵サイズは小さいが署名サイズが非常に大きい（数KB）
- 他の方式が破られた際の「最後の砦」とも呼ばれる

**用途例**：法的・長期的な信頼性が重視されるアーカイブ用途

## まとめ

現在、NISTはKyberとDilithiumをポスト量子暗号の**主要な実用候補**として標準化を進めています。  
これらはすでに多くのソフトウェア・プロトコルで導入が始まっており、近い将来私たちの使うWebやアプリにも直接関わってくるでしょう。

次章では、これらのアルゴリズムを使った**簡単な実装例**を紹介します。

# 第6章 実装してみよう（PythonやOpenSSLでPQC体験）

ここでは、ポスト量子暗号の中でも代表的な **Kyber**（鍵交換）と **Dilithium**（署名）について、  
実際にプログラムで試してみる方法を紹介します。


## 使用ライブラリ：Open Quantum Safe（OQS）

Open Quantum Safe（OQS）は、量子耐性を持つ暗号アルゴリズムの**C言語ライブラリ**であり、  
現在主流の**OpenSSL**や**Python**との連携も可能です。

### 準備方法（Linux / WSL2推奨）

```bash
# 必要パッケージのインストール
sudo apt update
sudo apt install cmake gcc make libssl-dev

# Open Quantum Safe ライブラリの取得とビルド
git clone --recursive https://github.com/open-quantum-safe/liboqs.git
cd liboqs
mkdir build && cd build
cmake .. -DOQS_DIST_BUILD=ON
make
sudo make install
````

## Pythonバインディング：`oqs-python`

OQSには公式のPythonバインディングもあります。以下の手順で導入可能です。

```bash
# Pythonバインディングをクローン
git clone https://github.com/open-quantum-safe/oqs-python.git
cd oqs-python
pip install .
```

## Kyberで鍵生成と共有を試す（KEM：Key Encapsulation Mechanism）

```python
import oqs

print("=== Kyber512による鍵共有 ===")

# 送信者：公開鍵・秘密鍵生成
with oqs.KeyEncapsulation('Kyber512') as kem:
    public_key = kem.generate_keypair()
    
    # 受信者：共有鍵と暗号化データを生成
    ciphertext, shared_secret_sender = kem.encap_secret(public_key)
    
    # 送信者：復号して共有鍵を得る
    shared_secret_receiver = kem.decap_secret(ciphertext)

    print("Sender Shared Secret :", shared_secret_sender.hex())
    print("Receiver Shared Secret:", shared_secret_receiver.hex())

    assert shared_secret_sender == shared_secret_receiver
```

## Dilithiumで署名と検証を試す

```python
import oqs

print("=== Dilithium2による署名と検証 ===")

message = b"Post-Quantum Cryptography is the future."

# 鍵ペアの生成
with oqs.Signature('Dilithium2') as signer:
    public_key = signer.generate_keypair()
    
    # メッセージの署名
    signature = signer.sign(message)
    
    # 検証
    valid = signer.verify(message, signature, public_key)

    print("署名は正しいか？", valid)
```

## 補足：他にも試せるアルゴリズム

`oqs.KeyEncapsulation.algorithms` や
`oqs.Signature.algorithms` で対応アルゴリズムの一覧を取得できます。

```python
print("利用可能なKEMアルゴリズム一覧:")
print(oqs.KeyEncapsulation.algorithms)

print("利用可能な署名アルゴリズム一覧:")
print(oqs.Signature.algorithms)
```

## まとめ

* **Kyber**で量子耐性の鍵交換
* **Dilithium**で署名と検証
* Python + OQSライブラリを使えば、簡単にPQCの体験ができる

次章では、Webやアプリ開発者がPQCにどう向き合うべきかを考察します。

以下に、「**第7章：Webエンジニア・アプリ開発者への影響は？**」をQiita向けMarkdown形式で記述します。
TLS通信やブラウザ、IoTへの実際の影響を中心に構成しています。

# 第7章 Webエンジニア・アプリ開発者への影響は？

ポスト量子暗号（PQC）は研究室や学術機関だけの話ではありません。  
実際、Webやアプリの開発者にとっても、**数年以内に直面する可能性のある現実的な技術課題**となっています。

この章では、Web通信の基盤である**TLS/HTTPS**や、**IoT・アプリ領域**におけるPQCの影響について解説します。

## 現在のTLS構成とそのリスク

現在のTLS 1.2/1.3では、鍵交換や認証に以下のような暗号方式が使われています：

| 項目 | 使用例 |
|------|--------|
| 鍵交換 | ECDHE（楕円曲線Diffie-Hellman） |
| サーバ証明書 | RSA / ECDSA |
| 対称鍵暗号 | AES-GCM, ChaCha20 |

→ この中で、**ECDHE, RSA, ECDSA** はすべて Shor のアルゴリズムによって将来的に破られる恐れがあります。


## ハイブリッド鍵交換：量子+従来方式の併用

GoogleやCloudflareはすでに、TLSの鍵交換部分を**量子耐性アルゴリズムと従来のアルゴリズムを併用**する「**ハイブリッド鍵交換**」方式で実験を行っています。

### 例：X25519 + Kyber512 の併用（CECPQ2）

クライアントとサーバは、両方の方式で鍵交換を行い、それぞれの共有鍵を連結または混合して使用する

この方法により、**現在のTLSクライアントとの互換性を保ちつつ、将来の量子攻撃に備える**ことができます。

<!-- 図7: ハイブリッド鍵交換のイメージ図（通常とPQCの2つの鍵を混ぜる） -->

## 実際の導入事例（2024年時点）

* **Google Chrome**：Kyberを使ったTLS実験を一部ユーザーで展開済（CECPQ2/3）
* **Cloudflare**：量子耐性鍵交換を備えたTLSを実地運用中
* **AWS, Azure**：商用PQCライブラリと連携するクラウドサービスを提供開始

## Webエンジニアが取るべきアクション

* **TLSライブラリ（OpenSSLなど）の今後のバージョンに注目**
  → PQC対応が進むことで、証明書の発行や接続設定が変わる可能性がある

* **証明書発行機関（CA）のPQC対応状況を調査**
  → 量子耐性の署名方式（Dilithium等）による証明書の普及が始まっている

* **HTTPS以外の通信（MQTT, gRPCなど）も準備が必要**
  → IoTや分散システムでのPQC実装が求められる可能性

## アプリ開発者・IoTエンジニアへの影響

* **モバイルアプリ**：署名処理・API通信に使われる鍵や証明書の更新が必要になる場合がある
* **IoTデバイス**：計算リソースが限られるため、軽量なPQC実装（Falconなど）の検討が重要
* **長寿命製品（車、医療機器など）**：10年以上のセキュリティ維持を前提に設計が必要

## まとめ

ポスト量子暗号は、将来だけでなく**今から設計に取り入れるべき現実的な技術**です。
TLS通信、署名、鍵交換といった「普段はライブラリに任せていた部分」こそが影響を受けるため、Web・アプリ開発者もPQCの動向に注目する必要があります。


# 第8章 研究・教育・実務の未来へ

ポスト量子暗号（PQC）は、もはや「遠い未来の話」ではなく、  
**現在進行形で標準化され、実装されつつある**新たなセキュリティ技術です。

この章では、PQCを軸とした今後の研究・教育・実務の展望について紹介します。


## 研究分野としてのポテンシャル

PQCは複雑で深い数学的構造に基づいており、**新しい理論研究・実装研究の余地が非常に大きい分野**です。

### 研究テーマ例：

- 格子暗号の構造最適化（Ring-LWE, Module-LWE など）
- PQCのサイドチャネル耐性（ハードウェア攻撃対策）
- 組込みデバイス向けの軽量PQC実装
- マルチ署名やゼロ知識証明との連携
- ブロックチェーンへの応用（量子耐性アドレス）

暗号理論、数理最適化、ソフトウェア実装、セキュリティ設計など、幅広い分野と連携できるため、**学際的な研究テーマ**にも最適です。

## 教育分野での導入

量子コンピュータやポスト量子暗号は、今後の情報セキュリティ教育においても欠かせないトピックになるでしょう。

- 専門学校・大学でのカリキュラムへの導入
- 実装ハンズオン（Kyber/Dilithiumの演習など）
- 高専・高校での「暗号×量子」の啓発活動

### 例：
- Python＋OQSで体験するポスト量子暗号
- TLSの構造とPQCの関係を学ぶSSL実習

<!-- 図8: 教育カリキュラムにPQCが組み込まれるイメージ図を挿入 -->


## 実務と産業での備え

日本企業でも、以下のような分野ではすでにPQCの研究・導入が始まっています。

| 分野 | 具体的な影響 |
|------|----------------|
| 金融 | 長期署名証明書、HSMとの連携 |
| 政府・防衛 | 高機密通信、耐量子化VPN |
| IoT・車載 | 軽量化・低電力の署名・鍵共有 |
| Webサービス | PQC TLSによるAPI通信の安全化 |

企業がPQCに備えるには、次のような段階的な対応が推奨されます。

1. 暗号技術の棚卸し（既存TLSや証明書の調査）
2. ハイブリッド方式への移行評価
3. 実装実験・PoC（OQS, liboqs, TLSライブラリ）
4. 運用環境への導入と鍵管理方式の更新


## PQCを学ぶ・使うためのリソース

### 公式プロジェクト・ツール

- Open Quantum Safe（liboqs / oqs-openssl）  
  https://openquantumsafe.org/

- NIST PQC Project  
  https://csrc.nist.gov/projects/post-quantum-cryptography

- pqcrypto ライブラリ（Python用）  
  https://github.com/mupq/pqcrypto

### 学習資料

- Shorのアルゴリズム解説（Quantum Katas）  
- PQC標準候補アルゴリズムの論文（NIST公式）

## まとめ

ポスト量子暗号は「今後の脅威に備えるための研究」から、「現場で使われる技術」へと移行しつつあります。  
それに伴い、開発者、教育者、研究者、実務担当者それぞれに求められる知識やスキルも変わってきます。

量子時代のセキュリティを支えるのは、**今この分野に関心を持つ私たち自身**です。

# 第9章 おわりに

この記事では、量子コンピュータ時代に向けた新しい暗号技術「ポスト量子暗号（PQC）」について、理論から実装、そして実務での応用まで幅広く紹介してきました。

## 本記事のまとめ

- **現代の公開鍵暗号（RSAやECC）は量子コンピュータによって破られる可能性がある**
- **ポスト量子暗号（PQC）は、量子耐性を持つ新しい暗号方式の総称である**
- **NISTはKyber（鍵共有）とDilithium（署名）を中心に標準化を進めている**
- **PythonやOpenSSLを使えば、誰でも簡単にPQCを試すことができる**
- **TLSや証明書、IoTなど現実の技術にもPQC導入が始まっている**
- **PQCは今後の研究・教育・実務すべての分野に影響を与える重要なテーマである**


## 今後の学び方・行動提案

### 初学者・学生向け

- PythonでKyberやDilithiumを体験してみる（OQSライブラリ）
- Shorのアルゴリズムや格子暗号について基本を学ぶ
- セキュリティ＋数学＋ソフトウェアを横断的に学習する

### エンジニア・開発者向け

- 自分の使っているライブラリや通信手段の暗号方式を調べる
- TLSのハイブリッド方式への移行に注目する
- 実装レベルでPQCを組み込むPoCを試す

### 教育・研究者向け

- PQCの理論的安全性と応用性の両面に触れた教材を作成
- OQSやliboqsを使った実装演習をカリキュラムに導入
- 国内外のPQC研究会・ワークショップに参加して最新動向を把握する

## 最後に

量子コンピュータは確実に進化しています。そしてその影響を最も早く受けるのが「暗号技術」です。  
私たちが日々使っているWebやアプリの裏側を支えるセキュリティ基盤を、量子時代に向けてどう強化していくかが問われています。

ポスト量子暗号は、その答えのひとつです。

技術的な難しさに尻込みせず、「触れてみる」「試してみる」ことから始めましょう。  
この記事がその最初の一歩になれば幸いです。

## 参考資料

- NIST PQC Project  
  https://csrc.nist.gov/projects/post-quantum-cryptography

- Open Quantum Safe Project  
  https://openquantumsafe.org/

- Kyber / Dilithium 論文  
  https://pq-crystals.org/

---

この記事が役に立ったと思った方は、ぜひ「いいね」や「ストック」で応援していただけると嬉しいです！  
ご質問や補足要望などあれば、コメント欄へどうぞ。