このページの本文へ

前へ 1 2 次へ

電子メールプロトコル再入門 第8回

パスワードを暗号化するAPOPも忘れずに!

メールクライアントの動作からPOPのやりとりを見てみよう

2011年03月24日 06時00分更新

文● 遠藤哲

  • この記事をはてなブックマークに追加
  • 本文印刷

パスワードを守る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「電子メールプロトコル再入門」を再編集したものです。内容は原則として掲載当時のものであり、現在とは異なる場合もあります。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事