← RFC Reference

RFC 4954: SMTP AUTH 拡張

Standards Track Email Authentication Published March 2026
ELI5: 誰でも入ってきて、どんな人からのものでも主張して郵便を投函できる郵便局を想像してみてください。混乱していますよね?SMTP AUTHはカウンターでの身分確認です。郵便を預ける前に、ユーザー名、パスワードなど全てで本人確認を証明します。クラークが身元を確認した後でのみ、メッセージを送信できます。AUTHがなければ、SMTPは悪用への扉を開いたままにしています。

このツールが存在する理由

元のSMTP(RFC 5321)には送信者認証の概念がありませんでした。どのクライアントからでも任意のサーバーに接続し、誰にでもなりすましてメールを送信できました。この設計は初期のインターネットでは機能していましたが、スパム問題の基礎となりました。

RFC 4954はSMTPへのAUTH拡張機能を定義しており、クライアントがメッセージを送信する前にメールサーバーに対して認証する標準的な方法を提供します。SASL(Simple Authentication and Security Layer)フレームワークを使用して、SMTPプロトコル自体を変更することなく、複数の認証メカニズムをプラグインすることができます。

このRFCはRFC 2554(1999年)を廃止にし、セキュリティの問題を修正し、AUTHとSTARTTLSなどの他のSMTP拡張機能との相互作用を明確にしました。

仕組み

AUTH交渉

  1. クライアントが接続してEHLOを発行します。
  2. サーバーが250-AUTHとサポートされているSASLメカニズムのリストを返します。
  3. クライアントがメカニズムを選択してAUTH <mechanism>を送信します。初期レスポンスをオプションで含めることができます。
  4. サーバーとクライアントが1回以上のチャレンジ/レスポンスラウンドを交換します(メカニズムに依存)。
  5. サーバーが235(認証成功)または535(認証失敗)で応答します。

SMTPトランスクリプト:AUTH PLAIN

PLAINメカニズムは、認可アイデンティティ、認証アイデンティティ、パスワードを含む単一のBase64エンコード文字列で認証情報を送信します。

# 接続して機能を確認 S: 220 smtp.mailertogo.com ESMTP C: EHLO app.example.com S: 250-smtp.mailertogo.com S: 250-STARTTLS S: 250-AUTH PLAIN LOGIN XOAUTH2 S: 250-SIZE 26214400 S: 250 ENHANCEDSTATUSCODES # 最初にTLSにアップグレード(AUTHの前に必須) C: STARTTLS S: 220 2.0.0 Ready to start TLS # ... TLSハンドシェイク ... 再EHLOが必要 C: EHLO app.example.com S: 250-smtp.mailertogo.com S: 250-AUTH PLAIN LOGIN XOAUTH2 S: 250 ENHANCEDSTATUSCODES # AUTH PLAINで認証 # "\0alice@example.com\0secretpassword"をBase64エンコード C: AUTH PLAIN AGFsaWNlQGV4YW1wbGUuY29tAHNlY3JldHBhc3N3b3Jk S: 235 2.7.0 Authentication successful # これでメッセージを送信する権限があります C: MAIL FROM:<alice@example.com> S: 250 2.1.0 OK

SMTPトランスクリプト:AUTH LOGIN

LOGINメカニズムはユーザー名とパスワードに別々のチャレンジ/レスポンスを使用します。

C: AUTH LOGIN S: 334 VXNlcm5hbWU6 ← "Username:"をBase64エンコード C: YWxpY2VAZXhhbXBsZS5jb20= ← "alice@example.com"をBase64エンコード S: 334 UGFzc3dvcmQ6 ← "Password:"をBase64エンコード C: c2VjcmV0cGFzc3dvcmQ= ← "secretpassword"をBase64エンコード S: 235 2.7.0 Authentication successful

SMTPトランスクリプト:AUTH失敗

C: AUTH PLAIN AGJhZEBleGFtcGxlLmNvbQB3cm9uZw== S: 535 5.7.8 Authentication credentials invalid # クライアントは535の後メールを送信しようとしてはいけません

重要な技術詳細

SASLメカニズム

RFC 4954は認証メカニズムを直接定義していません。フレームワークを提供しており、メカニズムはSASLレジストリから来ます。SMTPで最も一般的に使用されるもの:

メカニズム 動作方法 セキュリティに関する注記
PLAIN 単一のBase64文字列:\0authzid\0password シンプルで広くサポートされています。TLSの上でのみ使用してください。
LOGIN ユーザー名とパスワード用の2ステップチャレンジ/レスポンス 非標準ですが普遍的です。TLSの上でのみ使用してください。
XOAUTH2 フォーマット済み文字列内のOAuth 2.0ベアラートークン パスワードは送信されません。トークンベース。GmailとMicrosoft 365で使用されます。
SCRAM-SHA-256 チャネルバインディング付きのソルト付きチャレンジ/レスポンス パスワードは送信されません。相互認証。最高のセキュリティですが、SMTPでの採用は限定的です。
CRAM-MD5 MD5 HMACを使用したチャレンジ/レスポンス 非推奨。MD5は脆弱と考えられています。パスワード送信を回避しますが、リプレイ攻撃から保護しません。

AUTH PLAIN認証情報フォーマット

PLAINメカニズムはヌルバイト(\0)で区切られた3つのフィールドをエンコードした後、Base64エンコードします。

# フォーマット:[authzid] \0 authcid \0 password # authzid = 認可アイデンティティ(通常は空またはauthcidと同じ) # authcid = 認証アイデンティティ(ユーザー名) # password = プレーンテキストパスワード # 例:authzidが空、authcidが"alice@example.com"、パスワードが"s3cret" \0alice@example.com\0s3cret # Base64エンコード: AGFsaWNlQGV4YW1wbGUuY29tAHMzY3JldA==

初期レスポンス最適化

RFC 4954はクライアントが初期SASLレスポンスをAUTHコマンドと同じ行で送信することを許可しています(上記のPLAINの例に示されているように)。サーバーが最初に空のチャレンジを送信する古い2ステップアプローチと比較して、1往復の通信が削減されます。PLAINのようなクライアントが先に話すメカニズムでは、この最適化は標準的です。

STARTTLSとの相互作用

RFC 4954は、サーバーがTLSが確立されるまでAUTHをアドバタイズしないことを強く推奨しています。これにより、クライアントが誤ってプレーンテキストで認証情報を送信することを防ぎます。典型的な流れは:

  1. 接続 → EHLO → サーバーはSTARTTLSをアドバタイズしますがAUTHはしません
  2. STARTTLS → TLSハンドシェイク
  3. もう一度EHLO → サーバーがAUTHをアドバタイズします(STARTTLSはリストされていません)
  4. AUTH → メッセージを送信

レスポンスコード

コード 意味
235 認証成功
334 サーバーチャレンジ(SASLexchangeの継続)
432 パスワード変更が必要(サーバーはパスワード変更を要求)
454 一時的な認証失敗(後で再度試してください)
500 AUTHコマンド認識なし(サーバーはAUTHをサポートしていません)
534 認証メカニズムが弱すぎます(サーバーはより強力なメカニズムを要求)
535 認証認証情報無効

AUTHとMAIL FROMアイデンティティ

認証に成功した後、サーバーは接続を認証されたアイデンティティに関連付けます。MSAはその後、MAIL FROMとヘッダーFrom:アドレスが認証されたユーザーと一致する(または認可される)ことを強制できます。これにより、認証されたユーザーが任意の送信者アドレスになりすまし失敗します。

一般的な過ち

配信可能性への影響

Related RFCs