自分のSMTPサーバーに対して、次の認証タイプから1つだけを選択する必要があるとします。
最適なセキュリティのためにどちらをお勧めしますか?
PS:リストはman swaks
で指定された認証タイプです
SSL/TLSでは、LOGIN
/PLAIN
を使用しても問題ありません。
SSL暗号化接続の上にSMTPを提供する必要があります。リストの一部のスキーム(例:DIGEST-MD5
)は、信頼できないチャネルを介してもパスワードを安全に保つことができますが、中間者攻撃によるセッションの改ざんからユーザーを保護することはできません。 (通常、電子メールサーバーは、ダイレクトTLS経由のSMTPまたは [〜#〜] starttls [〜#〜] を使用した接続アップグレードをポート465/587でラップします。)
PLAIN
または高度な方法を使用しているかどうかに関係なく、任意のSMTP認証タイプは、アプリケーションレベルの認証を提供するだけです。しかし、必要なのはtransportレベルのセキュリティ。ユーザーがSMTP経由で認証された後は、自動的に暗号化された接続はありません。 SMTPプロトコルに従って、コマンドと電子メールはプレーンテキストでサーバーと交換され、中間者攻撃者が通信を読み取って変更し、新しいコマンドを挿入できるようにします。 HTTPSがSSLの上にHTTPを提供するのと同じように、SSL暗号化の上にそれを提供する必要があるのはそのためです。
HTTPの例え:HTTPSでWebサイトを保護する場合、ログインフォームが実際にパスワードをPOST HTTPリクエストの本文のプレーンストリングとして送信することは問題ではありません。データ転送はSSL暗号化されます。SMTPでCRAM-MD5
を有効にすることは、ログイン資格情報をWebサイトに送信する前にJavascriptで challenge-response スキームを実装することに似ています(この手法は、 HTTPSを提供しないルーターインターフェイスですが、あまり一般的ではありません。)
実際の例として、GMailは安全なSSL接続を確立した後、LOGIN
/PLAIN
認証(資格情報は計画テキストで送信されます)を提供して問題ありません:
$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 ... 250 SMTPUTF8 EHLO foo 250-smtp .gmail.com at your service、[127.0.0.1] 250-SIZE 35882577 250-8BITMIME 250-AUTHログインプレーンXOAUTH2プレーンクライアントトークンOAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING ...
(ご覧のとおり、これらはリストにないいくつかのメソッドも提供します。たとえば、OAuth2トークンの場合はXOAUTH2
で、パスワードなしの認証が必要な場合は興味深いかもしれません。)
私がニース認証と呼ぶのは、次の特性を持つ認証です。
サーバーは実際のパスワードを知る必要はなく、ハッシュを保持するだけです
これにより、パスワードデータベースが危険にさらされたとしても、攻撃者はハッシュを逆転するのが難しくなるだけであり、ユーザーはパスワードを変更するのに十分な時間を持つことができます。
パスワードが平文で交換されることはありません
交換されるものは簡単に盗まれる可能性があり、暗号化されていないチャネルを介してクリアテキストで渡されるパスワードは侵害されたと見なされます
SMTPサーバーがTLSを許可する場合、PLAINは次のシナリオの両方で尊重します:HELO、STARTTLS、LOGIN
SMTPの推奨事項とは別に、利用可能なリストは次のとおりです。