暗号って、スパイ映画みたいでかっこいいですね。
実は毎日使っているんだよ。ネットで買い物をするときのカード番号も、暗号で守られているんだ。今日は「鍵」の使い方に注目して2つの方式を学ぼう。
暗号化と復号
- 暗号化:データを、第三者が読めない形に変換すること
- 復号:暗号化されたデータを、元に戻すこと
このとき使う「変換のルール」が 鍵 です。
共通鍵暗号方式 ― 同じ鍵で閉めて開ける
暗号化と復号に同じ鍵を使う 方式です。家の鍵と同じで、閉めた鍵と同じ鍵で開けます。
| 良いところ | 困るところ |
|---|---|
| 処理が速い | 鍵を相手に安全に渡す方法が難しい(盗まれたら終わり) |
| 相手ごとに鍵が必要で、人数が増えると鍵が膨大になる |
公開鍵暗号方式 ― 南京錠を配る
暗号化と復号に違う鍵を使う 方式です。ペアになった2つの鍵を使います。
- 公開鍵:誰に知られてもよい鍵。みんなに配る
- 秘密鍵:自分だけが持つ鍵。絶対に人に渡さない
鍵をみんなに配っちゃって大丈夫なんですか?
南京錠を思い浮かべてごらん。開いた南京錠は誰でもカチッと閉められるけど、開けられるのは鍵を持っている人だけだよね。公開鍵は「開いた南京錠」、秘密鍵は「その南京錠を開ける鍵」なんだ。
暗号化して送るとき
- 暗号化:受信者の公開鍵
- 復号:受信者の秘密鍵
デジタル署名 ― 鍵の使い方が逆になる
公開鍵暗号のペアの鍵は、逆向きにも使えます。秘密鍵で変換したものは、ペアの公開鍵でしか元に戻せません。これを利用したのが デジタル署名 です。
印鑑やサインのデジタル版です。「この文書は確かに私が作りました」「途中で書き換えられていません」を証明できます。
- 送信者は、文書から作った要約データ(ハッシュ値)を送信者の秘密鍵で暗号化し、署名として文書に付けて送る
- 受信者は、署名を送信者の公開鍵で復号し、受け取った文書から作ったハッシュ値と比べる
- 一致すれば「本人が送った(なりすましでない)」「改ざんされていない」ことが確認できる
デジタル署名のとき
- 署名を作る:送信者の秘密鍵
- 署名を検証する:送信者の公開鍵
わかること → 本人確認(なりすまし防止) と 改ざんの検知
秘密鍵を使うのは、いつも「その鍵の持ち主」本人だけ。
- 暗号文を開けるのは受信者本人 → 受信者の秘密鍵
- 署名を作るのは送信者本人 → 送信者の秘密鍵
「誰の鍵?」で迷ったら、「その操作をしているのは誰か」を考えよう。
デジタル署名は 盗み見(盗聴)は防げません。署名を検証するための公開鍵は誰でも手に入るからです。内容を秘密にしたいなら、暗号化も組み合わせます。
公開鍵が本物か保証する ― 認証局
悪い人が「私がBです」と偽の公開鍵を配ったら困ります。そこで、認証局(CA) という信頼できる機関が、「この公開鍵は確かにBさんのものです」と証明する 電子証明書(デジタル証明書) を発行します。この仕組み全体を PKI(公開鍵基盤) といいます。
必要な鍵の数
n人が互いに秘密の通信をする場合
- 共通鍵暗号方式:n(n − 1) ÷ 2 個(2人の組合せの数だけ必要)
- 公開鍵暗号方式:2n 個(1人につき公開鍵と秘密鍵の2個)
例:10人の場合 → 共通鍵は 10 × 9 ÷ 2 = 45個、公開鍵暗号は 10 × 2 = 20個
2つの方式のまとめ
| 共通鍵暗号方式 | 公開鍵暗号方式 | |
|---|---|---|
| 使う鍵 | 暗号化も復号も同じ鍵 | 暗号化と復号で違う鍵(ペア) |
| 処理速度 | 速い | 遅い |
| 鍵の受け渡し | 安全に渡すのが難しい | 公開鍵は配ってもよい |
| 代表例 | AES | RSA |
実際の通信(Webサイトの TLS など)では、公開鍵暗号で共通鍵を安全に渡し、その後のデータは速い共通鍵暗号でやり取りする という組合せが使われます。これを ハイブリッド暗号方式 といいます。