公開鍵暗号とは何か — RSA・ECC・鍵交換・PKI・TLS・ポスト量子暗号までの総合解説
公開鍵暗号方式とは何か — 基本の理解
公開鍵暗号方式(こうかいかぎあんごうほうしき、Public-key cryptography)は、暗号の鍵を「公開鍵」と「秘密鍵(秘密鍵)」の二つに分けて運用する方式です。公開鍵は誰でも入手できるよう公開し、秘密鍵は所有者だけが保持します。公開鍵で暗号化したデータは対応する秘密鍵でしか復号できず、逆に秘密鍵で署名したデータは対応する公開鍵で検証できます。
なぜ公開鍵暗号が必要か — 対称鍵暗号との役割分担
対称鍵暗号(共通鍵暗号)は高速ですが、暗号化・復号のために受信者と送信者が同じ鍵を安全に共有する必要があります。公開鍵暗号は鍵の共有問題を解決し、安全なチャネルがない状況でも鍵交換や電子署名、認証を可能にします。ただし公開鍵暗号は計算コストが高いため、実際の通信では公開鍵暗号で「一時的な共通鍵(セッション鍵)」を安全にやり取りし、その後は高速な対称鍵暗号で大量データを暗号化する「ハイブリッド暗号方式」が一般的です。
主要な方式と数学的な基礎
RSA:素因数分解の困難性に基づく方式。公開鍵(n, e)、秘密鍵(d)を用いる。歴史的かつ広く使われているが、適切なパディング(RSA-OAEP/RSA-PSS)を使わないと安全でない。
Diffie–Hellman(DH):1976年に提案された鍵共有(鍵交換)方式。素体上の離散対数問題の難しさに依存する。直接の暗号化ではなく安全な共通鍵を生成するために使われる。
ElGamal:離散対数問題に基づく暗号/署名方式の一つで、DHの考え方を応用したもの。可変長暗号化や一時鍵(ランダムネス)を用いる。
楕円曲線暗号(ECC):楕円曲線上の離散対数問題(ECDLP: Elliptic Curve Discrete Logarithm Problem)の難しさに基づく。鍵長あたりの安全性が高く、同等の安全性を提供するRSAよりも短い鍵で済むため、モバイルや組み込み機器で人気(例:ECDSA署名、ECDH鍵交換、Ed25519/Curve25519など)。
暗号方式の用途:暗号化と電子署名
暗号化(機密性):受信者の公開鍵でデータを暗号化し、受信者の秘密鍵で復号する。例:PGPでのファイル暗号化や、TLSでの鍵交換によるセッション鍵の伝達。
電子署名(認証・改ざん検出・否認防止):送信者が自分の秘密鍵でデータに署名し、受信者は送信者の公開鍵で署名の正当性を検証する。署名は作成者の認証、データの整合性、作成者の否認防止(non-repudiation)に利用される。署名方式の例:RSA署名、DSA、ECDSA、Ed25519、RSA-PSSなど。
公開鍵基盤(PKI)と証明書
公開鍵だけをそのまま信頼するのは危険です。誰でも公開鍵を宣言できるため、その鍵が本当にその人物(または組織)に属するかを第三者が保証する仕組みが必要です。これがPKI(Public Key Infrastructure)です。代表的な要素:
- CA(認証局):公開鍵と所有者情報を紐づけた証明書(X.509)を発行する。
- 証明書チェーン:中間CAを経由してルートCAまで続く信頼の連鎖。
- 検証手続き:証明書の有効期限、失効確認(CRL/OCSP)、ホスト名一致などをチェック。
WebブラウザのHTTPS、メールのS/MIME、コード署名などでPKIが使われています。一方でCAの誤発行やルートCAの漏洩が起きると大きな被害となるため、Certificate Transparencyや強化された監査、ピンニングなどで信頼性を高める努力が続いています。
実際のプロトコルでの利用例
- TLS(HTTPS):サーバー認証(サーバ証明書)と鍵交換(RSA、DHE/ECDHE、TLS1.3では基本的に(EC)DHE)を用い、結果として得たセッション鍵で対称暗号(AES-GCM、ChaCha20-Poly1305)を使う。
- SSH:公開鍵認証や鍵交換(Diffie-Hellman、ECDH、Curve25519)を用いて安全なシェル接続を確立する。
- PGP/OpenPGP:ユーザー間の公開鍵によりメールなどを暗号化/署名する。Web of Trustという別の信頼モデルも持つ。
- コード署名:ソフトウェアやパッケージの整合性と発行者を保証するために署名を利用する。
セキュリティ上の注意点と攻撃手法
公開鍵暗号は理論的に安全でも、実装や運用の不備で攻撃を受けます。主なリスク:
- 鍵管理の失敗:秘密鍵の漏洩は致命的。HSM、TPM、スマートカードでの保護やパスフレーズ管理、アクセス制御が必要。
- 乱数生成の不備:鍵生成や署名で使うランダム値が弱いと秘密鍵が推定される。(例:過去には組み込み機器の不良乱数で秘密鍵が破られた事例あり)
- サイドチャネル攻撃:電力消費や実行時間(タイミング)、電磁波から秘密情報が漏れる。
- プロトコルの脆弱性:パディングの扱いミス(パディングオラクル)、古い暗号スイートへのフォールバックなど。
- 量子コンピュータによる攻撃:ショアのアルゴリズムは整数の素因数分解や離散対数問題を多項式時間で解くため、現在のRSA/ECCは長期的に脅かされる。
パディングと安全な利用法
公開鍵暗号の安全な利用には適切なパディングやプロトコル設計が不可欠です。代表例:
- RSAでは生のRSA暗号(textbook RSA)を直接使うと危険。暗号化にはRSA-OAEP、署名にはRSA-PSSが推奨される。
- 選択平文攻撃や選択復号攻撃を防ぐために、暗号モードやパディング、認証付き暗号(AEAD)を組み合わせる。
鍵長と安全性の目安
鍵長はアルゴリズム毎に推奨値が異なります。近年の目安:
- RSA:2048ビットが最低ライン(現時点では広く使われている)、高い安全性を求めるなら3072ビット以上。将来に備えるならより長い鍵や代替(ECCや量子耐性)を検討。
- ECC:P-256(NIST P-256)やCurve25519(X25519)がお勧め。一般にECDSA/ECDHの256ビットはRSA2048に相当する安全性を提供。
- 署名:Ed25519やECDSA(適切なパラメータ)など、安全で実装が検証された方式を選ぶ。
量子時代への移行(ポスト量子暗号)
量子コンピュータの進展によりRSA/ECCが将来的に脆弱となる可能性があるため、既にポスト量子暗号(量子耐性暗号)の標準化が進んでいます。NISTは複数のポスト量子暗号を最終候補として採択しており、鍵交換や署名で使える方式(例:CRYSTALS-Kyber、CRYSTALS-Dilithium、SPHINCS+など)が注目されています。移行期間中はハイブリッド設計(従来方式+ポスト量子方式の併用)も現実的な対策になります。
実務上のベストプラクティス(簡潔なチェックリスト)
- 最新のプロトコルと推奨暗号群を採用する(例:TLS 1.3、AEAD暗号、ECDHE/X25519など)。
- 秘密鍵はHSM/TPM/スマートカードで保護し、定期的にローテーションする。
- 信頼できるCAを利用し、証明書の失効と更新手順を確立する(OCSP Stapling、CRLの確認)。
- 適切な乱数生成器を使用する(システムCSPRNG、ハードウェア乱数)。
- 署名や暗号化の実装は既存の検証済みライブラリを利用し、自前実装は避ける。
- 重要なデータや長期保存するデータは、将来の量子リスクを考慮して保護設計を検討する(ハイブリッド暗号やポスト量子移行計画)。
よくある誤解
- 「公開鍵を公開すれば安全」:公開鍵は公開して良いが、鍵と所有者の紐づけを保証する仕組み(証明書や指紋確認)がないとなりすましの危険がある。
- 「公開鍵暗号だけで十分」:公開鍵暗号は鍵交換や認証に優れるが、実際の大量データ暗号化には対称鍵暗号の性能が必要。
- 「鍵長だけが安全性」:鍵長は重要だが、乱数や実装、運用(鍵保護、更新)が伴わないと安全性は確保できない。
まとめ
公開鍵暗号方式は、インターネット上で安全に通信・認証を行うための基盤技術です。RSAやDH、ECCといった多様な数学的基礎に基づき、暗号化・鍵交換・電子署名といった機能を提供します。一方で実装ミスや鍵管理、量子コンピュータの脅威など課題もあります。現実のシステム設計では、ハイブリッド暗号、適切なパディング・プロトコル、信頼できるPKI運用、HSMなどの運用面の対策を組み合わせることが重要です。将来に備え、ポスト量子暗号の動向を注視し計画的に移行を進めることも求められます。
参考文献
- RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3
- RFC 5280 - Internet X.509 Public Key Infrastructure Certificate and CRL Profile
- RFC 8017 - PKCS #1: RSA Cryptography Specifications (RSAES-OAEP, RSASSA-PSS)
- NIST SP 800-57 Part 1 Rev. 5 - Recommendation for Key Management
- NIST - Post-Quantum Cryptography and Quantum Risk
- NIST Post-Quantum Cryptography Project (選定候補等)
- R. Rivest, A. Shamir, L. Adleman, "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems" (RSA 原論文)
- RFC 4880 - OpenPGP Message Format
- D. J. Bernstein et al., "Ed25519: high-speed high-security signatures"(Ed25519の概要)
- Diffie–Hellman key exchange(解説、参考)


