DKIM
送信ドメイン認証の方式の1つ。送信側のメールサーバがメールに電子署名を付け、受信側は、DNSで公開された送信ドメインの公開鍵で署名を検証して、なりすましと改ざんを検出する。
イマシルちゃんの解説
SPFが「どのサーバから送られてきたか」を確かめるのに対して、
DKIMは、メールそのものに「ハンコ」を押す仕組みなんだ。
送る側のサーバが、自分しか持っていない秘密の鍵でハンコを押して、
受け取った側は、DNSに公開されている確認用の鍵で、ハンコが本物かを確かめる。
途中でメールの中身を書き換えられたら、ハンコが合わなくなるから、すぐにバレちゃうんだよ!
より深い解説
定義
DKIM(DomainKeys Identified Mail)は、RFC 6376で定められた送信ドメイン認証の技術である。送信側は、メールのヘッダーと本文から作った電子署名を、DKIM-Signatureヘッダーとしてメールに付ける。署名の検証に使う公開鍵は、送信ドメインのDNSのTXTレコードで公開する。
仕組み
| 段階 | 送信側 | 受信側 |
|---|---|---|
| 準備 | 鍵のペアを作り、公開鍵をDNSに登録する | − |
| 送信 | メールのヘッダーと本文のハッシュ値から、秘密鍵で署名を作り、DKIM-Signatureヘッダーに入れる | − |
| 受信 | − | DKIM-Signatureの d=(ドメイン)と s=(セレクタ)から、DNSに公開鍵を問い合わせる |
| 検証 | − | 公開鍵で署名を検証し、メールが改ざんされていないことを確かめる |
公開鍵は、「セレクタ._domainkey.ドメイン」という名前のTXTレコードで公開される。セレクタを変えることで、複数の鍵を使い分けたり、鍵を切り替えたりできる。
SPFとの比較
| SPF | DKIM | |
|---|---|---|
| 確認するもの | 送信元サーバのIPアドレス | メールに付けた電子署名 |
| 改ざんの検出 | できない | できる |
| メールの転送 | 失敗しやすい | 内容が変わらなければ成功する |
| 送信側の準備 | DNSにSPFレコードを登録する | 鍵を作り、メールサーバで署名し、公開鍵をDNSに登録する |
DKIMは、署名がメールに付いて運ばれるため、転送されても(内容が変更されなければ)検証に成功する。この点で、転送に弱いSPFを補う。
S/MIMEとの違い
DKIMとS/MIMEは、どちらも電子署名を使うが、目的と署名する主体が異なる。
| DKIM | S/MIME | |
|---|---|---|
| 署名する主体 | 送信側のメールサーバ(ドメイン) | 送信者個人 |
| 公開鍵の配布 | DNS | デジタル証明書 |
| 目的 | 送信ドメインの認証(なりすまし対策) | 送信者本人の認証、暗号化 |
| 利用者の操作 | 不要(サーバが自動で行う) | 利用者が証明書を取得・設定する |
DKIMの限界
DKIMで確認できるのは、「d= に書かれたドメインが署名した」ことである。攻撃者が自分で取得したドメインで正しく署名すれば、検証には成功する。そのため、利用者が見るヘッダーのFromのドメインと、署名のドメインが一致しているかを、DMARCで確認する必要がある。