公開鍵暗号(非対称暗号とも呼ばれる)はSSL/TLSの基盤です。数学的に関連した鍵のペア — 1つは公開、1つは秘密 — を使用してデータを暗号化し、IDを検証し、セキュアな接続を確立します。すべてのHTTPS接続がこれに依存しています。
鍵ペアの概念
| 公開鍵 | 秘密鍵 | |
|---|---|---|
| 誰が持つか | 全員(証明書に含まれる) | サーバー所有者のみ |
| 暗号化できる | ✅ | ✅ |
| 復号できる | 秘密鍵で暗号化されたものだけ | 公開鍵で暗号化されたものだけ |
| 共有するか? | はい — それが目的 | 絶対にしない |
この魔法:公開鍵で暗号化されたデータは、対応する秘密鍵でのみ復号できます。その逆も同様です。2つの鍵は数学的にリンクされていますが、公開鍵から秘密鍵を導出することはできません。
SSL/TLSでの使用方法
公開鍵暗号はすべてのHTTPS接続で3つの目的を果たします:
1. 鍵交換 — 共有シークレットの確立
TLSハンドシェイク中に、サーバーとブラウザはトラフィックを暗号化するための共有セッション鍵に合意する必要があります。この鍵を平文で送信することはできません — 誰かが傍受する可能性があります。
解決策:Diffie-Hellman鍵交換(最新TLSでは特にECDHE)。両側がランダムな値を提供し、数学によって同じ共有シークレットを送信することなく計算できます。サーバーの秘密鍵はその貢献に署名し、サーバーのIDを証明します。
2. 認証 — IDの証明
サーバーのSSL証明書は公開鍵を含んでいます。証明書は認証局によって署名されています。ハンドシェイク中に、サーバーは対応する秘密鍵を保持していることを証明します。これにより、サーバーが証明書が言う通りのものであることが証明されます。
このステップなしでは、誰でもgoogle.comであると主張できます。
3. デジタル署名 — データの完全性の証明
秘密鍵はデジタル署名を作成できます — 特定のデータが鍵保持者によって署名され、改変されていないことの数学的証明です。TLSハンドシェイクメッセージは改ざんを防ぐために署名されます。
対称暗号 vs 非対称暗号
| 非対称(公開鍵) | 対称(セッション鍵) | |
|---|---|---|
| 鍵 | 2つ(公開 + 秘密) | 1つ(共有シークレット) |
| 速度 | 遅い(約1000倍遅い) | 高速 |
| 用途 | 鍵交換 + 認証 | 実際のデータの暗号化 |
| アルゴリズム | RSA, ECDSA, ECDHE | AES-GCM, ChaCha20 |
| TLSでの使用 | ハンドシェイク中のみ | ハンドシェイク後(すべてのトラフィック) |
HTTPSは両方を使用します:ハンドシェイクに非対称暗号(IDの証明、鍵の交換)、次に実際のデータ転送に対称暗号(はるかに高速なため)。
SSLを支えるアルゴリズム
RSA
まだ使用されている最も古い公開鍵アルゴリズム(1977年)。大きな素数の因数分解の難しさに基づいています。署名と鍵交換の両方に使用されますが、RSA鍵交換(Diffie-Hellmanなし)は前方秘匿性を提供せず、TLS 1.3からは削除されています。
ECDSA(楕円曲線デジタル署名アルゴリズム)
楕円曲線の数学を使用する最新の署名アルゴリズム。256ビットのECC鍵は3072ビットのRSA鍵と同等のセキュリティを提供します — 小さな鍵、高速な署名。GetHTTPSはデフォルトでECDSA P-256を使用しています。
ECDHE(一時的な楕円曲線Diffie-Hellman)
最新のTLSで使用される鍵交換メカニズム。「一時的」とは、接続ごとに新しい鍵ペアが生成されることを意味し、前方秘匿性を提供します。TLS 1.2と1.3の両方で使用されます。
AES-GCM
ハンドシェイク後に実際のトラフィックを暗号化するために使用される対称暗号。AES(Advanced Encryption Standard)+ GCM(Galois/Counter Mode)は暗号化と認証の両方を提供します。AES-NI命令により最新のCPUでハードウェアアクセラレーションされます。
GetHTTPSが公開鍵暗号をどう使用するか
GetHTTPSを使用する場合:
- ブラウザがWeb Crypto APIを使用して鍵ペアを生成 — TLS自体が使用するのと同じ暗号プリミティブ
- 公開鍵がLet’s Encryptに送信されるCSRに入る
- 秘密鍵はブラウザメモリに留まる — 送信されない
- Let’s Encryptが公開鍵に署名し、証明書を返す
- 証明書(公開)と秘密鍵の両方をサーバーにダウンロード
秘密鍵がブラウザメモリにのみ存在するため、GetHTTPSはリモートサーバーで鍵を生成するツールよりもプライバシーが高いです。
よくある質問
量子コンピューターは公開鍵暗号を破れますか?
現在の量子コンピューターではできません。しかし、ショアのアルゴリズムを実行する十分に強力な量子コンピューターがあればRSAとECCを破ることができます。業界はポスト量子暗号 — 量子攻撃に耐性のある新しいアルゴリズム(ML-KEM、ML-DSA)で準備しています。TLSはこれらを古典 + ポスト量子のハイブリッドモードで採用し、証明書の仕組みは変わりません。
すべてに非対称暗号を使わないのはなぜですか?
速度です。非対称操作は対称の約1000倍遅いです。RSAでWebページを暗号化すると実用的でないほど遅くなります。代わりに、TLSはハンドシェイク(約1ms)にのみ非対称暗号を使用し、データにはハードウェア速度で動作する対称暗号(AES)に切り替えます。
256ビットECC鍵は本当に十分安全ですか?
256ビットECCは約128ビットのセキュリティを提供します — 攻撃者がそれを破るには約2^128回の操作が必要です。これは観測可能な宇宙の原子数を超えています。予見可能な将来に対して安全です(完全に異なるアルゴリズムを必要とする量子コンピューターを除く)。
暗号化と署名の違いは何ですか?
暗号化: 機密性を保護。受信者の公開鍵で暗号化 → 秘密鍵のみが復号可能。 署名: 真正性を証明。秘密鍵で署名 → 公開鍵を持つ人は誰でも、それがあなたから来たもので改変されていないことを検証可能。TLS証明書は署名を使用し、TLSデータ転送は暗号化を使用します。