DomainKeysとDKIM

DomainKeysとはYahoo!が提唱し、Yahoo!、Google、そしてSendmailなどが支持推進してい送信者認証技術です。
実際には対応しているサーバーというのは非常に少なく、利用できるサービスとしては推進しているYahoo!MailとGMail、Niftyぐらいでしょうか。

DomainKeys認証の仕組み

DomainKeys認証はまずクライアントがSMTPサーバーへメールを送信します。
SMTPサーバーは秘密鍵とメールのsubjectや本文から暗号化した署名をメールヘッダに付加し、相手のSMTPサーバーへと転送します。
このとき付加される署名はS/MIMEによる署名や暗号化を妨げる物ではありませんので併用する事ができます。
署名済みのメールを受け取ったSMTPサーバーは、その署名が正しい物か認証する必要があります。
まずはDNSサーバーに送信ドメインの公開鍵を問い合わせ、これを入手します。
そして公開鍵でヘッダの暗号化されたDomainKeys署名が正しく復号できれば認証OKということになります。

DomainKeys認証の具体的な流れ

送信側PC 送信側サーバー 相手SMTPサーバー
Domainkey認証とは メールの送信
Domainkey認証とは
SMTPサーバー
秘密鍵からメールに署名
Domainkey認証とは
署名済みメール
Domainkey認証とは
署名の検証
Domainkey認証とは
DNSサーバー
Domainkey認証とは
公開鍵の問い合わせ
Domainkey認証とは
公開鍵
Domainkey認証とは

DomainKeys認証の問題点

DomainKeysにも問題がないわけではありません。
subjectや本文をもとに秘密鍵が暗号化署名を作り出しますから、メーリングリストなどでsubjectや本文が改変されてしまうと署名の検証に失敗することがあります。
また、DNSへの負荷も挙げられます。

DomainKeys認証を発展させたDKIM

実はDomainKeys認証を発展させたプロトコルが現在着々と進んでいます。
DKIM (DomainKeys Identified Mail) と呼ばれるもので、DomainKeysを元に細かな変更点があります。
が・・・現状ではDomainKeysとの違いは分からない程度かと。
当然仕組み自体もDomainKeysとほとんど変わりません。
鍵などもDomainKeysのものがそのまま利用できます。

PostfixでDomainKeys/DKIM認証を実装しよう