DKIMについて整理してみた

DKIMについて整理してみた

2025-03-22

DKIMについて

DKIM

DKIM(DomainKeys Identified Mail)は、電子署名方式の送信ドメイン認証です。
メールを送信する際に送信元が電子署名を行い、受信者がそれを検証することで、送信者のなりすましやメールの改ざんを検証する仕組み。

公開鍵の登録

メールに付加されている電子署名の検証は、送信元のDNSサーバに設定されているDNSレコードを参照して行われます。
また公開鍵はFQDNの形式でTXTレコードとして下記のように登録されます。

selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3...(以下略)"

上記のように、レコード名は<セレクタ名>._domainkey.<送信元ドメイン>で構成されます。
<セレクタ名>は後述するDKIM-Signatureヘッダのsタグに記載されたラベルになります。
また<送信元ドメイン>は、DKIM-Signatureヘッダのdタグに記載されたドメインとなります。 ちなみに同じドメインに対して複数の異なるセレクタを使用することで、同じドメインで複数のDKIMキーを使用することができます。

DNSレコードの値として登録されているv=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3...(以下略)が、実際のDKIMの公開鍵や設定内容を表します。
この値は;で区切られたタグの集合体で、各タグの役割は以下の通りです。

DKIMの電子署名

DKIMでは送信側で電子メールに電子署名を付加しますが、その際にはDKIM-Signatureヘッダとして追加します。
公開鍵と同様に、DKIM-Signatureヘッダの値も;で区切られたタグの集合体です。 以下が、DKIM-Signatureヘッダの例です。

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=selector;
 c=simple/simple; q=dns/txt; t=1617123456;
 h=From:To:Subject:Date:Sender;
 bh=2jUSOH9Nh...(以下略);
 b=AuUoFEfDxT...(以下略)

上記のDKIM-Signatureヘッダの例における各タグの役割は以下の通りです。

その他にもいくつかタグがあります。

DKIMの正規化処理

電子メール配送において、メール転送エージェント(MTA)や各種セキュリティフィルタ、受信メールサーバによって電子メールのデータが変更されることがあります。
DKIMの電子署名の検証において、これらの変更をある程度許容できるようにするための仕組みが正規化処理です。
DKIM-Signatureヘッダのcタグにヘッダと本文それぞれに正規化処理アルゴリズムを指定します。
指定可能なアルゴリズムは以下の通りです。

送信時の処理方法

DKIM認証を実施する場合、メール送信側は、次の手順で署名を行って、DKIM-Signatureヘッダを追加します。

  1. DKIM署名対象のメールか確認する。
  2. 署名対象のヘッダを決定し、hタグに列挙する。
  3. メール本文のlタグに指定した長さを取り出し、正規化処理を実施する。
  4. ヘッダ、正規化したメール、DKIM-Signatureヘッダ(署名データを除いた部分をつなげたもの)を結合したデータに対してハッシュを作成し、bhタグに追加する。
  5. 4.のハッシュに対して電子署名を作成し、DKIM-Signatureのbタグに追加したのち、DKIM-Signature自身をメールに追加する。

受信時の処理方法

受信時は、DKIM-Signatureヘッダを参照し次の手順で処理が行われます。

  1. DKIM-Signatureヘッダのdタグ・sタグから、公開鍵を参照するドメイン名を取得する。
  2. 1.のドメイン名から公開鍵を取得する。
  3. hタグに指定されているヘッダとメール本文、DKIM-Signatureヘッダ(署名データを除いた部分をつなげたもの)を結合したデータに対してハッシュを作成する。
  4. 3.のハッシュを電子署名を作成する。
  5. 2.で取得した公開鍵を用いてDKIM-Signatureヘッダのbタグに登録されている電子署名を取得する。
  6. 4.と5.の電子署名を比較し一致すれば、DKIM認証成功となる。

DKIM ADSP

Author Domain Signing Practice(ADSP)は、DKIMの認証結果をどのように扱うべきかを記載したポリシーを送信側で公開するものです。
現在は代わりにDMARCが利用されているため、利用は推奨されてません。

まとめ

DKIMはメールを送信する際に送信元が電子署名(DKIM-Signatureヘッダ)を付加し、受信者がそれを検証することで、送信者のなりすましやメールの改ざんを検証する仕組みのことです。

本当はSPFやDMARCもまとめたいところですが、それらはまた別の記事でまとめることにします。 ではまた。

参考文献