共通鍵暗号と公開鍵暗号の違い|基本情報の暗号方式をわかりやすく解説
公開鍵で暗号化して、秘密鍵で復号する。あれ、署名のときは逆だった気がする。どっちがどっちだろう。
暗号の問題で、鍵の名前が入れ替わった選択肢を見て迷ったことはありませんか?
先に答えをお伝えします。共通鍵暗号と公開鍵暗号の違いは、暗号化と復号に使う鍵が同じかどうかです。
共通鍵暗号は同じ1つの鍵を使い、公開鍵暗号は公開鍵と秘密鍵というペアの別々の鍵を使います。共通鍵暗号は処理が速い代わりに鍵をどう渡すかが難しく、公開鍵暗号は鍵を渡しやすい代わりに処理が重い、という長所と短所の裏返しになっています。
この記事では、暗号の基本用語から始めて、2つの方式の仕組み、AESとRSAの位置づけ、鍵の数の計算、ハイブリッド暗号方式までを順に説明します。例題はすべてこの記事のために作ったものです。
暗号化の基本と2つの方式の違い¶
暗号化とは、元の文章を、鍵を持たない人には読めない形に変えることです。元の文章を平文(ひらぶん)、変えたあとのものを暗号文と呼びます。
暗号文を元の平文に戻すことは、復号といいます。
鍵とは何か¶
鍵とは、暗号化や復号の計算に使う秘密の値のことです。計算の手順(アルゴリズム)そのものは公開されていることが多く、安全さは鍵を知られないことで守られます。
身近なものにたとえると、暗号化の仕組みは鍵付きの箱に近いものです。箱の作りはだれでも知っていますが、鍵を持っている人しか中身を取り出せません。
2つの方式を表で比べる¶
まず、2つの方式の違いを一覧にします。細かい説明はこのあとの節で順に行います。
| 項目 | 共通鍵暗号 | 公開鍵暗号 |
|---|---|---|
| 暗号化の鍵 | 共通鍵 | 受信者の公開鍵 |
| 復号の鍵 | 同じ共通鍵 | 受信者の秘密鍵 |
| 鍵の数 | 1つを2人で共有 | 1人につき公開鍵と秘密鍵の1組 |
| 処理の速さ | 速い | 一般に遅い |
| 鍵の受け渡し | 安全に渡す方法が必要 | 公開鍵は公開してよい |
| 代表例 | AES | RSA、楕円曲線暗号 |
試験で問われるのは、この表の中身をどこまで理由とセットで説明できるかです。次の節から、1行ずつ意味を確かめていきます。
共通鍵暗号の仕組みと鍵配送の問題¶
共通鍵暗号とは、暗号化と復号に同じ鍵を使う方式です。送る人と受け取る人が同じ鍵を持ち、その鍵を第三者には知られないようにします。
同じ鍵で暗号化と復号をする¶
AさんがBさんに秘密のファイルを送る場面を考えます。AさんとBさんは事前に同じ共通鍵を持っておき、Aさんはその鍵でファイルを暗号化して送ります。
Bさんは同じ鍵で復号して、元のファイルを読みます。
途中で暗号文を盗み見た人がいても、共通鍵を持っていなければ中身は分かりません。鍵が1つで済み、計算も単純なので、大きなデータでも速く暗号化できるのが長所です。
共通鍵暗号の代表がAESです。AESとは、アメリカの標準として選ばれた共通鍵暗号の方式で、今も広く使われています。
鍵の長さは128ビット、192ビット、256ビットから選べます。それより前に使われていたDESは、鍵が短く今では安全とはいえないため、古い方式として名前が出てくる程度です。
鍵配送の問題とは¶
共通鍵暗号には、大きな弱点が1つあります。最初に、共通鍵そのものを相手にどうやって安全に渡すかという問題です。
これを鍵配送の問題と呼びます。
鍵を普通のメールで送ってしまうと、途中で盗み見られたときに暗号文もすべて読まれてしまいます。かといって、鍵を暗号化して送るには、また別の鍵が必要になります。
直接会って渡す方法もありますが、遠くの相手やはじめての相手には現実的ではありません。
人数が増えると鍵の数も増える¶
共通鍵暗号には、相手が増えるほど管理する鍵が増えるという課題もあります。2人ごとに別の鍵が必要なので、n 人がたがいに秘密の通信をするには、n 人から2人を選ぶ組み合わせの数だけ鍵が要ります。
式で書くと、共通鍵の数は n ×(n − 1)÷ 2 です。公開鍵暗号では1人につき公開鍵と秘密鍵の1組を持てばよいので、鍵の数は 2 × n になります。
自作の例題で計算してみましょう。
例題1 10人がたがいに秘密の通信をする。共通鍵暗号と公開鍵暗号では、それぞれ鍵がいくつ必要か。
共通鍵暗号は 10 ×(10 − 1)÷ 2 = 10 × 9 ÷ 2 = 45 個です。公開鍵暗号は 2 × 10 = 20 個です。
人数を変えると、差はさらに広がります。
| 人数 | 共通鍵暗号の鍵の数 | 公開鍵暗号の鍵の数 |
|---|---|---|
| 2人 | 1 | 4 |
| 10人 | 45 | 20 |
| 100人 | 4,950 | 200 |
100人なら 100 × 99 ÷ 2 = 4,950 個です。2人のときだけは共通鍵暗号のほうが少ないので、表の数字で式を確かめておくと取り違えを防げます。
公開鍵暗号の仕組みとRSA¶
公開鍵暗号とは、暗号化と復号に別々の鍵を使う方式です。2つの鍵はペアになっていて、片方で暗号化したものは、もう片方でしか復号できません。
公開鍵と秘密鍵の役割¶
ペアの片方は公開鍵と呼ばれ、名前のとおりだれに知られてもかまいません。もう片方は秘密鍵と呼ばれ、持ち主だけが厳重に保管します。
AさんがBさんに秘密のファイルを送る場面で考えます。Bさんはあらかじめ自分の公開鍵を公開しておきます。
Aさんはその公開鍵でファイルを暗号化して送り、Bさんは自分だけが持つ秘密鍵で復号します。
ここで大切なのは、暗号化に使うのが受信者の公開鍵だという点です。公開鍵はだれでも手に入るので、だれでもBさんあてに暗号文を作れます。
けれども復号できるのは、秘密鍵を持つBさんだけです。
鍵付きの箱でたとえると、公開鍵は「だれでも閉められる南京錠」、秘密鍵は「その南京錠を開けられる唯一の鍵」にあたります。南京錠を配っても、開けられるのは鍵を持つ人だけです。
この性質のおかげで、共通鍵暗号の鍵配送の問題を避けられます。
RSAと楕円曲線暗号¶
公開鍵暗号の代表がRSAです。RSAは、大きな数の素因数分解がとても難しいことを安全さの根拠にしています。
2つの大きな素数をかけ算するのは簡単でも、かけ算の結果から元の2つの素数を見つけるのは、コンピュータでも膨大な時間がかかるという性質です。
楕円曲線暗号も、公開鍵暗号の一種です。RSAと比べて短い鍵で同じくらいの安全さを得られるとされ、試験では公開鍵暗号の仲間として名前が出てきます。
公開鍵暗号は、共通鍵暗号に比べて一般に計算が重く、大きなデータの暗号化には向きません。この弱点を補うのが、次の節で説明するハイブリッド暗号方式です。
ハイブリッド暗号方式で長所を組み合わせる¶
ハイブリッド暗号方式とは、共通鍵暗号と公開鍵暗号を組み合わせて、両方の長所を生かす方法です。データ本体は速い共通鍵暗号で暗号化し、その共通鍵だけを公開鍵暗号で守って相手に届けます。
ハイブリッド暗号方式の流れ¶
AさんがBさんに大きなファイルを送る流れを、手順ごとに整理します。
| 手順 | だれが | やること |
|---|---|---|
| 1 | Aさん | その通信だけで使う共通鍵を作る |
| 2 | Aさん | ファイル本体を、その共通鍵で暗号化する |
| 3 | Aさん | 共通鍵を、Bさんの公開鍵で暗号化する |
| 4 | Aさん | 暗号化したファイルと、暗号化した共通鍵を送る |
| 5 | Bさん | 自分の秘密鍵で共通鍵を復号する |
| 6 | Bさん | 取り出した共通鍵でファイル本体を復号する |
公開鍵暗号で扱うのは、短い共通鍵だけです。重い計算は小さなデータで済み、大きなファイル本体は速い共通鍵暗号で処理できます。
共通鍵は公開鍵暗号で守られて届くので、鍵配送の問題も解決します。
Webサイトとの通信を暗号化するTLS(ブラウザのアドレス欄に鍵のマークが出るときの仕組み)も、公開鍵暗号の技術で共通鍵を安全に共有し、その後のデータは共通鍵暗号で暗号化するという考え方で作られています。
デジタル署名と混同しないために¶
冒頭の心の声のように、多くの人がつまずくのがデジタル署名との混同です。デジタル署名とは、送った人が本人であることと、途中で書き換えられていないことを確かめる仕組みです。
デジタル署名では、送信者が自分の秘密鍵で署名を作り、受信者は送信者の公開鍵で署名を確かめます。秘密鍵を持つのは送信者本人だけなので、公開鍵で確かめられれば本人が作ったものだと分かります。
目的によって、使う鍵の持ち主と使う順番が変わります。
| 目的 | 送信者が使う鍵 | 受信者が使う鍵 |
|---|---|---|
| 内容を秘密にする(暗号化) | 受信者の公開鍵 | 受信者の秘密鍵 |
| 本人であることを示す(署名) | 送信者の秘密鍵 | 送信者の公開鍵 |
覚え方の手がかりは、秘密鍵を使うのはいつも「その人にしかできないこと」だという点です。復号は受信者にしかできてはいけないので受信者の秘密鍵、署名は送信者にしか作れてはいけないので送信者の秘密鍵、と考えると迷いにくくなります。
自作の例題で確かめる¶
ここまでの内容を、選択肢を見比べる形の例題で確かめます。
例題2 AさんがBさんに、内容を秘密にしたメールを公開鍵暗号で送る。暗号化と復号に使う鍵の組み合わせとして正しいものはどれか。
ア 暗号化:Aさんの秘密鍵 / 復号:Aさんの公開鍵 イ 暗号化:Aさんの公開鍵 / 復号:Aさんの秘密鍵 ウ 暗号化:Bさんの公開鍵 / 復号:Bさんの秘密鍵 エ 暗号化:Bさんの秘密鍵 / 復号:Bさんの公開鍵
正解はウです。内容を秘密にしたいので、復号できるのは受信者のBさんだけでなければなりません。
だから復号にはBさんの秘密鍵を使い、暗号化にはそのペアであるBさんの公開鍵を使います。
アはデジタル署名の組み合わせです。Aさんの公開鍵はだれでも手に入るので、アの方法ではだれでも復号できてしまい、秘密は守れません。
例題3 ハイブリッド暗号方式で、Bさんの公開鍵を使って暗号化するものはどれか。
答えは、データ本体を暗号化した共通鍵です。データ本体を公開鍵暗号で暗号化すると処理に時間がかかるため、公開鍵暗号で守るのは短い共通鍵だけにします。
「本体は共通鍵、鍵は公開鍵」と一言で言えるようにしておきましょう。
取り違えやすい言い回し¶
選択肢では、正しい説明の一部だけを入れ替えた文がよく並びます。見かけたら立ち止まりたい言い回しを、表にまとめます。
| 選択肢の言い回し | どこがおかしいか | 正しくは |
|---|---|---|
| 送信者の公開鍵で暗号化する | 公開鍵はだれでも持てるので秘密にならない | 受信者の公開鍵で暗号化する |
| 公開鍵暗号は共通鍵暗号より高速 | 速さの関係が逆になっている | 一般に共通鍵暗号のほうが速い |
| 共通鍵暗号は鍵を公開してよい | 共通鍵を知られると復号されてしまう | 共通鍵は当事者だけで秘密に持つ |
| データ本体を公開鍵で暗号化する | ハイブリッド方式の役割が逆 | 本体は共通鍵、共通鍵を公開鍵で守る |
どの行も、鍵の持ち主と目的を言葉にすれば見抜けます。選択肢を読むときは「この鍵はだれのものか」「何を守りたいのか」の2つを確かめる習慣をつけましょう。
科目Bでの暗号の知識の使い方¶
暗号方式の用語は科目Aで問われますが、考え方は科目Bの情報セキュリティでも土台になります。科目Bでは、社内のメールやファイルのやりとりの事例を読み、どの対策が目的に合っているかを選ぶ問題が出ます。
暗号化は内容を秘密にする対策、デジタル署名は本人確認と改ざんの検知の対策です。事例の中で「何を守りたいのか」を読み取れれば、選択肢を絞りやすくなります。
情報セキュリティ分野の全体像と、科目Aと科目Bでの出方の違いは、こちらの記事でまとめています。
【関連記事】基本情報の情報セキュリティは何を勉強する?科目A・科目Bの対策を解説
科目Bの情報セキュリティにどれくらい時間をかけるかは、親記事が参考になります。擬似言語との配分もあわせて確かめておきましょう。
【関連記事】基本情報 科目Bの情報セキュリティ対策|擬似言語との勉強時間の配分を解説
暗号の考え方を、プログラムの側から見てみたい人もいるでしょう。科目Bの擬似言語では、文字をずらして暗号化する処理を追う問題もあります。
【関連記事】科目Bの暗号化問題の解き方|文字をずらす計算を表で追う
社内ネットワークの範囲を読む力も、セキュリティの事例問題では役に立ちます。同じ日に公開したこちらの記事もあわせてどうぞ。
【関連記事】基本情報のサブネットマスク計算|IPアドレスの範囲と使用可能台数の求め方
私たちの Giji Academy のセキュリティ講座では、会社のネットワーク構成をシミュレーターに出しながら、科目Bの情報セキュリティの考え方を学べます。暗号化や署名がどの場面で使われるのかを、構成図と一緒に確かめたい人はセキュリティ講座から始めてみてください。
まとめ¶
共通鍵暗号は、暗号化と復号に同じ鍵を使う方式で、代表はAESです。処理が速い一方で、鍵を安全に渡す鍵配送の問題があり、n 人なら n ×(n − 1)÷ 2 個の鍵が必要になります。
公開鍵暗号は、公開鍵と秘密鍵のペアを使う方式で、代表はRSAです。受信者の公開鍵で暗号化し、受信者の秘密鍵で復号します。
鍵を渡しやすい一方で計算が重いため、実際には共通鍵だけを公開鍵暗号で守るハイブリッド暗号方式がよく使われます。
秘密鍵は「その人にしかできないこと」に使う、と覚えておけば、暗号化と署名の取り違えは防げます。今日の表を見ながら、鍵の組み合わせを自分の言葉で説明してみてください。