メールの送信には、SMTP(Simple Mail Transfer Protocol)というプロトコルが使われている。
そこで今回はSMTPに関する用語について整理し、またメールの偽装防止に使われているSPF、DKIMについてまとめてみる。
エンベロープとヘッダ
メールにはヘッダFromとヘッダTo、エンベロープFromとエンベロープToがある。
ヘッダFrom/Toは、メールクライアント側で表示されるアドレスであり、エンベロープFrom/Toは、実際に送受信を行う際に使われるアドレスである。
例えばあなたの開発したアプリケーション(myapp.com)でメール送信機能があり、メールの送信にはAmazon SESを使うとする。
その際にはヘッダFromは「mail.myapp.com」のような好きなアドレスを指定できるが、エンベロープFrom/Toには「amazonses.com (またはそのサブドメイン) 」がAmazon SES側により指定される。
このようにヘッダFromやエンベロープFromは送信者や転送者が好きなアドレスを自由に指定できるため、メール送信者の偽装防止の仕組みが必要になる。この仕組みにはSPFやDKIMがある。
SPF(Sender Policy Framework)
SPFとは、メール送信元のIPアドレスを元に送信者を認証する技術のことである。
このSPF認証の仕組みは、送信する側があらかじめ、メール送信元ドメインのDNSにメール送信側のIPアドレスを登録しておく(SPFレコード)。そして受信側は、DNSサーバーへ送信元のIPアドレスとメールアドレスドメインが登録されているかを確認し、正当性を確認する。
このSPFはIPアドレスの偽装は不可能だよね、という前提の元に策定されている。
DKIM(Domainkeys Identified Mail)
DKIMとは、電子署名を使って送信者を認証する技術のことである。
送信側で電子メールに電子署名を付加し、受信側でその電子署名を照合するという方法で送信者のドメインの認証を行う。
電子署名は公開鍵暗号方式などを利用した署名である。(内容がそれるため今回は説明を省略)
DMARC(Domain-based Message Authentication,Reporting and Conformance)
DMARCは、SPFとDKIMを使った認証方法に失敗した際の挙動を、ドメイン保持者が決めることのできる仕組みである。
これにより保持ドメインからの送信に関するレポートを受け取れたり、メールの認証失敗時の動作を柔軟に指定できる。