通信の暗号化が必要な場面
インターネット上で買い物をするとき、クレジットカードの番号などの個人情報を入力する場面があります。他人には知られたくない情報ですが、入力しないと買い物はできません。そこで、入力した内容が他人には見られないように「暗号化」して送信する、という方法が用いられます。それが「SSL(Secure Socket Layer)」という仕組みです。
Webサイトの場合には「https」が用いられ、利用者は何か操作をすることもなく、SSLを使用できます。このとき、画面のURL欄は「https」で始まるアドレスが表示され、鍵マークを確認できます。
公開鍵暗号とは
SSLで使われる暗号化方法は「公開鍵暗号」のひとつです。名前の通り、「鍵」が「公開」されていることがポイントです。実際には、南京錠のようなものをイメージすると良いでしょう。つまり、鍵がなくてもロックすることはできますが、鍵がないと開けることはできません。鍵穴は見えていますが、それに合う鍵を作ることは素人には困難ですよね。
AさんがBという会社に情報を送信する場合、会社BはAさんに南京錠を渡します。会社Bは南京錠の鍵を持っていますので、いったんロックすると会社B以外は開けることができません。Aさんは送信する情報を南京錠をかけた箱に入れて、会社Bに送ります。会社BはAさんから送られてきた箱を、鍵を使って開けるわけです。
鍵を持っていない他人が箱の中身を見ようと思っても、鍵がなければ開けることができないため、安全だということができます。これが「公開鍵暗号」の仕組みです。
悪意のある第三者の登場
ここで、どうしても箱の中身を見たい悪者が現れます。会社Bの鍵が無くてもなんとかして箱を開けようとします。ひとつの方法は、手当たりしだいに鍵を作って鍵穴に差し込んでみる、という方法です。
大量に鍵を作っていると、いつかは会社Bの持っている鍵と同じ形の鍵を作ることができるかもしれません。ここで重要になるのが「鍵長」と言われるものです。現在、SSLで用いられているRSA暗号では1024bitや2048bitといった長さが用いられています。現実的な時間では同じ形の鍵は作れない、というのが現在の状態で、安心できるレベルにあると言えます。
中間者攻撃の概要
もうひとつの方法は、「Man in the middle attack(中間者攻撃)」と呼ばれています。名前の通り、第三者が通信の「中間」に入るという方法です。Aさんが会社Bに情報を送信する際に、Cという犯罪者が間に入ります。つまり、Aさんは会社Bと通信しているつもりですが、実際には犯罪者Cと通信しています。会社BはAさんと通信しているつもりですが、実際には犯罪者Cと通信しています。
Aさんが会社Bに情報を送信するため、会社Bに南京錠を送るように依頼します。犯罪者Cはこの依頼をそのまま会社Bに転送しますが、会社Bが送り返してきた南京錠を受け取ると、別の南京錠をAさんに送ります。Aさんは犯罪者Cからの南京錠を会社Bのものと勘違いし、情報を入れて南京錠をロックして送信します。犯罪者CはAさんからロックされた箱を受け取りますが、この南京錠の鍵は犯罪者Cが持っています。つまり、犯罪者Cは箱を開けることができます。
やすやすと箱を開けた犯罪者Cは中身を確認したあとで、その中身を入れた箱を会社Bからの南京錠でロックして会社Bに送信します。会社Bは持っている鍵で箱を開けるとAさんからの情報を得ることができます。このとき、Aさんも会社Bも問題なく情報をやり取りできたように見えますが、実際には犯罪者Cによって情報を傍受されていたことになります。
さらに、犯罪者CはAさんから受け取った内容を改ざんして会社Bに送ることも可能です。こうなると、Aさんの送信した内容と会社Bの受け取った内容が変わっていますが、どちらも気づくことができないことになります。