共通鍵暗号 きょうつうかぎあんごう
対称鍵暗号AESDES暗号化復号鍵配送問題
共通鍵暗号について教えて
簡単に言うとこんな感じ!
送る人も受け取る人も「同じ鍵」でデータを暗号化・復号する方式だよ。南京錠で例えると、同じ鍵を持っている人しか開け閉めできない、ってイメージ!速くて効率的な反面、「その鍵をどうやって安全に渡すか」が悩みどころなんだ。
共通鍵暗号とは
共通鍵暗号(別名:対称鍵暗号)とは、データを暗号化するときと、暗号化されたデータを元に戻す(復号する)ときに、同一の鍵を使う暗号方式のことです。送信者と受信者が同じ鍵を共有しているため「共通鍵」と呼ばれます。
処理が軽く高速なため、大量のデータを暗号化するのに向いており、ファイルの暗号化やデータベースの保護、VPN通信など幅広い場面で実際に使われています。ただし、安全にやり取りするためには「どうやって鍵を相手に渡すか」という鍵配送問題が常につきまといます。
この問題を解決するために後から登場したのが公開鍵暗号(非対称鍵暗号)ですが、公開鍵暗号は処理が重いため、現実のシステムでは「鍵の受け渡しだけ公開鍵暗号でやって、実際のデータ通信は共通鍵暗号で行う」というハイブリッド方式が主流です。
共通鍵暗号の仕組みと種類
共通鍵暗号は、データの処理方法によって大きく2種類に分かれます。
| 方式 | 概要 | 代表的なアルゴリズム |
|---|---|---|
| ブロック暗号 | データを一定サイズのブロックに分割して暗号化 | AES、DES、3DES、Camellia |
| ストリーム暗号 | データを1ビット/1バイト単位で連続的に暗号化 | RC4、ChaCha20 |
代表的なアルゴリズムの比較
| アルゴリズム | 鍵の長さ | 安全性 | 現在の状況 |
|---|---|---|---|
| DES | 56bit | ❌ 脆弱 | 現在は使用禁止 |
| 3DES | 112〜168bit | △ 低下中 | 2024年以降非推奨 |
| AES | 128/192/256bit | ✅ 安全 | 現在の標準 |
| Camellia | 128/192/256bit | ✅ 安全 | AESと同等・日本発 |
| ChaCha20 | 256bit | ✅ 安全 | モバイル向けに普及 |
覚え方:「同じ鍵で締めて、同じ鍵で開ける」
南京錠のイメージが一番わかりやすいです。「同じ形の鍵を2本コピーして、1本を相手に渡す」、それが共通鍵暗号です。逆に公開鍵暗号は「誰でも入れられる投入口(公開鍵)と、自分だけが開けられる取り出し口(秘密鍵)」のある郵便受けのイメージです。
AESの鍵長と安全性の目安
| 鍵長 | 総当たりの組み合わせ数 | 現在の評価 |
|---|---|---|
| 128bit | 約3.4 × 10³⁸ 通り | 十分安全 |
| 192bit | 約6.3 × 10⁵⁷ 通り | より安全 |
| 256bit | 約1.2 × 10⁷⁷ 通り | 最高レベル |
歴史と背景
- 古代〜近代:シーザー暗号やエニグマなど、広い意味では「共通の規則を知る者同士だけが解読できる」方式が長く使われてきた
- 1977年:米国標準局(現NIST)がDES(Data Encryption Standard)を標準暗号として採用。56bit鍵のブロック暗号
- 1990年代後半:コンピュータの高速化によりDESへの総当たり攻撃が現実的になり、安全性が問題視される
- 1998年:DESへの総当たり攻撃成功(約56時間で解読)が実証され、廃止への流れが加速
- 2001年:NISTがAES(Advanced Encryption Standard)を新標準として採用。ベルギー発の「Rijndael(レインダール)」アルゴリズムが選ばれる
- 2000年代〜現在:AESがSSL/TLS・ディスク暗号化・クラウドストレージなどで事実上の世界標準に。日本発のCamelliaもISO標準として採用
共通鍵暗号 vs 公開鍵暗号
現代の暗号システムでは、共通鍵暗号と公開鍵暗号は対立するものではなく、それぞれの強みを組み合わせたハイブリッド方式が使われます。
TLS(HTTPS)でのハイブリッド方式の流れ
① ブラウザ ──[公開鍵を要求]──────────────────→ サーバー
② ブラウザ ←─[サーバーの公開鍵を送付]──────── サーバー
③ ブラウザ ──[共通鍵を公開鍵で暗号化して送信]→ サーバー
※サーバーだけが秘密鍵で復号できる
④ ブラウザ ←─[共通鍵で暗号化した通信]────────→ サーバー
※以降は高速な共通鍵暗号でやり取り
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| FIPS PUB 197 | NIST によるAES(Advanced Encryption Standard)の公式仕様 |
| RFC 3565 | CMS(暗号メッセージ構文)でのAES利用方法 |
| RFC 7539 | ChaCha20-Poly1305 ストリーム暗号の仕様 |
| RFC 5246 | TLS 1.2 仕様(共通鍵暗号のハイブリッド利用を規定) |
| RFC 8446 | TLS 1.3 仕様(AES-GCM・ChaCha20 を中心に再定義) |
関連用語
- 公開鍵暗号 — 暗号化と復号に異なる鍵ペアを使う方式。鍵配送問題を解決する
- AES — 現在の共通鍵暗号の世界標準アルゴリズム(Advanced Encryption Standard)
- DES — AES以前の標準共通鍵暗号。現在は安全性が低く使用禁止
- TLS — Webの暗号化通信(HTTPS)で使われるプロトコル。ハイブリッド方式の代表例
- 鍵配送問題 — 共通鍵を安全に相手へ渡す方法がないという根本的な課題
- ハイブリッド暗号 — 公開鍵暗号と共通鍵暗号を組み合わせた現代の主流方式
- デジタル署名 — 公開鍵暗号を応用してデータの改ざん・なりすましを防ぐ技術
- PKI(公開鍵基盤) — 公開鍵の正当性を証明する仕組み。デジタル証明書を管理する体系