DKIM vs DMARC
DKIM は認証方式です。メッセージが認可され改変されていないことを証明する暗号署名です。DMARC は DKIM(および SPF)の上に構築されたポリシーとレポートの層で、可視の From ドメインとの整合をチェックし、失敗時に受信側が何をすべきかを指示します。両者は代替関係ではありません。
このガイドはメール認証ガイドの一部です。関連記事: SPF vs DKIM と SPF vs DMARC。
DKIM は認証方式です。メッセージが送信ドメインによって認可され、転送中に改変されていないことを証明する暗号署名です。DMARC はポリシーとレポートの層で、DKIM(および SPF)の結果を用い、それらが可視の From ドメインと整合しているかをチェックし、メッセージが失敗したときに受信側が何をすべきかを指示します。両者は代替関係ではありません — DMARC は DKIM の上に構築されています。
DKIM は何をするか
DKIM(DomainKeys Identified Mail)は、送信サーバーが送出するすべてのメッセージに暗号署名を付与できるようにします。サーバーは選択されたヘッダーと本文を秘密鍵で署名し、受信側はその署名を送信ドメインの DNS に公開された公開鍵に照らして検証します。検証が成功すれば、受信側は 2 つのことを知ります。メッセージが署名鍵を管理するドメインによって認可されたこと、そして署名されたコンテンツが送信から配信までの間に改変されていないことです。
その署名は、DKIM 署名と呼ばれる隠れたヘッダーの中を運ばれます。そこには、どのドメインがメッセージに署名したか、どのセレクターが公開鍵を指すか、どのヘッダーがカバーされているかが記録されます。決定的に重要なのは、DKIM 単独では「この署名は有効か?」という問いにしか答えないということです。DKIM は、署名のないメッセージや無効なメッセージを受信側がどう扱うべきかを決めませんし、ドメイン所有者に何も報告しません。DKIM は検証の仕組みであって、強制や監視のシステムではないのです。
DMARC は何をするか
DMARC(Domain-based Message Authentication, Reporting and Conformance)は 1 つ上の層に位置します。DMARC 自身はメッセージに署名も検証もしません — 代わりに、DKIM と SPF の合否結果を取り込み、それらに欠けている 3 つのものを加えます。
第一に、整合性です。DMARC は、合格した DKIM(または SPF)の結果が、人が From ヘッダーで目にするのと同じドメインに属していることを要求します。無関係なドメインからの有効な署名では DMARC を満たしません。これは、攻撃者が認証を合格させながらあなたのブランドをなりすませてしまう隙間を塞ぎます。
第二に、ポリシーです。DNS に公開された DMARC レコードは、整合に失敗したメッセージをどう扱うかを受信側に指示します。p=none(監視のみ)、p=quarantine(迷惑メールへ送る)、または p=reject(即座にブロック)です。まず none で観察を始め、その後 reject へと強化していきます。
第三に、集計レポートです。受信側は、あなたのドメインとしてメールを送っているすべての送信元 — 正当なものも不正なものも — を示す XML レポートを返します。公開したレコードに頼る前に、DMARC チェッカーでそのレコードを検証できます。
DKIM vs DMARC を一目で
| 観点 | DKIM | DMARC |
|---|---|---|
| 目的 | メッセージを暗号的に署名し検証する | ポリシーを強制し、認証結果についてレポートする |
| 何をチェックするか | 署名の有効性とメッセージの完全性 | DKIM/SPF が合格し、かつ From ドメインと整合しているか |
| どこに公開されるか | セレクターの DNS TXT レコード、加えて各メッセージ上のヘッダー | _dmarc.yourdomain.com にある単一の DNS TXT レコード |
| レポートを生成するか? | いいえ | はい — 集計(および任意のフォレンジック)レポート |
| 単独で機能できるか? | 検証はするが、強制もレポートもできない | いいえ — 評価には DKIM や SPF の結果が必要 |
両者はどう連携するか
DMARC は決して DKIM を置き換えません。DMARC は DKIM に依存しています。メッセージが到着すると、受信側は DKIM 署名と SPF 結果をチェックします。DMARC はそれからより厳格な問いを立てます。少なくとも一方が合格したか、かつその合格したドメインは受信者が目にする From アドレスと一致するか、というものです。
DKIM がメッセージを認証し、署名ドメインが From ドメインと整合すれば、メッセージは DMARC に合格します(SPF も同じように整合を満たせます)。DKIM と SPF の両方が整合に失敗した場合、DMARC はあなたが公開したポリシー — quarantine または reject — を適用します。
だからこそ両者は補完的なのです。DKIM 単独ではメッセージが本物で改変されていないことを証明しますが、メッセージに署名がなかったり偽造されていたりする場合には何もできません。DMARC 単独では評価すべき暗号的な証拠がなく、DKIM と SPF が渡す結果を強制しレポートすることしかできません。両者が組み合わさることで、DKIM が信頼できるシグナルを供給し、DMARC がそのシグナルを強制と可視性へと変えます。
両方が必要ですか?
はい。両者は同じ問題の異なる半分を解決し、どちらも単独では不完全です。
DMARC のない DKIM は、実際の隙間を残します。有効な署名はメッセージが改ざんされていないことを証明しますが、署名のないメールを受信側に拒否させる強制力はなく、誰があなたの名を騙って送信しているかを知らせるものもありません。攻撃者は署名を一切付けずにあなたの From アドレスをなりすませてしまい、あなたはそれが起きていることを決して目にできません。
DKIM(または SPF)のない DMARC には、強制する対象がありません。DMARC は認証結果を評価します — もし基盤となる方式が合格・整合した結果を一つも生み出さなければ、DMARC はすべてのメッセージを失敗させることしかできず、正当なメールを壊してしまいます。DMARC に供給する認証方式が少なくとも 1 つは必要で、DKIM はその署名が SPF よりもフォワーディングを生き延びやすいため、最も耐久性があります。
メールを送信するあらゆるドメインにとっての実務的な答えはこうです。認証の層として SPF と DKIM を導入し、その上に DMARC を重ねて整合させ、強制し、監視することです。
よくある質問
DKIM と DMARC の違いは何ですか?
DKIM は認証方式で、各メッセージに暗号署名を付与し、受信側がそれが認可され改変されていないことを検証できるようにします。DMARC はポリシーとレポートの層で、DKIM と SPF の結果を読み取り、それらが可視の From ドメインと整合しているかをチェックし、失敗をどう扱うかを受信側に指示します。一方が検証し、もう一方が強制しレポートします。
DMARC は DKIM より優れていますか?
どちらが優れているということはありません — 両者は異なる役割を果たし、互いに依存しています。DKIM は、メッセージが本物で改変されていないという暗号的な証拠を提供します。DMARC はその証拠を用い、From ドメインとの整合を加え、ポリシーを強制し、レポートを返します。DKIM がなければ DMARC には評価する対象がなく、DMARC がなければ DKIM は何も強制も監視もできません。
DKIM なしで DMARC を使えますか?
技術的には DMARC は SPF だけで合格しうるので、DKIM なしでも機能します。しかしそれは脆弱です。メールがフォワードされると SPF は壊れますが、DKIM 署名はフォワーディングを生き延びます。整合を SPF だけに頼ると、正当なフォワードメールが DMARC に失敗しかねません。信頼できる強制のためには、DMARC ポリシーを強化する前に SPF と DKIM の両方を公開してください。
DKIM には DMARC が必要ですか?
いいえ — DKIM は独立して機能し、DMARC レコードがなくてもメッセージに署名し検証します。しかし DKIM 単独では、受信側に失敗への対応を強制することも、誰があなたのドメインをなりすましているかを知らせることもできません。その上に DMARC を加えることで、DKIM の検証結果は強制可能なポリシーへと変わり、あなたのドメインとして送信しているすべての送信元を把握するのに必要なレポートが得られます。