今回は、代表的な送信ドメイン認証であるSPFとDKIMの仕組みを詳しく解説する。SPFでは、SMTPでのやり取りの際に送信側メールサーバーが受信側メールサーバーに伝えたドメイン名と、送信側メールサーバーのIPアドレスが対応しているかどうかを検証する。具体的な手順は次の通り。

メールサーバーのIPアドレスをチェックする「SPF」
SPFは、メールを送信したドメイン(メールサーバー)をIPアドレスで検証する送信ドメイン認証。送信側は自ドメインのDNSサーバーに、自ドメインのメールサーバーのIPアドレスを登録する。受信側のメールサーバーは、送信元ドメインのDNSサーバーに問い合わせてそのIPアドレスを取得。現在接続しているメールサーバーのIPアドレスと照合して、正しいIPアドレスのメールサーバーから届いているか判断する。
[画像のクリックで拡大表示]

 送信側は、自社で使用するメールサーバーのIPアドレスを、自社のDNSサーバーに登録しておく。送信者がメールを送ると、送信側メールサーバーは、宛先ユーザー(受信者)が所属するドメインの受信側メールサーバーにSMTPで接続し、メールを送るためにSMTPのコマンドを順に送信する。

 送信側メールサーバーが、MAILコマンドで送信者のメールアドレスを伝えると、受信側メールサーバーは、そのメールアドレスのドメイン名のDNSサーバーにアクセス(上図の(3))。そのドメインのメールサーバーのIPアドレスを取得する(同(4))。

 そして、取得したIPアドレスと、現在接続している送信側メールサーバーのIPアドレスを照合(同(5))。一致している場合には、詐称されていないとして、受信者にメールを配信する。不一致の場合には、管理者の設定に従って処理する。具体的な処理方法としては、「メールを配信しない」「受信者の迷惑メールフォルダーに配信する」「不一致だったことをメールのAuthentication-Resultsヘッダーに書き込んで配信する」などがある。

公開鍵を取得して署名を検証

 DKIMでは、送信側メールサーバーで電子署名を作成してメールに付与。受信側メールサーバーでは、送信側のDNSサーバーに置かれている公開鍵を取得し、電子署名を検証する。

メールの電子署名をチェックする「DKIM」
DKIMは、メールの電子署名をチェックすることで送信元を検証する。送信側では、RSAなどの公開鍵暗号の秘密鍵と公開鍵を用意。公開鍵は自ドメインのDNSサーバーに置く。メールの送信時、メールサーバーは自ドメインの秘密鍵を使ってメール本体(メールヘッダーと本文)の電子署名を作成し、そのメールのヘッダーに追加。受信側ではDNSサーバーの公開鍵を取得し、電子署名が正しいかどうか検証する。
[画像のクリックで拡大表示]

 まず送信側では、電子署名に使用する公開鍵を、自社のDNSサーバーに登録する。公開鍵とペアになる秘密鍵は、送信側メールサーバーに置く。

 送信者がメールを送信すると(上図の(1))、送信側メールサーバーは、そのメールの本文とヘッダーから電子署名を作成し、DKIM-Signatureというヘッダーとしてメールに書き込む(同(2))。電子署名は、特定のメールヘッダーと本文からダイジェスト(ハッシュ値)を計算し、それを秘密鍵で暗号化して作成する。DKIM-Signatureヘッダーには、電子署名に加えて、電子署名の作成の際に使用したヘッダーの名称や、送信側のドメイン名などが含まれる。

 受信側メールサーバーでは、DKIM-Signatureヘッダーから送信側のドメイン名を抜き出し、そのドメイン名のDNSサーバーにアクセス(同(3))。登録されている公開鍵を取得する(同(4))。

 そしてその公開鍵を使って、DKIM-Signatureヘッダー内の電子署名を検証する(同(5))。具体的には、公開鍵を使って電子署名をダイジェストに復号。同ヘッダー内で指定されたハッシュ関数を使ってメールのヘッダーと本文から作成したダイジェストと比較する。これらのダイジェストが一致する場合には、送信元が詐称されていないと判断して受信者にメールを配送する。一致しない場合には、受信側の管理者の設定に従って処理する。代表的な処理方法は、SPFと同様に「メールを配信しない」「受信者の迷惑メールフォルダーに配信する」「不一致だったことをメールのAuthentication-Resultsヘッダーに書き込んで配信する」。

▼SMTP
Simple Mail Transfer Protocolの略。メール送信のプロトコル。
▼DNSサーバーに登録
DNSサーバーのTXTレコードに記述する。詳細は後述。
▼送信者のメールアドレス
SMTPのMAILコマンドで送られる送信者メールアドレスは、「エンベロープFrom」と呼ばれる。SMTPでのやり取りでエラーが発生した場合、このエンベロープFrom宛てにエラーメールが送信される。
▼Authentication-Resultsヘッダーに書き込んで
認証に成功した場合も、Authentication-Resultsヘッダーに結果を書き込む。認証に成功した場合は「spf=pass」、失敗した場合には「spf=softfail」や「spf=hardfail」と書き込まれる。送信側のDNSサーバーにメールサーバーのIPアドレスが登録されていない場合(SPFに未対応の場合)は、「spf=none」になる。
▼ダイジェスト
メッセージダイジェストともいう。
▼ドメイン名を抜き出し
ドメイン名は、DKIM-Signatureヘッダーのdタグとして「d=example.jp」といった具合に記載されている。
▼SPFと同様に
Authentication-Resultsヘッダーへの書き込み方もSPFと同様。認証に成功した場合は「dkim=pass」、失敗した場合には「dkim=fail」などと書き込む。送信側のDNSサーバーにメールサーバーの共通鍵が登録されていない場合(DKIMに未対応の場合)は、「dkim=none」になる。

この先は会員の登録が必要です。有料会員(月額プラン)は申し込み初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら