認証方法にはPLAIN、LOGIN、CRAM-MD5、DIGEST-MD5などがあります
PLAIN
「UserID\0UserID\0Password」というフォーマットで平文(無変換)またはBASE64化したデータで認証します。暗号化されていないため、SSL/TLSとの組み合わが推奨されます。
LOGIN
PLAINと同様ですが、ユーザーIDとパスワードをBASE64化します。一度にユーザーIDとパスワードを送るのではなく、ユーザーIDとパスワードを別々に送る点が異なります。
セキュリティ的 にはPLAINと同様にSSL/TLSとの組み合わせが必要です。
CRAM-MD5
CRAM(Challenge-Response Authentication Mechanism/チャレンジレスポンス認証)と呼ばれる認証方法が利用されます。
クライアントはサーバーからBASE64化されたタイムスタンプを受け取り、それをデコードします。クライアントはデコードした
タイムスタンプをパスワードをキーとしてMD5(Message Digest Algorithm 5)と呼ばれるアルゴリズムにより
ハッシュ値(d41d8cd98f00b204e9800998ecf8427eのような)を求めます。ハッシュ値にユーザーIDを加えBASE64化してサーバーに送ります。
サーバーはユーザーIDとパスワードを知っているので、送信したタイムスタンプのハッシュ値を求め、受信したハッシュ値と一致していたら
認証を許可します。パスワードがネットワークに流れないため、PLAINやLOGINと比較すると安全性が高まります。
DIGEST-MD5
CRAM-MD5であっても任意のタイムスタンプを組み合わることで、辞書攻撃や総当り攻撃(ブルートフォースアタック)などが可能です。
DIGEST-MD5はCRAM-MD5を拡張して、これらの攻撃への耐性を高めたものです。Realm(ドメイン)やURLの指定や
HMAC(Keyed-Hashing for Message Authentication)による暗号化に対応しています。