認証とDNS
DKIM
DKIMはDomainKeys Identified Mailの略です。送るすべてのメールに電子署名を付けます。受信側のサーバーは署名を確認し、メールがそのドメインから送られ、送信後に変更されていないことを確かめます。
DKIMとは?
DKIMはDomainKeys Identified Mailの略です。RFC 6376で定められています。DKIMは、サーバーから送り出すメール1通ごとに電子署名を付けます。電子署名とは、送信側のサーバーだけが作れる長いコードです。
受信側のサーバーは、そのコードを確認します。署名が有効なら、2つのことが確かになります。メールはそのドメインによって署名されました。送信後に誰もメールを変更していません。
ドメインとは、メールアドレスの @ より後ろの名前で、example.comなどです。DKIMはドメインごとに機能します。メールを送るドメインは、それぞれ自分の鍵で署名する必要があります。
例:ショップが領収書を送る
あるショップがexample.comで運営されています。レナがランプを買い、ショップはレナのGmailアドレスに領収書をメールで送ります。DKIMが行うことは次のとおりです。
- ショップの送信サーバーが領収書を作成します。
- 秘密鍵を使って、メールの署名を作ります。秘密鍵とは、送信サーバー上に保管される非公開のファイルです。
- 署名を、
DKIM-Signatureというヘッダーとしてメールに追加します。ヘッダーとは、メールの先頭にある技術的な情報の行です。読み手には通常表示されません。 - メールがGmailに届きます。
- Gmailがヘッダーを読みます。ドメインexample.comと、セレクターs2026aを見つけます。
- Gmailは、ショップのDNSでそのセレクターの公開鍵を調べます。DNSとは、ドメインが自分の設定を公開する、インターネット上の公開ディレクトリです。
- Gmailは公開鍵を使って署名を確認します。確認は合格します。
- Gmailは、example.comについてDKIM pass(合格)という結果を記録します。
送信後に、誰かが領収書の金額を書き換えたとします。その場合、手順7の確認は失敗します。公開鍵は署名を確認できますが、署名を作ることはできません。署名を作れるのは秘密鍵だけです。
DKIM署名
DKIM署名は1つのヘッダーで、タグと呼ばれる複数の部分でできています。各タグは、1文字、等号、値で構成されます。特に重要なタグは2つです。
d=は署名したドメインです。例:d=example.com。s=はセレクターです。例:s=s2026a。セレクターとは、1つの鍵に付ける名前です。1つのドメインが同時に複数の鍵を持つことができ、それぞれに専用のセレクターがあります。
ヘッダーには、b= に署名そのものが、bh= にメール本文のコードが入っています。受信側のサーバーは、これらすべてを使って確認を行います。
DKIMレコード
公開鍵はDKIMレコードで公開します。これはDNS TXTレコード、つまりテキストを保存するDNSのエントリーです。レコードの名前は、セレクターとドメインから作られます。
s2026a._domainkey.example.com
レコードの値は次のような形です。
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
v=DKIM1は、これがDKIMレコードであることを示します。k=rsaは鍵の種類を示します。p=には公開鍵が入ります。実際の値は数百文字の長さです。
秘密鍵をDNSに置くことはありません。秘密鍵は送信サーバーに置いたままにします。鍵の長さは2048ビットにしてください。Gmailは最低1024ビットを受け付けますが、2048ビットを推奨しています。RFC 8301は、署名者は2048ビットを使うべきだとしています。
DKIMが重要な理由
DKIMは転送されても有効なままです。誰かがショップの領収書を別のアカウントに転送したとします。転送するサーバーは、自分のIPアドレスからメールを送ります。IPアドレスとは、インターネット上のサーバーを識別する番号です。そのIPアドレスはショップのSPFレコードにないので、SPFは失敗します。DKIM署名はメールの中に入って一緒に届くので、合格のままです。
DMARCはDKIMを使います。DMARCは、Fromアドレスに表示されるドメインと同じドメインでSPFかDKIMが合格すると、合格になります。転送するとSPFは失敗するので、DMARCを合格させるのはDKIMであることが多いです。
DKIMは大量送信者にも必須です。Googleの送信者ガイドラインは、Gmailあてに1日5,000通以上を送る送信者に、SPF、DKIM、DMARCを求めています。MicrosoftもOutlook.com、Hotmail、Liveについて同じルールを設けています。
DKIMの設定方法
DKIMの設定方法は、誰がメールを送っているかによって変わります。
- メールサービスを使っている場合。Google Workspace、Microsoft 365、Mailchimp、SendGridなどです。サービスが鍵を作成します。DNSホストに追加するDKIMレコードを表示してくれます。DNSホストとは、通常はドメインを購入した会社です。
- 自分でメールサーバーを運用している場合。鍵のペアを自分で作成します。Giggal.aiのDKIMジェネレーターは、2048ビットの鍵ペアとTXTレコードをブラウザ上で作成します。秘密鍵をサーバーにインストールし、レコードをDNSに公開します。
よくある問題を1つ確認してください。多くのメールサービスは、初期設定ではサービス自身の共有ドメインで署名します。署名は合格しますが、d= のドメインが自社のものではないので、DMARCのアライメントが失敗します。サービスの設定でカスタムDKIMを有効にし、d= に自社のドメインが表示されるようにします。理由はDMARCアライメントのページで説明しています。
DKIMが機能しているか確認する方法
- 自社のドメインから、個人のGmailアカウントあてにメールを送ります。
- Gmailでそのメールを開きます。
- 縦に並んだ3つの点のメニューをクリックし、「メッセージのソースを表示」を選びます。
- 上のほうにあるDKIMの行を探します。自社のドメインとともにPASSと表示されているはずです。
FAILと表示された場合は、2つのことを確認します。DNSレコードの公開がまだ終わっていない可能性があります。または、サーバー上のセレクターがDNSのセレクターと完全には一致していない可能性があります。
DKIMとメールアドレス検証
DKIMは、メールがドメインから送られたことを証明します。受信者のアドレスが存在することは証明しません。正しく署名されたメールでも、使われていないアドレスに送ればバウンスします。メールアドレス検証ツールは、送信前に、各メールボックスが存在するかを受信側のサーバーに確認します。メールアドレスの一括検証ツールは、同じことをリスト全体に対して行います。DKIMは誰がメールを送ったかを証明し、メールアドレス検証はメールを受け取れるアドレスに届くようにします。
関連する用語
- SPFレコードSPFレコードとは、ドメイン上に置く1行のテキストで、そのドメインのメールを送ってよいサーバーを一覧にしたものです。受信側のサーバーはこれを確認し、ドメインから送られたと名乗るメールが、そのドメインのサーバーから送られたことを確かめます。
- DMARCDMARCは、ドメインのDNSに公開するルールです。ドメインから送られたと名乗っているのにSPFとDKIMに失敗したメールを、どう扱うかを受信側のサーバーに伝えます。レポートの送り先も伝えます。
- DNS TXTレコードDNS TXTレコードとは、ドメインの設定に保存された1行のテキストです。メールサーバーはTXTレコードを読んで、SPF、DKIM、DMARCを確認します。ほかのサービスは、ドメインの所有者であることを確認するために読みます。
- メールのなりすまし(スプーフィング)メールのなりすまし(スプーフィング)とは、偽の送信者アドレスでメールを送り、別の人から届いたように見せることです。詐欺師は、銀行、取引先、あるいは受信者の上司になりすますために使います。ドメインでこれを防ぐのが、SPF、DKIM、DMARCのレコードです。
- BIMIBIMIは、対応している受信トレイで、メールの横にブランドのロゴを表示するメールの標準規格です。Brand Indicators for Message Identificationの略です。ドメインがquarantineかrejectのポリシーでDMARCに合格している場合にだけ機能します。
