安全な認証:APOPの利用

前の章で、POPを使ったメールの取り出し方を説明しました。 しかし、この方法には大きな問題があります。 それは、自分のパスワードをそのまま、ネットワークに流してしまう、ということです。

インターネットの世界では、ある人が本当にその人なのか、ということを知るためにパスワードを用いるのが普通です。 普通の世界では顔とか声とかで判断しますが、コンピュータはそういうものから判断するのが苦手なのです(もっとも、数年たてば状況は変化するかも知れませんが)。 そこで、「本人以外は知らない(はずの)」知識としてパスワードを使うわけです。 しかしながら、このようにしてパスワードをそのままネットワークに流してしまうと、 誰かにみられてしまうかも知れません(そして、パスワードの覗き見は実はそれほど難しいことではありません)。

パスワードが誰かに知られてしまうと、赤の他人があなたであるかのように装おうことが出来てしまいます。つまり、あなたのメールを読まれたり、あなたからのメールと偽ったメールを出したり、さらには何か悪いこと(いわゆるクラッキング)をしてもその責任を問われるのはあなた、ということにもなり得ます(だからパスワードを他人に知られるということは大変なことなのです)。 また、メールを読むときに必要という性格上、何度もパスワードを流すことになるので(例えば1日3回メールチェックするなら3回パスワードを流すことになります)、大変危険なのです。

そこで、本人かどうかの確認(パスワードのチェックのことで、「認証」とも いいます)をより安全にする方法としてAPOP: Authentified Post Office Protocol という方法がありますので、それについても簡単に説明します (→rfc1460rfc1725)。

APOP に対応したサーバに対してPOP を叩くと、次の様なものが帰ってきます。

+OK POP3 server ready <1298.719572824@mail.puni.net>

この<と>に囲まれたものを簡単に説明すると、 最初の1298 はこのpop server のpid (同時にいくつものプログラムが動いているコンピュータでは、それぞれのプ ログラムに番号を振って区別しています。pid: process ID というのはその番 号だと思ってください)です。 次の719572824 はそのPOP を繋いだ時間(年、月、日、時、分、秒)に関係す る値だと思ってください。さらに@の後に続いているのはこのマシンのFQDN (Fully Qualified Domain Name) と呼ばれるもので、POP が走っているコンピュー タの正式な名前、くらいに思っておけばだいたい合っています。 このように、同じものが再び出て来ることは二度とないような文字列を使っています。

それに対しての答えには、APOP というコマンドを使うのですが、返す文字列 がちょっと複雑です。今、mail.puni.net のアカウントが mimori で、APOP のパスワードが release だったとしましょう。すると、APOP に送る文字列は 次のようにして作ります。

まず、さっき送られてきた文字列とパスワードを繋ぎます

<1298.719572824@mail.puni.net>release

次に、その繋いだ文字列について、 MD5 というものを計算します。すると、さきほどの文字列はつぎのようになります。

3818d6b170812c9bbf9be88b37ffdcbc

それが「この場限りのパスワード」として機能します。下のように送ってください。

APOP mimori 3818d6b170812c9bbf9be88b37ffdcbc

これで正しければ認証は完了です。あとは LIST や RETR といった前章で説明 したコマンドが使えます。ちょっと複雑な処理は必要になりますが、パスワー ドが他人に洩れる危険性を考えるとAPOPを利用するべきと言えましょう。 なお、現在では多くのメーラーがAPOP に対応しているようです。

注意!:APOP では確かに認証は安全に出来ますが、メールの中身は依然として他人に覗き見される可能性はあります。

メールを取りにいこう〜POPのしくみ もくじへ


Yuki Mimori<mimori@puni.net>
$Id: apop.html,v 1.4 1999/10/19 21:20:35 s-v Exp $