🎓 レベル:標準 | 重要度:A(必須) 📎 前提:対称鍵暗号とハッシュ
要点(BLUF)
- 公開鍵暗号は鍵を「公開鍵」と「秘密鍵」のペアに分ける。公開鍵で暗号化したものは対の秘密鍵でしか復号できない。
- これにより鍵配送問題が解ける。相手の公開鍵は誰に見られてもよいので、事前の安全な共有が不要。
- 安全性は「逆向きの計算が現実的時間でできない」数学的困難性(素因数分解・離散対数・楕円曲線)に依存する → 数理分野へ。
概念:鍵を2つに分ける発想
対称鍵暗号(対称鍵暗号とハッシュ)の弱点は、通信前に同じ鍵を安全に渡さねばならないことでした。公開鍵暗号はこれを鍵を2つに分けることで解きます。
- 公開鍵(public key):誰に配ってもよい。暗号化(や署名検証)に使う。
- 秘密鍵(private key):本人だけが持つ。復号(や署名作成)に使う。
公開鍵で施錠したものは、対の秘密鍵でしか開けられません。だから公開鍵は名刺のように配れます。盗み見られても、復号には秘密鍵が要るので安全です。
仕組み:一方向の数学的「落とし戸」
公開鍵暗号は「片方向は簡単、逆は困難」な数学関数(落とし戸付き一方向関数)に基づきます。
- RSA:巨大な2つの素数の積は作りやすいが、積から素数に素因数分解するのは困難。
- 楕円曲線暗号(ECC):楕円曲線上の点の演算は容易だが、その離散対数を解くのは困難。同じ強度を短い鍵で実現でき、現代の既定になりつつある。
数学的な土台(素因数分解・離散対数・楕円曲線群)は数理分野で深掘りします。ここでは「逆計算が現実時間で不可能だから安全」という使う側の理解にとどめます。
⚠️ 将来:十分に強い量子計算機は RSA/ECC の困難性を崩しうるため、**耐量子暗号(PQC)**への移行が標準化中(要最新確認)。設計時は移行のしやすさ(クリプトアジリティ)も考慮します。
図解:公開鍵で施錠、秘密鍵で解錠
flowchart LR
A["送信者"] -->|"受信者の公開鍵で暗号化"| C["暗号文"]
C -->|"ネットワーク(盗聴されてもよい)"| B["受信者"]
B -->|"自分の秘密鍵で復号"| P["平文"]
note["公開鍵は配ってよい・秘密鍵は本人だけ"]
仕組み:実務はハイブリッド暗号
公開鍵暗号は対称鍵暗号よりずっと遅いので、大きなデータをそのまま暗号化しません。実際はハイブリッドにします。
- 通信用の使い捨て対称鍵(セッション鍵)を生成する。
- その鍵を相手の公開鍵で暗号化して渡す(鍵配送問題の解決)。
- 本文は速い対称鍵暗号(AES)で暗号化する。
つまり「鍵の受け渡しは公開鍵、本文は対称鍵」。これが TLS(TLSと安全な通信)の基本構造です。
防御側の使い方/設定
- 鍵長を十分に:RSA は 3072 bit 以上、ECC は 256 bit 以上が目安(要最新確認)。
- 秘密鍵を厳重に保管:HSM や OS のキーストアへ。漏れたら全部破られる。鍵の保管は シークレット管理。
- 生の RSA を使わない:適切なパディング(OAEP)付きライブラリを使う。自前実装は避ける。
- クリプトアジリティ:アルゴリズムや鍵長を後で差し替えられる設計にする(PQC 移行に備える)。
なぜ安全か:非対称性が配送を不要にする
公開鍵暗号の安全性は「公開鍵から秘密鍵を逆算できない」という非対称性にあります。暗号化に必要な情報(公開鍵)を全公開しても、復号に必要な情報(秘密鍵)は導けない。だから事前の安全な共有路がいらず、対称鍵暗号で困っていた鍵配送問題が消えます。
仕組みの直観
公開鍵暗号は南京錠を大量にばらまくイメージです。誰でも手に入る開いた南京錠(公開鍵)で箱を閉められますが、その鍵(秘密鍵)はあなたしか持っていません。だから知らない相手からでも、あなた宛ての箱に安全に施錠して送れます。RSA や ECC は「閉めるのは簡単、鍵なしで開けるのは天文学的に大変」な錠前です。
⚠️ よくある誤解・設定ミス
- 「公開鍵暗号は対称鍵より安全」だと思う:用途が違うだけ。速度の都合で実務はハイブリッド。
- 秘密鍵をサーバの平文ファイルに置く:漏えいで全崩壊。キーストア/HSM へ(シークレット管理)。
- 鍵長が短い・古い:強度不足。推奨鍵長は更新されるので要最新確認。
- 公開鍵の真正性を確かめない:偽の公開鍵をつかまされると中間者攻撃に弱い。だから証明書(デジタル署名と証明書(PKI))で公開鍵の持ち主を保証する。
対応 lab
公開鍵の「署名/検証」側の実証は次トピックの security-study/labs/digital_signature_demo.py(Ed25519)で行います。本トピックは鍵配送の概念整理が中心です。
関連
- 鍵配送問題の出どころ → 対称鍵暗号とハッシュ
- 公開鍵の持ち主を保証する → デジタル署名と証明書(PKI)
- 実際の鍵交換 → TLSと安全な通信