前回「メールを安全に読み出すpop3s」に引き続き、メールを安全に読み出すための仕組み、pop3s、apop、pop3それぞれの性質を比較。PCからメールサーバまでpop3でも安全なケースもあるというが、pop3が安全でないケースはどんなときか?メールの転送中は安全なのか?
はたまた、pop3で読み出しだけ暗号化しても無意味なのではないか、などの素朴な疑問をさらに深く迫っていきます。
pop3s、apop、pop3を比較する
メールを安全に読み出すために
目次
pop3s、apop、pop3を比較する
1 メールを安全に読み出すために
ネットワークに生パスワードを送らずにすむapop
2 apopのハッシュってなんですか?
3 apopのどこに一方向ハッシュ関数?
pop3はどうしても危険なのか?
4 PCからメールサーバまで、pop3でも安全なケースも
5 pop3が安全じゃないのはどんなとき?
6 メール配送中は安全なんですか?
メールの読み出し暗号化の意義は?
7 たとえpop3sで読み出しだけ暗号化しても無意味では?
前回「メールを安全に読み出すpop3s」に引き続き、pop3s、apop、pop3それぞれの性質にさらに深く迫っていきます。表1で○は安全、×は安全でないことを表しています。また○の下にある説明は、安全にするための仕組みを書きました。
まずpop3は、本人確認、一覧読み出し、本文読み出し、いずれも安全ではありません。apopは、「ハッシュ」という暗号化の仕組みを使って本人確認は安全に行えます。しかしメール一覧やメール本文の読み出しは盗聴される可能性があります。一番安全なのはpop3sです。TLS/SSLの仕組みを使うことで、通信内容を暗号化(盗聴防止)し、また通信相手を特定する(なりすまし防止)ことができます。
プロトコル | (1)本人確認 | (2)一覧読出 | (3)本文読出 |
---|---|---|---|
pop3 | × | × | × |
apop | ○ ハッシュ |
× | × |
pop3s | ○ SSL |
○ SSL |
○ SSL |
表1 pop3s、apop、pop3の機能比較 |
ネットワークに生パスワードを送らずにすむapop
apopのハッシュってなんですか?
少し話がそれますが、apopで使われている「一方向ハッシュ関数」を簡単に説明しておきましょう。「一方向ハッシュ関数」とは、図1のような性質を持った関数です。ちょっとややこしいですが、じっくり読んでみてください。
一方向ハッシュ関数は……
- メッセージが不正に書き換えられていないか(改ざん)を見つけ出したり、パスワードを保護するためなどに使う
- メッセージダイジェスト関数とも呼ばれる
- 具体的にはMD5やSHA-1といった関数がある
何かの文字列を一方向ハッシュ関数に与えると、長さが一定の別の文字列に変換されます。図では「I have a pen」という文章が「4a25880d19034b05ea27a3de98109343」になっています。では元の文字列を「I have a pin」に変えるとどうでしょうか? 今度は「e2f830b0e1b4b9488b8f853cc53562e4」という結果になりました。元の文章は1文字違うだけなのに、結果はまったく違います(図中(1))。また、このとき結果から元のデータを逆算することは困難です(図中(2))。
このような性質のある一方向ハッシュ関数は、メッセージが不正に書き換えられていないか(改ざん)のチェックによく使われます。これは1文字違っているだけで結果がまったく違うこと、また結果から逆算するのが困難な性質を利用するものです。またapopでパスワードの保護に使う場合は、主に逆算がとても難しい性質を利用していると考えられます。
なお、一方向ハッシュ関数では、極めてまれですが、図中(3)のように元の文字列がまったく違うのに同じ結果をもたらすことがあります。ただ、その確率は実用上ほぼゼロになるように設計されています。また同じ結果が得られる元の値を逆算することは困難です。
apopのどこに一方向ハッシュ関数?
apopでは、パスワードをそのまま送る代わりに、一方向ハッシュ関数の結果をやりとりすることで、パスワードが正しいことを確認しています。
具体的には、図2のような動作をします。
まずpopサーバは「チャレンジ文字列」をユーザーPCに送ります。ユーザーPCでは、チャレンジ文字列にパスワードをくっつけて、それをMD5という種類のハッシュ関数に与えます。そうして得られた結果を「レスポンス文字列」として送り返します。
popサーバは、チャレンジ文字列と自分自身が知っているパスワードから、MD5によってレスポンス文字列を作っておきます。ユーザーPCからレスポンス文字列を受け取ったら、自分が作ったものと比較して、両方が同じだったら正しいパスワードだと判断します。これだけです。
ここでpopサーバとユーザーPCの間で、パスワードのやりとりをしていないことに注目してください。やりとりしているのはレスポンス文字列です。一方向ハッシュ関数の性質上、レスポンス文字列からその元になった値(チャレンジ文字列+パスワード)を逆算することは困難です。そのため、いくらネットワークが盗聴されたとしても、盗聴者がパスワードを知ることはできない、というわけです。
なお、実際のpopのやりとりを「連載第4回 TCP/IPアレルギー撲滅ドリル【超実践編】ちょっとジミなPOP3でメールを読む」で紹介していますので参考にしてください。
Copyright © ITmedia, Inc. All Rights Reserved.