認証とDNS

DKIM

DKIMはDomainKeys Identified Mailの略です。送るすべてのメールに電子署名を付けます。受信側のサーバーは署名を確認し、メールがそのドメインから送られ、送信後に変更されていないことを確かめます。

更新日

DKIMとは?

DKIMはDomainKeys Identified Mailの略です。RFC 6376で定められています。DKIMは、サーバーから送り出すメール1通ごとに電子署名を付けます。電子署名とは、送信側のサーバーだけが作れる長いコードです。

受信側のサーバーは、そのコードを確認します。署名が有効なら、2つのことが確かになります。メールはそのドメインによって署名されました。送信後に誰もメールを変更していません。

ドメインとは、メールアドレスの @ より後ろの名前で、example.comなどです。DKIMはドメインごとに機能します。メールを送るドメインは、それぞれ自分の鍵で署名する必要があります。

例:ショップが領収書を送る

あるショップがexample.comで運営されています。レナがランプを買い、ショップはレナのGmailアドレスに領収書をメールで送ります。DKIMが行うことは次のとおりです。

  1. ショップの送信サーバーが領収書を作成します。
  2. 秘密鍵を使って、メールの署名を作ります。秘密鍵とは、送信サーバー上に保管される非公開のファイルです。
  3. 署名を、DKIM-Signature というヘッダーとしてメールに追加します。ヘッダーとは、メールの先頭にある技術的な情報の行です。読み手には通常表示されません。
  4. メールがGmailに届きます。
  5. Gmailがヘッダーを読みます。ドメインexample.comと、セレクターs2026aを見つけます。
  6. Gmailは、ショップのDNSでそのセレクターの公開鍵を調べます。DNSとは、ドメインが自分の設定を公開する、インターネット上の公開ディレクトリです。
  7. Gmailは公開鍵を使って署名を確認します。確認は合格します。
  8. 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が機能しているか確認する方法

  1. 自社のドメインから、個人のGmailアカウントあてにメールを送ります。
  2. Gmailでそのメールを開きます。
  3. 縦に並んだ3つの点のメニューをクリックし、「メッセージのソースを表示」を選びます。
  4. 上のほうにあるDKIMの行を探します。自社のドメインとともにPASSと表示されているはずです。

FAILと表示された場合は、2つのことを確認します。DNSレコードの公開がまだ終わっていない可能性があります。または、サーバー上のセレクターがDNSのセレクターと完全には一致していない可能性があります。

DKIMとメールアドレス検証

DKIMは、メールがドメインから送られたことを証明します。受信者のアドレスが存在することは証明しません。正しく署名されたメールでも、使われていないアドレスに送ればバウンスします。メールアドレス検証ツールは、送信前に、各メールボックスが存在するかを受信側のサーバーに確認します。メールアドレスの一括検証ツールは、同じことをリスト全体に対して行います。DKIMは誰がメールを送ったかを証明し、メールアドレス検証はメールを受け取れるアドレスに届くようにします。

署名付きのメールでも、アドレスが存在しなければバウンスします

無料クレジット1,000件付き。クレジットカードは不要です。

無料で試せます クレジットに有効期限はありません 結果が不明のときはクレジットを返却