暗号化した通信はtcpdumpでどう見えるか
通信経路の暗号化
先に述べたように、APOP認証方式を用いてパスワードを暗号化することによって、通信パケットが盗聴されたとしても、ユーザーのパスワードが漏えいすることを防ぐことができます。しかし、この方法を用いた場合には、ユーザーのパスワードのみしか暗号化されず、それ以外の内容に関しては平文のまま通信が行われます。
そのため、例えばクレジットカードの情報などのように、通信内容自体に重要な情報が含まれるような場合には、その情報が漏えいしてしまう危険性があります。
また、APOP認証方式にはその認証手順や使用しているハッシュ関数自体に含まれる脆弱性のために、第三者によって暗号化された値が解読されてパスワードが漏えいしてしまう危険性が指摘されています(参考:独立行政法人 情報処理推進機構「APOP(エーポップ)方式におけるセキュリティー上の弱点(脆弱性)の注意喚起について」(http://www.ipa.go.jp/security/vuln/200704_APOP.html)。この問題については、現時点では根本的な対策方法は存在していません。
そこで、これらの問題を回避する方法として、SSL/TLSを利用して通信経路自体を暗号化することが推奨されています。SSL/TLSを用いた場合、送信ホストはパケットを送信する際に、データ部分を暗号化して送信します。そのため、第三者が通信パケットを盗聴したとしても、通信内容(パケットのデータ部分)を知ることができないようになっています。
POP3においては、SSL/TLSを用いた通信はPOP3 over SSL(POP3S)と呼ばれています。POP3S通信はPOP3用のデフォルトのポート番号である110番ポートではなく、通常995番ポートが用いられます。HTTPやSMTPなどほかのプロトコルにおいても、SSL/TLSを利用して通信を行う場合はそれぞれHTTPS、SMTPSと呼ばれ、通常の通信に使用されるポート番号とは別のポート番号を用いて通信を行います(通常、HTTPSは443番ポート、SMTPSは465番ポート)。
tcpdumpで通信内容を見てみる
では、実際にtcpdumpを用いて、POP3Sを用いてメールの受信を行っている通信の様子を閲覧してみます。図3-1のサンプルプログラムは、図2-2のサンプルプログラムにPOP3Sを用いて通信するように修正を加えたものです。また、図3-2はこのサンプルプログラムの実行したときの通信内容をtcpdumpで表示させた結果の一部を表しています。図3-2を見ると、パスワードのみならず、通信内容がすべて解読できない文字列に暗号化されていることが分かります。
必ずしもすべての場合において、通信内容を暗号化しなければならない訳ではありません。LAN内のように基本的には信用できる人のみで構成されたネットワーク内で利用するなど、セキュリティーに過敏にならなくても良いような場合も存在します。
また、利用しているサーバーがSSL通信をサポートしていない、またはサポートしていたとしてもサーバー証明書などの扱いが不適切であるなどの理由で、パスワード認証の際にはAPOPなどの認証方式を強いられる場面にも遭遇します。しかし、少なくともインターネットを介して(重要な)データの送受信を行う場合には、十分にセキュリティーに注意する(場合によっては、利用することを止める)必要があるだろうと思います。