DMARC

**Domain-based Message Authentication, Reporting and Conformance** (**DMARC**)は、電子メール認証プロトコルの一つ。電子メールのドメイン所有者が、保有するドメインを認証を通さずに利用されること(なりすましメール、フィッシングメール、詐欺メールその他の脅威)を防止できることを目的に設計された。

DMARCのDNSエントリが公開されると、メールを受信するサーバは送られてくる電子メールを、ドメイン所有者DNSエントリで公開した指示に従って検証することができるようになる。認証に成功した電子メールは配送され、信頼できるものとなる。検証に失敗した場合は、DMARCレコードの指示に従って、何も指定しない(none)、隔離(quarantine)、もしくは拒否(reject)を行う。

DMARCは既存の2つの電子メール認証メカニズム（SPFとDKIM）を拡張したものである。ドメインの管理者はDNSレコードを利用し、エンドユーザに示される`From:`フィールドの確認方法、受信者が検証失敗時にどう対処すべきか、ポリシに従って実行されるアクションを報告するメカニズムをどう提供するか等を明記する。

DMARCはIETFが2015年3月に公開したによって定義されている。分類は"Informational"。

## 概要
送信者のドメインはDMARCポリシにより、送信者の電子メールがSPFまたはDKIM、あるいはその両方によって保護されていることを示し、それらの認証方法を通過せず拒否または隔離するときに受信者がどうすべきかを指示することができる。

これらのポリシは当該ドメインの権威DNSサーバにおいてTXTレコードとして公開される。

DMARCは電子メールがスパムあるいは詐欺メールであるかどうかを直接判断するものではない。その代わりに、DMARCはメッセージがDKIMまたはSPFの検証を通過するだけでなく、アラインメントをも通過することを必要とする。DMARCの下では、DKIMまたはSPFを通過してもアラインメントを通過しなければfailとなる。

DMARCを設定することにより、正規の送信者からのメッセージの配信量を改善することができる。

## アラインメント(一致)
DMARCはメッセージの`From:`フィールド("RFC5322.From"ともいう)に含まれるドメインが、その他の認証されたドメイン名と"アライン"(=一致)していることを確認することによって動作する。SPFかDKIMのアラインメントチェックを通過すると、DMARCアラインメント検査通過となる。

アラインメントは、strictあるいはrelaxedで指定される。strictモードでは、メールアドレスのドメイン名がサブドメインまで一致しなければならない。relaxedモードでは、APEX(ネイキッドドメイン)が一致していれば良い。組織ドメインは公開DNSサフィックスリストを確認することで探し出し、それを次のDNSラベルに加える。例えば、"a.b.c.d.example.com.au"と"example.com.au"は同じ組織ドメインを持つ。なぜなら、レジストラが顧客に".com.au"の名前を提供しているからである。これはドメイン境界に関するIETFのワーキンググループが存在したときのDMARCの仕様ではあるが、今では組織ドメインはPublic Suffix List(PSL)から見つけることができる。

SPFとDKIM同様に、DMARCはドメイン所有者(DNSドメインを変更する権限を有する実体あるいはその集合)の概念を利用する。

SPFは配送サーバのIPアドレスが、SMTPのHELOまたはEHLOコマンドから派生する"HELO"アイデンティティ、もしくはSMTP MAILコマンドから派生する"MAIL FROM"アイデンティティでのドメイン名に基づいて、DNSのTXTで設定されたSPFレコードに存在するか認可のチェックを行う。これに加えて、DMARCはReturn-Path(RDC5321.MailFrom)がヘッダFrom(5322.From)と一致していることを確認する。

DKIMでは、電子メールのメッセージの一部にディジタル署名を施すことができ、そのときFromフィールドを署名範囲に加えなければならない。DKIM署名メールヘッダには、`d=`(ドメイン)と`s=`(セレクタ)タグが署名検証用の公開鍵をどのDNSから手に入れるかを明記される。署名が有効であれば、署名者がドメイン所有者であることが証明され、署名以降にFromフィールドが改ざんされていないことを保証する。DKIM署名はメッセージ中に含まれることもある。DMARCが必要とするのは、`d=`タグで指定されたドメインが、`From:`ヘッダフィールドで指定された送信者のドメインと連携している、有効な署名である。

## DNSレコード
DMARCはDNSを用いて、`_dmarc`サブドメインラベルを付けて公開される。例えば`_dmarc.example.com`のようになる。これを`example.com`のSPFや、`selector._domainkey.example.com`のDKIMと比較する。

TXTレコードは、SPFやDKIMと同様に、`name=value`という形式のタグを含み、それぞれのタグはセミコロンで区切られる。以下はその例である:

 

ここで、`v`はバージョン、`p`はポリシ(後述)である。`sp`はサブドメインポリシ、`pct`はポリシを適用する「悪い」電子メールの割合、`rua`は集計レポートを送るURIである。この例では、エンティティはexample.comのDNSドメインをSPFまたはDKIMあるいはその両方でのfail率を監視し、電子メールがexample.comのサブドメインから送信されることを想定していない。注意すべき点は、サブドメインはそれ自身のDMARCレコードを公開できることである。組織ドメインのレコードにフォールバックする前にそれを確認しなければならない。

### 段階的採用
DMARCプロトコルは、メール管理者が、全くDMARCを実装していない状態から厳格な設定を完了する状態まで徐々に移行できるよう、様々な移行段階を提供している。
段階的な採用という概念は、DMARCの目標が最も強固な設定だと仮定しているが、それはすべてのドメインについて当てはまるわけではない。その意図の有無に関わらず、このメカニズムによって素晴らしい柔軟性が実現される。

#### ポリシ
3つのポリシが存在する:

* **none**はエントリレベルのポリシである。受信者は特別な取り扱いを必要としないが、ドメインがフィードバックレポートを受け取ることを可能にする。
* **quarantine** はDMARCチェックでfailとなったメッセージを、受信者が怪しいものとして扱うことを要求する。メッセージにフラグを付ける、メッセージを迷惑メールフォルダに入れるなど、受信者によって実装手段が異なる。
* **reject** はDMARCチェックでfailとなったメッセージを完全に拒否することを受信者に要求する。

公開されたポリシは、DMARCチェックをfailしたメッセージの一部にのみ適用することによって、「軽減」することができる。受信者はシンプルなベルヌーイサンプリングアルゴリズムによって事前に設定された割合のメッセージを選択することを求められる。残りのメッセージにはより低いポリシ(`p=quarantine`ならnone、`p=reject`ならquarantine)を適用する。`p=quarantine; pct=0;`は、From:フィールドを書き換えないメーリングリストに強制的にFrom:フィールドを書き換えるのに使われる。

サブドメインポリシと、`sp=`、新しく追加されたno-domainポリシによって、特定のサブドメインのポリシを微調整することが可能になる。

## レポート
DMARCは2タイプのレポートを生成することができる。集計レポートは`rua`に引き続いて指定されるアドレスに送信される。フォレンジックレポートは`ruf`タグに引き続いて指定されるアドレスに送信される。これらのメールアドレスはURI mailtoのフォーマット(例:  )で指定する必要がある。複数のアドレスを指定も有効となるが、それぞれが完全なURIフォーマットで指定され、カンマで区切られる必要がある。

対象となる電子メールアドレスは外部ドメインのものでもよい。この場合、対象ドメインはDMARCレコードを設定し、レポートを受け取ることに同意しなければならない。そうしなければレポート機能をDoS攻撃に利用されかねない。例えば、`receiver.example`が`From: someone@sender.example`からのメッセージを受け取り、そのレポートを送ろうとしている場合を考える。`ruf=`という記述を見つけると、その裏付けのために、ターゲットが管理している名前空間から以下のDNSレコードを探す。

 sender.example._report._dmarc.thirdparty.example IN TXT "v=DMARC1;"

### 集計レポート
集計レポートはふつう、1日1回XML形式で送られる。電子メールのサブジェクトは"Report Domain"、すなわちレポートが生成されたDNSドメイン名と、"Submitter"、すなわちレポートを発行するエンティティである。ペイロードは"!"で区切られた長いファイルネームを連結したものであり、レポートを発行する受信者、Unix形式のタイムスタンプで記されたレポート対象の開始/終了区間、任意の識別子、利用可能な可逆圧縮方式(`.zip`等)
に基づく拡張子等を含む。
例:
`example.com!example.org!1475712000!1475798400.xml.gz`.

XMLはヘッダによって構成され、レコードの後にレポートが参照するポリシとレポートのメタデータが続く。レコードはデータベースに関係として挿入することができ、表形式で見ることができる。XMLスキーマは仕様のAppendix Cで定義されており、元のレコードはdmarc.orgに例示されている。データの性質をうまく説明するべく、以下に関係の例を貼り付けてある。DMARCレコードはXSLを用いることにより直接HTMLに変換することも可能である。

各行は送信元IPと認証結果によって分類され、それぞれのグループにいくつ振り分けられたか(count)が渡される。
一番左の**SPF**と**DKIM**という見出しの列は、アラインメントを考慮したDMARCの結果を示しており、passかfailのいずれかである。
一番右の似たような見出しは、メッセージの送信に与したと主張するドメインと、(カッコに示したものは)識別子のアラインメントによらず、元のプロトコル(SPFかDKIM)に基づいて主張される認証ステータスである。
右側のSPFの列は2列になっている部分があるが、一方は`Return-Path:`テストで、もう一方は`HELO`テストである。DKIMは各メッセージ中の署名ごとに一度のみ現れる。
例の中では、第1行はexample.orgからのメインのメールフロー、第2行はDKIMグリッチ(転送中の小さな変化によって生じる署名の破壊)である。
第3行と第4行は、それぞれ転送者とメーリングリストの典型的な失敗例である。DMARC認証は最後の行でのみ失敗している。example.orgがstrictポリシを指定した場合にメッセージのDispositionに影響を受ける。

**disposition**はメッセージに実際に適用されたポリシ(*none*、*quarantine*、*reject*)を反映している。これとともに、表には書かれていないが、DMARCはポリシのオーバーライドを提供する。受信者が要求されたポリシと異なるポリシを適用する理由として、既に仕様によってポリシが与えられていることが挙げられる: 

; *forwarded* :同じバウンスのアドレスである限り、基本的にDKIMに違反しない
; *sampled out* :送信者が一部のメッセージだけにしかポリシを適用しないことを選択したから
; *trusted forwarder* :メッセージがローカルで既知のソースから送られて来た
; *mailing list* :受信者がヒューリスティックにメーリングリストから送られてくるメッセージを決定する
; *local policy* :受信者は所望のポリシーを適用することが許されるが、そのことを送信者に知らせたほうが良い
; *other* :上記のいずれも適用されない場合、コメントフィールドに詳しく記すことができる

### フォレンジックレポート
フォレンジックレポート(異常レポート)はリアルタイムに生成され、`fo`タグに指定された値に基づき、SPFまたはDKIMあるいはその両方でfailとなったそれぞれのメッセージの編集されたコピーを含む。これらのフォーマットはの拡張であり、"message/rfc822"または"text/rfc822-headers"を含む点で通常のバウンスのフォーマットと似ている。

フォレンジックレポートは他に以下のものを含む:

* 送信元IPアドレス
* Fromメールアドレス
* 受信者のメールアドレス
* メールのサブジェクト行
* SPFとDKIMの認証結果
* 受信時刻
* 電子メールのメッセージヘッダ(送信元ホスト、電子メールID、DKIM署名、その他カスタムヘッダ情報)

## 互換性
### フォワーダ
電子メールの転送にはいくつかの異なるタイプが存在し、その一部はSPFに違反する。これは電子メールの転送がDMARC認証の結果に影響する理由の一つである。

### メーリングリスト
メーリングリストは、オリジナルの作成者のドメインによるDKIM署名が正しいのに検証失敗する際のよくある原因である。例えばサブジェクトヘッダに接頭辞を加えることによって生じる。多くの回避策があり、メーリングリストソフトウェアパッケージはこの解決に取り組んでいる。

#### すべてのメッセージの変更を無効化
この回避策はメーリングリストの標準ワークフローであり続けており、いくつかの巨大メーリングリストオペレータに採用されているものの、メーリングリストがフッタとサブジェクトのプレフィックスを付けられなくなるという弊害もある。メールソフトが署名付きヘッダを並び替えたり変更したりしないように慎重に設定する必要がある。間違った設定を行ったメールサーバは、リストIDをメーリングリストに送られるメッセージのDKIMに挿入してしまい、リストオペレータが受信を拒否したり、From:を書き換えることをできなくしたりせざるを得なくなる。

#### <code>From:</code>書き換え
最もよく使われる回避策は、`From:`ヘッダフィールドを書き換えることである。オリジナルの作成者のアドレスは`Reply-To`フィールドに加えられる。書き換えは、単に`.INVALID`を追加するものから、不透明なIDが利用されている部分に一時的なユーザIDを割り当て、ユーザの実際のメールアドレスをリストに把握されないためにドメイン名を追加するものまで多岐にわたる。
加えて、作成者とリスト(あるいはリストオペレータ)の両方を表示するよう、表示名を変更することもできる。これらの例は、それぞれ、以下のような結果になる:

```email
From: John Doe <user@example.com.INVALID>
From: John Doe <243576@mailinglist.example.org>
From: John Doe via MailingList <list@mailinglist.example.org>
Reply-To: John Doe <user@example.com>
```


最終行の`Repli-To:`はreply-to-author機能が使えるように設定しておかなければならない。これはreply-to-list機能が`From:`ヘッダフィールド内の変更によって実現される場合を想定したものである。このようにして、これらのフィールドの元々の意味が入れ替わる。

作成者を変更することは通常は正当ではなく、そのデータの意味と見た目の想定された関係や、その自動的な利用を損なうことになる。メーリングリストを仕事の調整のために用い、`From:`フィールドを添付ファイルの作成者として割り当てるツールを配備するコミュニティが存在している。

#### その他の回避策
ラップされたメッセージを解釈できるメールクライアントを使う場合、メッセージのラッピングは上手く動作する。ただ、いくつかの国で法的にそうせざるを得ない場合や、日常的にSPF認証に失敗することがすべての認証をより脆弱なものとしている場合を除けば、何も変更しないのが最も明白な解決法だと思われる。

### Senderフィールド
`From;`ヘッダフィールドをDKIM連携を通過するために変更することによって、の3.6.2節「'From'フィールドにはメッセージの作成者、すなわち、メッセージの作成した責任を持つ人またはシステムあるいはその集合のメールボックス(群)を指定する」に準拠しない状態になり得る。メールボックスは作成者のメールアドレスを指す。`Sender:`ヘッダはメールが別の集団を代表して送られてきたことを示すことができるが、DMARCはFromドメインのポリシのみをチェックし、Senderドメインのポリシは無視する。

とDMARC はともに、多くのユーザエージェントがSenderフィールドを受信者に表示しないという非技術的な理由により、Senderフィールドを利用することを拒否している。

## 歴史
DMARCのドラフト仕様は2012年1月30日から維持されている。

2013年10月、GNU Mailman 2.1.16がリリースされ、`p=reject`のDMARCポリシを設定したドメインからの送信者を処理できるオプションが追加された。この変更は、(純粋なトランザクションメールドメインとは対照的に)人間のユーザによってドメインに適用される限定的なポリシについて予想される相互運用性の問題を予期しようとしたものであった。

2014年4月、YahooはDMARCポリシを`p=reject`に変更し、それによって一部のメーリングリストで誤作動が起きた。数日後、AOLもDMARCポリシを`p=reject`に変更した。これらの動きは大きな混乱を招き、メールボックスプロバイダは自身のセキュリティ上の不備のコストをサードパーティに押し付けたことで非難された。2020年に、公式DMARCwikiのFAQでは、メーリングリストがstrictDMARCポリシのドメインからのメッセージを処理するためのいくつかの提案を掲載しており、その中ではメーリングリストが"From"ヘッダを自身のドメインのアドレスに変更するというものが最も多く実装されている。

2014年8月に、DMARCの問題に対処するためのIETFのワーキンググループが結成され、相互運用性の懸念と標準仕様と文書の改訂続行の取り組みを始めた。その間に、既存のDMARCの仕様は多くの人々に合意を得て実装されたeditorial状態となっていた。2015年3月、Independent Submission Streamに"Informational"(非標準)カテゴリでとして公開された。

2017年3月、:en:Federal Trade CommissionがビジネスにおけるDMARCの利用に関する調査を公開した。569のビジネスの3分の1がDMARCの設定を実装しており、10%未満がサーバに未認証のメッセージを拒否させるようDMARCを設定しているが、大多数はSPFを実装していることが調査によって判明した。

### 貢献者
DMARCの仕様策定に貢献した組織: 
* Receivers: AOL, Comcast, Google (Gmail), Mail.Ru, Microsoft (Outlook.com, Hotmail), Netease (163.com, 126.com, 188.com, yeah.net), XS4ALL, Yahoo, Yandex
* Senders: American Greetings, Bank of America, Facebook, Fidelity Investments, JPMorganChase, LinkedIn, PayPal, Twitter
* Intermediaries & Vendors: Agari (Founder/CEO Patrick R. Peterson), Cloudmark, DMARC Advisor, Red Sift, ReturnPath, Trusted Domain Project, ProDMARC, 

## 関連項目
* (ARC)
* 
* Brand Indicators for Message Identification(BIMI)
* DomainKeys Identified Mail (DKIM)
* 送信ドメイン認証
*  - DMARC対応メールサーバ
* Sender Policy Framework (SPF)

## 脚注

### 注釈

### 出典

## 外部リンク
* 
* The Anti Spam Research Group wiki: Mitigating DMARC damage to third party mail