NET // communication networks
LESSON 37 / 発展編

公開鍵暗号 ─ RSA・Diffie-Hellman・楕円曲線

共通鍵暗号の最大の弱点は 「事前に鍵を共有する必要がある」 こと。インターネットで初めて出会うサーバとどう秘密鍵を共有するのか?この問いに答えたのが 公開鍵暗号(非対称暗号)。1976 年の Diffie-Hellman、1977 年の RSA という大発明から始まった暗号革命です。本講では RSA の数学的根拠(素因数分解の困難さ)、Diffie-Hellman の鍵交換(離散対数の困難さ)、現代主流の 楕円曲線、TLS や WireGuard で使われる ハイブリッド暗号 の発想、そして 2030 年代に向けて急速に進む 耐量子暗号(PQC) まで踏み込みます。

学習目標

本講を終えると、以下を達成できるようになります。

本講は 基礎 暗号化第36回 共通鍵暗号 を前提とします。共通鍵暗号で残された「最初の鍵をどう共有するか」という問題 ─ 第35回で見た OTP の鍵配送の壁にも通じる ─ を、本講で完全に解消します。続く 第25回 TLS と PKI で具体的な運用を見ます。

このレッスンの目次

01 公開鍵の発想 事前共有不要の革命。Diffie・Hellman・Merkle の 1976 年論文… 02 RSA の数学 素因数分解の困難さ。c = m^e mod n の世界… 03 DH 鍵交換 離散対数。共有鍵を「公開チャネル上で」作る… 04 楕円曲線 256 bit で RSA-3072 と同等。現代の主流… 05 ハイブリッド暗号 公開鍵で鍵交換、共通鍵で本文。すべての TLS の基本構造… 06 OpenSSL ハンズオン RSA・EC 鍵生成と暗号化・署名… 07 量子と PQC Shor アルゴリズムの脅威と Kyber/Dilithium… 08 まとめと用語 本講の重要語句を整理 09 確認問題 5 問で理解度をチェック

公開鍵暗号の発想 ─ 事前共有なしで秘密通信

1976 年、ホイットフィールド・ディフィーとマーティン・ヘルマンが発表した論文 "New Directions in Cryptography" は、暗号史を 2 つに切り分けました。「共有しなくていい鍵で暗号化できる」というアイデアの登場です。それ以前は「鍵を秘密に共有してから暗号化する」が大前提でした。
POINT 公開鍵暗号の核心:
・誰もが持つ 2 つの鍵 ─ 公開鍵(誰にでも配ってよい) と 秘密鍵(自分だけ)
公開鍵で暗号化したものは、対応する秘密鍵でしか復号できない(機密性)
秘密鍵で署名したものは、対応する公開鍵で検証できる(認証性 ─ 第39回ディジタル署名)
・両者は数学的に対をなすが、片方からもう片方を計算するのは 計算量的に不可能

共通鍵では解けない問題

初めて訪れる Web サイトと安全に通信するには、まず 共通鍵を共有 する必要があります。しかし、その共有自体が安全である保証はどこに?盗聴されているかもしれない回線で「秘密鍵」を送れば、すぐに盗まれます。これが公開鍵以前の世界の根本問題でした。

問題:アリスとボブが初対面で安全に通信するには ① 共通鍵の世界(1976年以前) アリス ボブ 事前に「鍵 K」を秘密共有 ↑ どうやって? AES(K, message) 問題:K の共有経路が要る ② 公開鍵の世界(1976年以降) アリス ボブ(公開鍵 PK_B 公開済) RSA(PK_B, message) 公開鍵で暗号化 事前共有 不要!

図の見方:左の世界では「鍵 K をどうやって秘密に渡すか」自体が問題。右の世界では、ボブが あらかじめ公開鍵を世界中に配っている。アリスは初対面でも、その公開鍵で暗号化するだけ。復号できるのは秘密鍵を持つボブ本人だけ。

つながる知識: 公開鍵の発想自体は マーケル(Ralph Merkle) が学生時代から温めていたもの(マーケルパズル)。Diffie・Hellman の論文と独立に、似た着想が複数の研究者から出てきていた。1977 年に MIT の Rivest・Shamir・Adleman が RSA として実装可能な具体的アルゴリズムを発表したことで、理論から技術への転換が起きた。

確認: 公開鍵暗号が解決しようとした「鍵配送問題」とは、共通鍵暗号のどのような困難を指すか?

正解:B。100 人なら 4950 通り、10000 人なら 5000 万通りの鍵ペアが必要で、しかもそれぞれ「事前に物理的に会う」「信頼できる別経路」で渡す必要があった。インターネット時代には現実的でない。公開鍵暗号は 「公開鍵を世界に晒したまま、誰とでも通信できる」 という構造でこれを根本的に解決した。

RSA の数学 ─ 素因数分解の困難さに賭ける

RSA は 1977 年に発表された 世界初の実用的な公開鍵暗号。仕組みの根幹は 「巨大な合成数を素因数分解するのは困難」 という数論の事実です。一方向に計算するのは簡単(2 つの大きな素数を掛け算するだけ)、逆方向は困難(掛け算結果から元の素数を取り出すには指数時間)。この非対称性を利用しています。
POINT RSA の鍵生成と暗号化:
1. 大きな素数 p, q を選ぶ → n = p × q(数千ビット)
2. φ(n) = (p-1)(q-1) を計算
3. e(公開指数、通常 65537)を選び、d ≡ e-1 mod φ(n) を計算
4. 公開鍵 = (e, n)、秘密鍵 = (d, n)(p, q, φ(n) は破棄または保管)

暗号化:c = me mod n
復号:m = cd mod n

具体例:小さな数で動作を見る

# 1) 素数選び(本物は数百桁、ここでは小学生サイズ)
p = 11, q = 13
n = p * q = 143
φ(n) = (p-1)(q-1) = 10 * 12 = 120

# 2) 公開指数 e を選ぶ(φ(n) と互いに素)
e = 7

# 3) 秘密指数 d を計算(7 * d ≡ 1 mod 120)
d = 103  (確認: 7 * 103 = 721 = 6 * 120 + 1)

# 公開鍵 = (e=7, n=143)
# 秘密鍵 = (d=103, n=143)

# 4) アリスが m = 9 をボブに送りたい
c = m^e mod n = 9^7 mod 143 = 48

# 5) ボブが復号
m = c^d mod n = 48^103 mod 143 = 9   ← 元に戻った!

本物の RSA では n は 2048〜4096 bit(617〜1233 桁)。素因数分解の困難さに守られて、d を計算で導けない仕組みです。

なぜ「m^e mod n」と「c^d mod n」が逆操作になるのか

これは オイラーの定理 の帰結:任意の整数 m < ngcd(m, n) = 1 について mφ(n) ≡ 1 (mod n) が成り立つ。e と d は e × d ≡ 1 mod φ(n) を満たすように選んだので、med = m1 + k·φ(n) ≡ m × (mφ(n))k ≡ m × 1k ≡ m (mod n)。つまり「e 乗してから d 乗すれば元に戻る」。

RSA の安全性は何に依拠しているか

前提となる「困難な問題」

素因数分解問題:n = p × q から p, q を求めること。古典コンピュータでは 準指数時間(GNFS)が最良。2048 bit n の分解は現代の計算機でも実用的に不可能。

もし破られたら

n を p × q に分解できれば、φ(n) と d がすぐ計算できて秘密鍵が露出。世界中の RSA 暗号通信が一瞬で復号可能になる。これが 2030 年代に量子計算機が登場すると現実化 する(後述 §07)。

もっと詳しく:RSA は実は「素朴に使うと危ない」

素の RSA(textbook RSA)は 同じ平文 m を 2 回送ると同じ暗号文 c になる(決定論的)、m が小さいと c = me が n より小さくなる選択暗号文攻撃に弱い など、複数の脆弱性があります。実用では必ず OAEP パディング(RFC 8017) を施した RSA-OAEP を使います。OpenSSL のデフォルトもこちら。

確認: RSA の安全性の根拠として、最も適切なものはどれか。

正解:C。RSA は「素因数分解が困難」という未解決の計算量論的仮定の上に成立している(数学的に「絶対不可能」が証明されたわけではない)。現代の最強アルゴリズム GNFS でも 2048 bit の合成数を分解するには宇宙年齢級の時間がかかる。なお、量子計算機が登場すると Shor アルゴリズムで多項式時間に潰されるため、この前提が破綻する ─ これが PQC が急がれる本質的理由。アルゴリズムや公開鍵自体は秘密ではない(Kerckhoffs の原則)。

Diffie-Hellman 鍵交換 ─ 公開チャネルで秘密鍵を作る

RSA は「公開鍵で暗号化、秘密鍵で復号」という暗号化型ですが、Diffie-Hellman(DH)は 「2 人が公開チャネル上で同じ秘密値を計算する」 鍵交換アルゴリズムです。実際の TLS や WireGuard では、暗号化そのものは AES、鍵交換に DH(または ECDH) という分業が定石。
POINT DH 鍵交換の手順(古典版):
1. 公開パラメータ p(大きな素数)、g(ジェネレータ) ─ 全員に既知
2. アリス:秘密 a を選び、A = ga mod p を公開
3. ボブ:秘密 b を選び、B = gb mod p を公開
4. アリス:K = Ba mod p を計算
5. ボブ:K = Ab mod p を計算
両者は K = gab mod p という同じ秘密値を持つ。盗聴者は g, p, A, B を知っても a, b は推定不能(離散対数問題)。

「色合わせ」のアナロジー

DH の本質を直感的に表す有名なアナロジー:

  1. 公開色「黄」を世界に配る(=g, p)
  2. アリスは秘密色「赤」、ボブは秘密色「青」を持つ
  3. アリスは黄+赤=オレンジを公開、ボブは黄+青=緑を公開
  4. アリスは緑+自分の赤=茶色、ボブはオレンジ+自分の青=茶色
  5. 盗聴者はオレンジと緑を見たが、そこから茶色は 計算できない(混色を分離できない)

具体例:小さな数で動作を見る

# 公開パラメータ
p = 23, g = 5   # (本物は p が 2048〜4096 bit)

# アリス側
a = 6   (秘密)
A = g^a mod p = 5^6 mod 23 = 8   (公開)

# ボブ側
b = 15   (秘密)
B = g^b mod p = 5^15 mod 23 = 19   (公開)

# 共有鍵を計算
アリス:K = B^a mod p = 19^6 mod 23 = 2
ボブ  :K = A^b mod p = 8^15 mod 23 = 2

# 同じ K = 2 が得られる!(本物では K は 256+ bit のランダム値)

離散対数問題 ─ なぜ a を逆算できないか

盗聴者は p, g, A を知っているので、理論的には A = ga mod p を満たす a を求めれば良い。しかしこれが 離散対数問題 で、p が大きいと古典計算機では解けない。RSA の素因数分解問題と同じく、量子計算機(Shor アルゴリズム)では 多項式時間で解ける ─ ここが現代暗号の脆弱性の本丸。

つながる知識: 現代では 「同じセッション鍵を使い回さない」(Forward Secrecy)のため、セッションごとに DH を実行する Ephemeral DH(DHE / ECDHE) が標準。TLS 1.3 では ECDHE のみ 許容され、過去のセッション鍵を再利用する古いやり方は完全に廃止されました。

Q. 攻撃者が DH 鍵交換をすべて盗聴して gpA = g^a mod pB = g^b mod p をすべて手に入れたとする。なぜそれでも共有秘密 K = g^(ab) mod p が攻撃者に求められないのか?

楕円曲線暗号 ─ 短い鍵で同じ強度

1985 年に提案された 楕円曲線暗号(Elliptic Curve Cryptography, ECC) は、RSA や DH と同じ「離散対数の困難さ」を 楕円曲線上の点の演算 に置き換えたもの。同じ安全性を はるかに短い鍵長 で実現できるため、モバイル・IoT・ブラウザの世界で急速に主流化しました。
POINT ECC の特徴:
・楕円曲線 y² = x³ + ax + b mod p 上の点に「足し算」を定義 → 群を成す
・「点 P を k 回足す」(スカラー倍)は速いが、結果から k を逆算する(ECDLP, 楕円曲線離散対数問題)は困難
同じ安全性で鍵長は約 1/12(RSA-3072 ≈ ECC-256)
・代表アルゴリズム:ECDH(鍵交換)、ECDSA(署名)、Ed25519(モダン署名)
・標準曲線:NIST P-256 / P-384、Curve25519(Ed25519 と相性良)

鍵長と安全性の対応(NIST 推奨)

強度(共通鍵相当)RSA / DH 鍵長EC 鍵長用途
80 bit1024 bit160 bitレガシー(廃止推奨)
112 bit2048 bit224 bit2030 年まで
128 bit3072 bit256 bit(P-256, Curve25519)現代の標準
192 bit7680 bit384 bit高セキュリティ
256 bit15360 bit512 bit政府機密・長期保存

なぜモバイルで ECC が好まれるか

RSA-3072 の暗号化は CPU・メモリ・通信量すべてに重い。スマホで TLS 接続するたびに 3072 bit の鍵を交換すると電池が減る。ECC-256 なら同じ強度で 計算量・通信量とも 1/10 程度。これが Web の TLS が ECDHE 中心に移った理由です。

Curve25519 と Ed25519 ─ 現代のスター

2005 年に Daniel J. Bernstein(djb)が設計した Curve25519 は、安全性・速度・実装の単純さを兼ね備えた楕円曲線。SSH、WireGuard、TLS、Signal プロトコル など、新しい標準のほとんどがこれを採用。サイドチャネル攻撃に対する強さも特長で、NIST 曲線が抱えていたとされる懸念(NSA バックドア説) を回避する選択肢としても支持されています。

つながる知識: WireGuard は鍵交換に Curve25519、共通鍵に ChaCha20-Poly1305、ハッシュに BLAKE2s という、すべて djb 系のモダンプリミティブを採用しています。「現代暗号の最小限ツールキット」とも言える組み合わせ。

確認: 楕円曲線暗号(ECC)が RSA と同じ強度を「短い鍵」で達成できる理由として、最も適切なものはどれか。

正解:B。RSA / 古典 DH の前提となる「素因数分解」「整数離散対数」は GNFS で sub-exponential time で解ける。一方、楕円曲線群上の離散対数(ECDLP)は Pollard's rho 程度しか知られておらず、ほぼ完全な指数時間。だから 256 bit の楕円曲線で約 128 bit 強度 ≒ RSA-3072 と同等が達成できる。これがモバイル・IoT・WireGuard で ECC が好まれる理由。C は誤り(Shor は楕円曲線版もある)。

ハイブリッド暗号 ─ 公開鍵と共通鍵の役割分担

公開鍵暗号は重い。RSA で 1 GB のファイルを暗号化するなんて時間がかかりすぎ。だから現実のすべての暗号通信は 「公開鍵で短い秘密鍵を共有 → 以降は共通鍵で本文」 という ハイブリッド暗号 で動いています。TLS、WireGuard、PGP、すべて同じパターン。
POINT ハイブリッド暗号の手順:
1. アリスが ランダムなセッション鍵 K を生成(短い、例 256 bit)
2. アリスは K を公開鍵で暗号化 してボブに送る(または ECDH で K を導出)
3. ボブは秘密鍵で K を復号 → 両者が K を共有
4. 以降の本文通信は K を使った AES-GCM(共通鍵) で行う
→ 公開鍵の重い処理は最初だけ、本文は高速な共通鍵で

TLS 1.3 ハンドシェイクの基本構造

TLS 1.3:ECDHE で鍵交換 → AES-GCM で本文 クライアント サーバ ClientHello + EC 公開鍵 g^a(ECDHE share) ServerHello + EC 公開鍵 g^b + 証明書 + 署名 + 暗号化済 Finished → 両者が共有鍵 K = g^(a*b) を導出 Finished + アプリデータ(K で AES-GCM 暗号化) アプリ応答(K で AES-GCM 暗号化) 公開鍵処理は最初だけ。本文は高速な共通鍵で連続通信

図の見方:TLS 1.3 では最初の 1 往復で ECDHE による鍵交換 + サーバ証明書による認証 が完了し、すぐに共通鍵での暗号化通信が始まる。公開鍵暗号は鍵交換と署名のみ、本文の暗号化は共通鍵が担う。これがハイブリッド暗号の現代の姿。詳細は 標準 TLS を参照。

Q. 「公開鍵暗号は遅い」と聞くと「全部共通鍵にすればいいのでは?」と思いがち。なぜ実際のプロトコル(TLS / SSH / WireGuard 等)はわざわざハイブリッド構成を取るのか?

OpenSSL ハンズオン ─ RSA と EC の鍵を作る

OpenSSL コマンドで実際に鍵ペアを生成し、暗号化・復号を試します。

1. RSA 鍵ペアの生成

# 秘密鍵を生成(2048 bit)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
    -out rsa_priv.pem

# 公開鍵を抽出
openssl rsa -in rsa_priv.pem -pubout -out rsa_pub.pem

# 中身を確認
openssl pkey -in rsa_priv.pem -text -noout | head -20

2. RSA で短いメッセージを暗号化・復号

# 平文を作成
echo "hello from alice" > plain.txt

# ボブの公開鍵で暗号化(OAEP パディング)
openssl pkeyutl -encrypt -pubin -inkey rsa_pub.pem \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 \
    -in plain.txt -out cipher.bin

# ボブの秘密鍵で復号
openssl pkeyutl -decrypt -inkey rsa_priv.pem \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 \
    -in cipher.bin -out decrypted.txt

cat decrypted.txt
# → hello from alice

注意:RSA-2048 で暗号化できるのは 最大 ~190 バイト。長いデータはハイブリッド方式(セッション鍵を RSA、本文を AES)で扱う。

3. EC 鍵ペアの生成(ECDSA / ECDH 用)

# P-256 曲線の秘密鍵を生成
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 \
    -out ec_priv.pem

# Curve25519 を使うなら(モダン)
openssl genpkey -algorithm Ed25519 -out ed_priv.pem

# 公開鍵を抽出
openssl pkey -in ec_priv.pem -pubout -out ec_pub.pem

# 鍵長を確認
openssl pkey -in ec_priv.pem -text -noout | grep -i bit
# → ASN1 OID: prime256v1 (= NIST P-256, 256 bit)

4. ECDH 鍵交換のシミュレーション

# アリス・ボブの鍵ペアをそれぞれ作る
openssl genpkey -algorithm X25519 -out alice_priv.pem
openssl pkey -in alice_priv.pem -pubout -out alice_pub.pem

openssl genpkey -algorithm X25519 -out bob_priv.pem
openssl pkey -in bob_priv.pem -pubout -out bob_pub.pem

# アリス側で共有鍵を導出(自分の秘密 + ボブの公開)
openssl pkeyutl -derive -inkey alice_priv.pem \
    -peerkey bob_pub.pem -out alice_shared.bin

# ボブ側で共有鍵を導出(自分の秘密 + アリスの公開)
openssl pkeyutl -derive -inkey bob_priv.pem \
    -peerkey alice_pub.pem -out bob_shared.bin

# 同じ鍵が得られたか確認
diff alice_shared.bin bob_shared.bin && echo "同じ!"
xxd alice_shared.bin    # → 32 バイトの共有鍵

これで両者は 同じ 32 バイトの秘密値 を、公開チャネルだけで共有できました。以降は AES-GCM 等で暗号化通信できます ─ これがハイブリッド暗号の入口。

5. Python の cryptography ライブラリで同じ操作

# pip install cryptography
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey

alice = X25519PrivateKey.generate()
bob   = X25519PrivateKey.generate()

# 公開鍵交換(普段はネットワーク越しに行う)
alice_pub = alice.public_key()
bob_pub   = bob.public_key()

# 共有鍵を導出
alice_shared = alice.exchange(bob_pub)
bob_shared   = bob.exchange(alice_pub)

print(alice_shared == bob_shared)  # → True
print(alice_shared.hex())          # → 32 バイトの共有秘密

量子計算と耐量子暗号(PQC)

1994 年、ピーター・ショアは 大規模な量子コンピュータ なら素因数分解と離散対数を 多項式時間 で解けるアルゴリズムを発表しました。これは現代の公開鍵暗号(RSA・DH・ECDH)を すべて破ることを意味 します。共通鍵暗号は鍵長を倍にすれば対応可能(前回 §07)ですが、公開鍵は 全く別の数学に置き換える 必要があります。
POINT 量子計算の脅威:
Shor アルゴリズム ─ 素因数分解と離散対数を量子計算機で多項式時間で解く
・RSA-2048 → 約 4000 量子ビットの量子計算機で 1 日以内に破られる(理論上)
・現実の脅威:2030 年代以降の大規模量子計算機を想定
・既に実用化されつつある対策:PQC(Post-Quantum Cryptography)
  ・Kyber(ML-KEM):格子暗号 ─ 鍵交換 → NIST 標準化(FIPS 203, 2024)
  ・Dilithium(ML-DSA):格子暗号 ─ 署名 → NIST 標準化(FIPS 204, 2024)
  ・SPHINCS+(SLH-DSA):ハッシュベース署名 → 安全マージン高

「Harvest Now, Decrypt Later」攻撃

量子計算機が完成するまで待つ必要はありません。攻撃者は 今のうちに暗号通信を全部記録 しておき、将来の量子計算機で復号することができます。長期機密(政府文書・医療記録・知財)今すぐ PQC に移行 する必要があるため、Cloudflare、Google、Apple、AWS などが既に ハイブリッド ECDH + Kyber 方式の TLS を実用化しています(2024 年現在)。

PQC への移行ロードマップ

時期主な動き
2016NIST が PQC 公募開始
2022第1回受賞者発表(Kyber, Dilithium, Falcon, SPHINCS+)
2024 8月FIPS 203/204/205 として標準化完了
2024〜Cloudflare・Google・Apple が TLS で X25519+Kyber768 ハイブリッドを実装
2025〜OpenSSH 9.9 が PQC をデフォルト有効化
2030 年代量子計算機が現実の脅威に → 全面移行が必須

つながる知識: PQC は「単に新しい暗号を選ぶ」だけでは済みません。鍵サイズが大きい(Kyber768 の公開鍵 ~1184 バイト、署名 ~2400 バイト)、計算量が増える過去の機器が対応できない など、運用面の影響が大きい。今後 10 年は「ハイブリッド方式(ECDHE + Kyber 等を併用)」で 古典暗号と PQC を併用 しながら徐々に移行する見込みです。

確認: Shor アルゴリズムが量子計算機で動いた場合、影響を受けない暗号はどれか。

正解:D。Shor アルゴリズムは「素因数分解」「離散対数」を多項式時間で解く。RSA・DH・ECDH・ECDSA・Ed25519 はすべてこの 2 種類の困難性に立脚しているので 全滅。一方、AES のような共通鍵暗号は数論的構造ではなく純粋なビット操作で構成されるため、Shor は適用できない。共通鍵には Grover アルゴリズムが影響するが 鍵長を倍にすれば防げる。だから「PQC が必要なのは公開鍵側だけ」「共通鍵は AES-256 で生き残る」というのが量子時代の戦略。

まとめと用語チェック

SUMMARY 1. 公開鍵暗号は 事前共有なし で秘密通信を可能にする発明(1976 年)
2. RSA は素因数分解の困難さに依拠。m^e mod n で暗号化、c^d mod n で復号
3. Diffie-Hellman は離散対数問題に依拠した 鍵交換 アルゴリズム
4. 楕円曲線暗号(ECC) は同じ強度を 1/12 の鍵長で実現 → モダン標準
5. ハイブリッド暗号:公開鍵で鍵交換 → 共通鍵で本文(TLS、WireGuard、GPG すべてこのパターン)
6. Curve25519 / Ed25519 はモダン暗号の事実上の標準
7. Shor アルゴリズム で公開鍵は完全に破られる → PQC(Kyber/Dilithium) へ移行中

用語チェック

用語1行説明
公開鍵暗号 / 非対称暗号2 つの鍵を使う。事前共有なしで秘密通信が可能
RSA1977 年。素因数分解の困難さに依拠
Diffie-Hellman 鍵交換1976 年。離散対数問題に依拠
ECDH / ECDHE楕円曲線版 DH。Ephemeral 化したもの
ECDSA / Ed25519楕円曲線版の署名アルゴリズム
Curve25519djb 設計の楕円曲線。WireGuard・SSH・TLS で標準
離散対数問題g^a mod p から a を求める。古典では困難
素因数分解問題n=pq から p, q を求める。古典では困難
OAEP パディングRSA を安全に使うためのパディング(RFC 8017)
ハイブリッド暗号公開鍵で鍵交換、共通鍵で本文の組み合わせ
Forward Secrecy(前方秘匿性)セッション鍵を後から復元不可能にする性質
Shor アルゴリズム量子計算機で素因数分解・離散対数を多項式時間で解く
PQC(耐量子暗号)量子計算機にも耐える新世代暗号(Kyber/Dilithium 等)
Kyber(ML-KEM)NIST 標準化された格子暗号。鍵交換用 PQC
Dilithium(ML-DSA)NIST 標準化された格子暗号。署名用 PQC
NEXT: 次回 第38回 ハッシュ関数・MAC では、データの 完全性(改ざん検知) を担う暗号プリミティブを扱います。SHA-2/3、HMAC、用途(パスワード保管、ブロックチェーン、ファイル整合性)まで踏み込みます。続く第39回でハッシュと公開鍵を組み合わせた ディジタル署名 へ。

確認問題

問1. 公開鍵暗号(非対称暗号)が共通鍵暗号に対して持つ 本質的な利点 として、最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. 暗号化処理が高速
B. 事前に秘密鍵を共有する必要がない
C. 鍵長が短くて済む
D. 量子計算機にも耐える
正解:B
公開鍵暗号の最大の発明は「公開鍵を世界中に配り、対応する秘密鍵だけが復号できる」という非対称性。これにより 事前共有不要 で初対面のサーバとも秘密通信を始められる。A/C は逆(共通鍵の方が高速・短鍵長)。D も逆(Shor アルゴリズムで破綻するのは公開鍵)。

問2. RSA の安全性は何に依拠しているか。

次の選択肢から最も適切なものを選択してください。
A. 楕円曲線上の点の加算の困難さ
B. ハッシュ関数の衝突困難性
C. AES の S-box の非線形性
D. 大きな合成数 n = p × q を素因数分解することの困難さ
正解:D
RSA は 素因数分解問題 に依拠。掛け算は速いが、結果から元の素数を求めるのは古典コンピュータでは指数時間。Shor アルゴリズムは量子計算機でこれを多項式時間で解いてしまうため、量子時代に RSA は破綻する。A は ECC、B はハッシュ、C は AES の話。

問3. Diffie-Hellman 鍵交換について、正しい記述はどれか。

次の選択肢から最も適切なものを選択してください。
A. 暗号文を直接作る暗号化アルゴリズム
B. ハッシュ関数の一種
C. 公開チャネルで2人が同じ秘密値を共有するための鍵交換アルゴリズム
D. デジタル署名アルゴリズム
正解:C
DH は 鍵交換専用 のアルゴリズム。アリスとボブが公開チャネル上で各自の公開値を交換し、秘密値と組み合わせて 同じ秘密鍵 K = g^(ab) mod p を独立に計算できる。これにより、暗号化前に共通鍵を安全に共有できる。

問4. RSA-3072 と同等の安全性を持つ楕円曲線(EC)の鍵長として、最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. 256 bit(P-256, Curve25519)
B. 1024 bit
C. 2048 bit
D. 3072 bit(同じ鍵長)
正解:A
ECC は 同じ強度を非常に短い鍵長で実現 できる。NIST 推奨では RSA-3072 ≈ ECC-256(P-256 や Curve25519)。これがモバイル・IoT・ブラウザで ECC が標準化された理由。RSA を使い続けるなら 3072+ bit が現代水準だが、ECC なら 256 bit で済む。

問5. 量子計算機が公開鍵暗号(RSA・ECDH)に与える影響について、最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. 鍵長を 2 倍にすれば安全
B. 影響はまったくない
C. Shor アルゴリズムで素因数分解・離散対数が多項式時間で解け、現行の RSA / ECDH は実質破綻する
D. ECC は影響を受けない
正解:C
Shor アルゴリズムは素因数分解と離散対数を量子計算機で多項式時間で解いてしまう。これは RSA・DH・ECDH すべてが基盤としている数学的困難性 を破壊する。共通鍵の Grover とは違い、鍵長を伸ばしても本質的な解決にならない。対策は 全く別の数学(格子・ハッシュ)に基づく PQC への移行のみ。
← PREV
第36回 共通鍵暗号(AES)
NEXT →
第38回 ハッシュ関数・MAC