共通鍵暗号方式
暗号化と復号に同じ鍵を使う暗号方式。処理が速いが、鍵を安全に相手へ渡す方法が課題になる。AESが代表的。
イマシルちゃんの解説
宝箱に鍵をかけて送るとき、受け取った人も同じ鍵を持っていれば開けられるよね。
共通鍵暗号方式は、そんな「送る人と受け取る人が同じ鍵を持つ」暗号なんだ。
とっても速く暗号にできるのがいいところ。
でも、その鍵をどうやって相手に渡すか……そこが一番の悩みどころなんだよ!
より深い解説
定義
共通鍵暗号方式は、暗号化と復号に同じ鍵を使う暗号方式である。送信者と受信者だけがその鍵を秘密に共有している必要がある。秘密鍵暗号方式、対称鍵暗号方式とも呼ばれる。
代表的な方式
| 方式 | 鍵の長さ | 現在の評価 |
|---|---|---|
| AES | 128、192、256ビット | 標準。ブロック長は128ビット |
| ChaCha20 | 256ビット | TLS 1.3で使われるストリーム暗号 |
| DES | 56ビット | 鍵が短く、総当たりで解読できるため使用不可 |
| 3DES(トリプルDES) | 112または168ビット相当 | 廃止が進んでいる |
公開鍵暗号方式との比較
| 共通鍵暗号方式 | 公開鍵暗号方式 | |
|---|---|---|
| 鍵 | 暗号化と復号で同じ鍵 | 暗号化は公開鍵、復号は秘密鍵 |
| 処理の速さ | 速い | 遅い |
| 鍵の受け渡し | 安全に渡す方法が必要 | 公開鍵は公開してよい |
| n人が互いに通信するときの鍵の数 | n(n−1)/2個 | 2n個(各人が公開鍵と秘密鍵の組) |
| 代表例 | AES | RSA、楕円曲線暗号 |
例えば10人が互いに秘密の通信をする場合、共通鍵暗号方式では 10 × 9 ÷ 2 = 45個の鍵が必要になる。
ハイブリッド暗号方式
TLSなどでは、2つの方式の長所を組み合わせる。
- 公開鍵暗号方式(や、それに基づく鍵交換)で、共通鍵を安全に共有する
- データ本体は、共有した共通鍵を使って、速い共通鍵暗号方式で暗号化する
これをハイブリッド暗号方式という。
ブロック暗号の利用モード
AESのようなブロック暗号は、決まった長さ(AESでは128ビット)ずつ暗号化する。それより長いデータをどうつなげて暗号化するかを利用モードという。
| モード | 特徴 |
|---|---|
| ECB | ブロックごとに独立して暗号化する。同じ平文のブロックは同じ暗号文になり、模様が透けて見えるため使うべきでない |
| CBC | 前のブロックの暗号文を次のブロックに混ぜる |
| GCM | 暗号化と同時に改ざん検知のための認証タグを作る(認証付き暗号)。TLSで広く使われる |