パスワードを守るAPOPの認証
最後に、APOP認証について詳しく説明しよう。USERコマンドとPASSコマンドを用いたユーザー認証は、平文でユーザーIDとパスワードを送信している。そのため、パケットキャプチャなどでPOPのセッションを覗くことで簡単に見えてしまう。これはPOP3のセキュリティ上の脆弱性としてよく知られていることである。APOPコマンドは、POPにおいて安全なユーザー認証を行なうために用意されたコマンドなのだ。
APOPコマンドを使った認証は、任意のデータを固定長のユニークな文字列に変換するMD5(Message Digest Algorithm 5)アルゴリズムを利用したものである。まずAPOPコマンドをサポートしているサーバは、POP3サーバの接続が確立されたときに返す応答にタイムスタンプを追加する。
よく使われているタイムスタンプのフォーマットとしては、「process-id.clock@hostname」がある。これはPOP3サーバプロセスのユニークな識別子を示す整数とサーバシステム時刻を示す整数にホスト名を加えたものだ。このタイムスタンプはプロセスIDと時刻情報を組み合わせ、2つと同じ値にならないように工夫されたフォーマットである。
クライアントは、このサーバからの応答と共有鍵をつないだ文字列のMD5ダイジェスト文字列を生成する。ここで共有鍵としてパスワードが使われる。つまり、図2に示すようにサーバからの応答に「himitsu」というパスワードを連結し、それをMD5アルゴリズムで処理した16オクテット(バイト)のダイジェスト文字列を得る。クライアントはAPOPコマンドのパラメータとして、ユーザーIDと計算して得られたダイジェスト文字を添えてサーバに送信する。

図2●APOP認証
一方、サーバは自らが応答したタイムスタンプとユーザーIDから登録されているパスワードを取得し、同じアルゴリズムでダイジェスト文字を計算する。計算して得たダイジェストとAPOPコマンドで送られたダイジェストが同一ならば認証は成功というわけだ。
接続要求の応答に含まれるタイムスタンプの値が毎回変わるので、パスワードを変えなくても、MD5アルゴリズムの処理結果は毎回違った値を得られる。また時刻情報であるため、この通信を傍受し、別の機会に傍受したAPOPコマンドのパラメータでアクセスしても一致しないので、リプライ攻撃を防ぐこともできる。
本記事は、ネットワークマガジン2007年12月号の特集1「電子メールプロトコル再入門」を再編集したものです。内容は原則として掲載当時のものであり、現在とは異なる場合もあります。 |

この連載の記事
- 第9回 いろいろな場所で同じメールを読めるIMAPの仕組みとは?
- 第7回 メールの受信用に作られたPOPを学ぶ
- 第6回 SMTPの拡張機能を確かめる「EHLOコマンド」を知ろう!
- 第5回 メールを送る際に使われるSMTPの仕組みとは?
- 第4回 メールの添付ファイルを実現するMIMEのマルチパートとは?
- 第3回 メール誕生からある「7ビットの制約」を越えるMIMEとは?
- 第2回 メールの宛名はどこにある?ヘッダを理解する
- 第1回 電子メールを基礎の基礎から学んでいこう
- 電子メールプロトコル再入門<目次>
- この連載の一覧へ