Public-Key Cryptography - Asymmetric Encryption
About 2 min read
公開鍵暗号 (非対称暗号) とは、暗号化と復号に異なる 2 つの鍵 - 公開鍵と秘密鍵 - を 使用する暗号方式です。公開鍵は誰にでも配布でき、秘密鍵は所有者だけが保持します。 公開鍵で暗号化されたデータは対応する秘密鍵でしか復号できず、秘密鍵で作成された 署名は公開鍵で検証できます。この非対称性が、インターネット上の安全な通信とデジタル署名の 基盤を形成しています。
歴史的背景 - 暗号学の革命
1976 年、 Whitfield Diffie と Martin Hellman が論文「New Directions in Cryptography」で 公開鍵暗号の概念を発表しました。それまでの暗号は送信者と受信者が同じ鍵を 事前に共有する必要があり、鍵の安全な配送が最大の課題でした。翌 1977 年、 Ron Rivest 、 Adi Shamir 、 Leonard Adleman の 3 人が RSA 暗号を考案し、 公開鍵暗号が実用化されました。 RSA は大きな素数の積の素因数分解が困難であるという 数学的性質に安全性の根拠を置いています。 1985 年には Neal Koblitz と Victor Miller が 独立に楕円曲線暗号 (ECC) を提案し、 RSA より短い鍵長で同等の安全性を実現しました。 現在の TLS 1.3 では ECC が標準的に使われています。
仕組み
公開鍵暗号の核心は「一方向関数」にあります。大きな素数同士の掛け算は簡単ですが、 その積から元の素数を求める (素因数分解) のは極めて困難です。 RSA はこの性質を利用し、 ECC は楕円曲線上の離散対数問題の困難さを利用します。いずれも、現在のコンピュータでは 十分な鍵長があれば解読に天文学的な時間がかかります。
対称鍵暗号との比較
| 観点 | 対称鍵暗号 (AES 等) | 公開鍵暗号 (RSA / ECC) |
|---|---|---|
| 鍵の数 | 送受信者で同一の 1 つ | 公開鍵と秘密鍵の 2 つ |
| 処理速度 | 高速 (100 倍以上) | 低速 |
| 鍵配送問題 | 安全な経路が必要 | 公開鍵は公開可能 |
| 主な用途 | 大量データの暗号化 | 鍵交換、署名、認証 |
実際の通信では両者を組み合わせたハイブリッド方式が主流です。TLS のハンドシェイクでは、 まず公開鍵暗号で共通鍵を安全に交換し、以降のデータ通信は高速な対称鍵暗号で行います。 この仕組みにより、鍵配送の安全性と通信の高速性を両立しています。暗号化の基礎の 記事でも詳しく解説しています。
デジタル署名との関係
公開鍵暗号は暗号化だけでなく、デジタル署名にも使われます。署名の場合は 暗号化とは逆方向に鍵を使います。送信者が秘密鍵でデータのハッシュ値に署名し、 受信者が公開鍵で検証します。これにより、データの改ざん検知と送信者の本人確認が 同時に実現できます。PKI (公開鍵基盤) は、 公開鍵の正当性を証明書で保証する仕組みであり、 Web サイトの HTTPS 通信を支えています。
現場での使用例
「SSH 鍵認証を全社に導入した際、 RSA 4096 ビットから Ed25519 (楕円曲線ベース) に 切り替えました。鍵長が短くなり認証速度が向上した上、セキュリティ強度も向上しています。」
量子コンピュータの脅威と耐量子暗号
量子コンピュータが実用化されると、 Shor のアルゴリズムにより RSA や ECC の 安全性の根拠である素因数分解・離散対数問題が効率的に解かれる可能性があります。 これに備え、 NIST は 2024 年に ML-KEM (格子暗号ベースの鍵カプセル化) と ML-DSA (格子暗号ベースのデジタル署名) を耐量子暗号の標準として正式に発表しました。 Google Chrome は既に TLS 接続でハイブリッド鍵交換 (従来の ECC + ML-KEM) を デフォルトで有効にしています。耐量子暗号とパスワードセキュリティの 記事で今後の影響を詳しく解説しています。
よくある誤解
「公開鍵暗号は対称鍵暗号より安全」という誤解がありますが、安全性の種類が異なります。 AES-256 は量子コンピュータに対しても一定の耐性がある一方、 RSA-2048 は 量子コンピュータで破られる可能性があります。また、「公開鍵を公開しても問題ない」は 正しいですが、公開鍵の正当性を検証しなければ中間者攻撃の リスクがあります。だからこそ証明書による公開鍵の検証が不可欠なのです。 暗号技術を体系的に学びたい方には、cryptography textbooks on Amazonが参考になります。
Was this article helpful?