STEP 1 専門記事

🔐 共通鍵 vs 公開鍵暗号|鍵長・TLSハンドシェイク・DH鍵交換まで深掘り解説

もふねこ

もふねこだよ🐾 今回は共通鍵と公開鍵の「仕組みの差」を、実際の数値・TLSの内部フロー・DH鍵交換まで踏み込んで解説するよ。入門じゃなく、ちょっと本気の専門記事だよ!

この記事の3秒まとめ

  • 共通鍵暗号:1本の鍵を使いまわす。高速だが「鍵配送問題」が弱点。
  • 公開鍵暗号:数学的に結びついた2本一組(公開鍵+秘密鍵)。鍵を渡さずに安全に使える革命的発明。
  • 現実のHTTPS通信:TLSハンドシェイクで「公開鍵暗号で共通鍵を安全に交換 → 共通鍵で高速通信」というハイブリッド方式を採用している。

🔑 共通鍵暗号(対称鍵暗号)とは?

共通鍵暗号(対称鍵暗号)は、暗号化と復号にまったく同じ1本の鍵を使う方式です。

もふねこ
もふねこ

共通鍵暗号の代表選手は「AES(Advanced Encryption Standard)」だよ。現代のデータ暗号化の主力選手なんだ🐾

🔢 鍵の長さ(ビット数)と安全性の関係

共通鍵の「強さ」は鍵のビット数で決まります。現代の標準はAESです。

アルゴリズム 鍵長 安全性の目安 用途
DES 56 bit ❌ 1998年に完全解読済み 現在は使用禁止
3DES 112/168 bit ⚠️ 非推奨(2024年に廃止勧告) レガシーシステム
AES-128 128 bit ✅ 現在安全(一般用途) HTTPS・ファイル暗号化
AES-256 256 bit ✅ 軍・金融レベルの安全性 政府・金融機関・軍事
読者
読者

AES-128の「128 bit」って、どのくらい強いの?

もふねこ
もふねこ

2の128乗通り≒340澗(3.4×10の38乗)というとんでもない組み合わせ数だよ。仮に世界中のスーパーコンピュータを全部使っても、宇宙の年齢をはるかに超える時間がかかるんだ🐾

しかし共通鍵暗号には根本的な問題があります。それが「鍵配送問題」です。

⚠️ 鍵配送問題とは?
アリスがボブに暗号通信したいとき、事前に「鍵」を安全に渡す必要があります。でも「その鍵をどうやって安全に渡すのか?」が解決できない——という200年以上解けなかった難問が「鍵配送問題」です。


🧩 公開鍵暗号(非対称鍵暗号)とは?

鍵配送問題を革命的に解決したのが、公開鍵暗号(非対称鍵暗号)です。1976年にDiffieとHellmanが理論を発表し、1977年にRivest・Shamir・Adlemanが最初の実用実装「RSA暗号」を開発しました。

仕組みは「数学的に結びついた2本一組の鍵ペア」を使います。

🔓
全員に配布してOK

公開鍵(Public Key)

メッセージを暗号化するための鍵。インターネット上に公開しても問題ない。
例:RSA-2048では2048ビットの整数

🗝️
絶対に秘密にする

秘密鍵(Private Key)

暗号化されたメッセージを復号するための鍵。本人のみが所持する。
盗まれると全通信が解読される

🔢 RSAの鍵長と安全性

RSA鍵長 安全性 相当する共通鍵 現状
512 bit ❌ 1999年に解読済み 共通鍵56bit相当 使用禁止
1024 bit ⚠️ 理論上解読可能 共通鍵80bit相当 非推奨
2048 bit ✅ 2030年頃まで安全 共通鍵112bit相当 現在の標準
4096 bit ✅ 長期安全性 共通鍵128bit相当 高セキュリティ用途

※ NISTガイドライン(SP 800-57)に基づく概算値。量子コンピュータが実用化されるとRSAの安全性は根底から変わります。


📡 ディフィー・ヘルマン(DH)鍵交換:現代の主流

読者
読者

RSAで公開鍵暗号を使えば鍵配送問題は解決できると思うんだけど、なぜTLSではDH鍵交換というものが主流なの?

もふねこ
もふねこ

鋭い質問!「前方秘匿性(Forward Secrecy)」という概念があるんだ。RSAの場合、秘密鍵が将来漏えいすると、過去の全通信記録も解読される可能性がある。でもDHなら、通信ごとに使い捨ての鍵を作るので、その心配がないんだよ🐾

DH鍵交換の仕組み(数値で理解する)

DH鍵交換は「公開した値から共通の秘密値を計算する」というトリックです。離散対数問題の困難さを利用しています。

⚙️ DH鍵交換の手順(簡略数値例)

① 公開パラメータを共有
素数 p = 23、原始根 g = 5 を全員に公開する(傍受されても問題ない)
② それぞれが秘密の乱数を選ぶ
アリス
秘密値 a = 6 を選ぶ
公開値 A = g^a mod p = 5^6 mod 23 = 8 を公開
ボブ
秘密値 b = 15 を選ぶ
公開値 B = g^b mod p = 5^15 mod 23 = 19 を公開
③ それぞれが「共通の秘密値」を計算
アリス:B^a mod p = 19^6 mod 23 = 2
ボブ :A^b mod p = 8^15 mod 23 = 2
🎉 二人は共通の秘密値「2」を共有できた!
傍受した第三者には「8」と「19」しか見えず、離散対数問題の困難さから秘密値を計算することはほぼ不可能

🌐 TLSハンドシェイク:HTTPSの内部で何が起きているか

ブラウザのアドレスバーに「🔒」マークが出るHTTPS通信では、毎回「TLSハンドシェイク」が行われています。これが共通鍵と公開鍵の「いいとこ取り」をする現実の実装です。

TLS 1.3 ハンドシェイクフロー(簡略版)
1
ClientHello(ブラウザ → サーバー)
対応している暗号スイート(TLS_AES_256_GCM_SHA384など)・DH公開パラメータを提示
2
ServerHello + Certificate(サーバー → ブラウザ)
選択した暗号スイートを返答 + SSL証明書(サーバーの公開鍵を含む)を送信
3
ECDHE鍵交換(双方向)
いわゆる「楕円曲線DH(ECDHE)」を使い、使い捨ての共通セッション鍵を双方が同時に導出。前方秘匿性(FS)を確保。
4
Finished(双方向)
ここまでの通信全体をSHA-256でハッシュ化して署名し、改ざんなし・なりすましなしを相互確認
5
Application Data(AES-GCMによる高速暗号通信)
この後は共通鍵(AES-256-GCM)でデータを高速に暗号化して送受信。ウェブページ・画像・動画すべてがここで流れる。
もふねこ
もふねこ

つまりHTTPSは「公開鍵で安全な入口を作り → 共通鍵で高速な大通りを走る」という2段階構造なんだ!これがハイブリッド暗号の本質だよ🐾


🔁 比較まとめ:共通鍵 vs 公開鍵

比較項目 共通鍵暗号 公開鍵暗号
鍵の本数1本(共有)2本(公開鍵+秘密鍵)
鍵の配布事前に安全な共有が必要公開鍵は誰でもOK
処理速度🚀 高速(AES)🐢 低速(RSA)
代表的鍵長128〜256 bit2048〜4096 bit
主な用途大量データの暗号通信鍵交換・デジタル署名
前方秘匿性(FS)ECDHE使用で確保

📌 まとめ:ハイブリッド暗号こそが現代のスタンダード

  • 共通鍵は速いが「鍵配送問題」がある
  • 公開鍵は遅いが「秘密の事前共有なし」で安全に通信できる革命的発明
  • 現代のHTTPS(TLS)は両者を組み合わせ:ECDHE で安全に鍵交換 → AES で高速通信
  • 量子コンピュータ時代を見据え、CRYSTALS-Kyber(格子ベース)などのポスト量子暗号への移行研究が進んでいる
もふねこ
もふねこ

この「ハイブリッド」のアイデアが、世界中の安全なネット通信を支えてるんだよ。暗号は一種類じゃなく、組み合わせることで最強になるんだ🐾

読者
読者

TLSの裏でこんなことが起きているなんて知らなかった!「🔒」マークがもっとリッパに見えるよ!

🔙 暗号の基礎 へ戻る