SPF・DKIM・DMARCについて
一応前回の続き的な感じ。
前回はメール転送のためのプロトコルについて調べたが、これとは別にメール送信元の検証などのプロセスについて今回調べてみる。
SPF(Sender Policy Framework)
SPF(Sender Policy Framework)はメールの送信元が正当なメールサーバであることを確認するためのフレームワークで、ドメインの所有者がDNSのレコードに明記した情報と照らし表せることで検証を行う。
下の図のように、SPFでは送信元ドメインを管理するDNSサーバが登録しているSPFレコードよりそのIPアドレスを入手する。そのIPアドレスと送信メールサーバのIPアドレスを比較し、正しいものであれば通すという仕組みになっている。

ただこれはあくまで送信メールサーバが正しいものだと確認するものであって、送信者が正しいとまでは確認できない。また、現在は認証のかかったSMTP-AUTHは一般的だと思うが、認証のないSMTPでメール送信ができるメールサーバではこのSPFでの送信元の確認があまり意味をなさない(メールサーバに対して送信元を詐称できるため)。
DKIM(DomainKeys Identified Mail)
DKIM(DomainKeys Identified Mail)は電子署名を利用した送信元の検証技術で、送信側がメールに電子署名を付与して受信側でそれを確認するような仕組みとなっている。おおよその仕組みはSPFと似ている。

SPFと比較して署名によるメールの改ざんを検出できるため、SPFよりも安全性が高い。仕組みとしてはメールの本文やヘッダーなどをもとにハッシュ関数として計算するため、それらが改ざんされていると電子署名との不整合で検出できるようになっている。ただ、DKIMは普及率は現状低いらしい。また、大量のメールを送信するようなサーバの場合はSPFよりもサーバリソースが必要になるので、そういった欠点もある。
DMARC(Domain-based Message Authentication, Reporting and Conformance)
DMARC(Domain-based Message Authentication, Reporting, and Conformance)は、SPFとDKIMを構築したうえでそれらの検証結果に基づいてそのメールを受理・隔離・拒否などの行動をとる方式で、さらにその結果を送信者へレポートとして情報を送信する。現時点ではDMARCは強力な手法で広く運用されているらしい。

SPF、DKIM、DMARCどれも送信者のドメインを管理するDNSに設定をする必要がある。DMARCではSPF、DKIMと同じようにTXTレコードで以下のように設定をする。

疑問…
ここまで調べて、DMARCにはなぜSPFとDKIMどちらも必要なのかが分からなかった。というのも、なりすましの検出はDKIMもできるのでSPFが不要なんじゃないかと思う。
例えば、ある悪意を持った送信元メールサーバ(mail.hoge.com)がgoogle.comという送信元だと偽って宛先メールサーバ(mail.fuga.com)にメールを転送したとする。この場合はDKIMでgoogle.comのDNSより公開鍵を取得して検証すれば送信元メールサーバの署名では復号できないはずなので送信元メールサーバが偽っていると分かるはず。

そのほかにはSMTP-AUTHに対応していないメールサーバを踏み台にすることで送信元を偽ることができるが、そもそもなりすますようなドメインのメールサーバが対応していないことはまずないと思うのでそれも難しい。であれば、SPFはDKIMに含まれているようなものだと思うので、なぜSPFを必要になるのかがよくわからない…
もしかすると、DKIMに対応していないメールサーバが多くて、SPFで確認するしかないためどちらもできるようにしているのかもしれないかと思った。