用語辞典・メール

DKIM

DKIMとは

DKIMは、送信メールへ電子署名を付け、受信側がDNSの公開鍵で改ざんや送信ドメインを検証する方式です。正式名称はDomainKeys Identified Mail(ドメインキーズ・アイデンティファイド・メール)で、一般に「ディーキム」と読みます。

送信側は管理する秘密鍵で、選んだヘッダーと本文ハッシュを署名し、DKIM-Signatureヘッダーを追加します。受信側は署名にあるドメインとセレクターからDNSの公開鍵を取得し、受信内容から同じ計算を行います。

DKIM通過は「署名したドメインの管理下にある鍵で、署名対象が検証できた」ことを示します。そのドメインが画面のFromと同じか、内容が安全かは別に確認します。

送信側が本文と選択ヘッダーを計算して署名を付け、受信側がDNS公開鍵で同じ内容を検証する秘密鍵は送信側だけが保持し、公開鍵はセレクター付きDNS名で配布する
送信サーバーが本文カードと複数のヘッダーカードから封印を作って封筒へ付け、受信サーバーがDNSから得た公開鍵で封印と内容を照合するDKIMのピクトグラム図解
図1転送中に署名対象が変わると検証に失敗します。許容する空白整形の範囲はカノニカライゼーション設定で決まります。

署名作成から判定までを六段階で追う

本文ハッシュ、署名対象ヘッダー、署名ドメイン、公開鍵の探索を分ける一つでも署名対象が一致しなければ、その署名は通過にならない
  1. Normalize
    規定の形へ正規化する

    ヘッダーと本文へsimpleまたは緩和のカノニカライゼーションを適用する

  2. Bodyハッシュ
    本文のハッシュを作る

    署名側はbhへ格納し、受信側は受信本文から再計算して比較する

  3. Headers
    署名対象ヘッダーを選ぶ

    hタグの順序に従い、Fromなど選ばれたフィールドを計算対象にする

  4. Signature
    秘密鍵で署名を作る

    DKIM-Signature自身の所定部分も含め、bタグへ署名値を格納する

  5. DNS鍵
    公開鍵を取得する

    sのセレクターとdのドメインからDNS TXTの鍵レコードを調べる

  6. Verify
    本文と署名を検証する

    本文ハッシュと電子署名が一致するかを確認し、認証結果へ記録する

図2複数のDKIM署名がある場合は署名ごとに検証します。一つの失敗で他の有効な署名まで失敗にはしません。

dは署名ドメイン、sは公開鍵を選ぶセレクターである

DKIM-Signatureのd=は署名責任を示すドメイン、s=は同じドメインで複数鍵を使い分けるセレクターです。受信側はs._domainkey.dというDNS名を組み立て、TXTレコードの公開鍵を調べます。

セレクターは日付、サービス、地域などで分けられますが、文字列そのものに信頼性はありません。DNSに正しい公開鍵があり、署名が数学的に検証できることが重要です。

h・bh・bは、それぞれ署名対象、本文要約、署名値を担う

h=は署名したヘッダーフィールド名、bh=は正規化した本文のハッシュ、b=は電子署名です。受信側はhの指定順に該当ヘッダーを選び、署名時と同じ入力を再構成します。

Fromは署名対象に含める必要があります。Subject、Date、Message-ID、To、MIME関連など何を追加するかは送信側の設計です。署名していないヘッダーが後から追加・変更されてもDKIMは検出しません。

カノニカライゼーションは、配送中の無害な整形を吸収する

canonicalization(カノニカライゼーション/正規化)にはsimpleと緩和があり、ヘッダーと本文へ別々に選べます。緩和はヘッダー名の大小文字や連続空白など、意味を変えにくい整形を一定範囲で吸収します。

本文への署名後にフッターを追加する、件名を書き換える、MIME構造を変えるなどは通常検証を壊します。正規化は内容変更を自由に許す仕組みではありません。

転送には比較的強いが、メーリングリストの改変には失敗し得る

単純転送はSMTPの接続元やエンベロープFromを変えるためSPFが失敗しやすい一方、メッセージを変更しなければ元のDKIM署名を保てます。

メーリングリストが件名接頭辞、本文フッター、添付変換を加えると署名が壊れます。ARCなどで中継前の認証結果を連鎖的に伝える方法もありますが、DKIMの元署名通過を復元するものではありません。

DKIM通過だけでは、表示Fromのドメインを認証しない

送信者は自分が管理する別ドメインd=で有効な署名を付けながら、ヘッダーFromへ他組織のドメインを書くことが技術的にできます。DKIM検証は署名ドメインの鍵を確認しても、Fromとの一致を必須にしません。

DMARCは、DKIM通過したd=ドメインとAuthor Domainが厳格または緩和で整合するかを確認します。利用者が見る差出人を保護するには整合評価が必要です。

電子署名は暗号化ではない

DKIMは改ざん検出とドメイン単位の責任表示を行います。本文や添付を第三者から読めなくするものではなく、配送サーバーは内容を通常どおり処理できます。通信路の暗号化はSTARTTLSなどが担います。

署名済みメールでも悪意あるリンクや添付を含められます。署名ドメインの評判、From整合、内容、受信者の状況を合わせて判断します。

鍵を定期的に更新し、古い秘密鍵を失効させる

秘密鍵は送信システム内に限定し、アクセス制御と監査を行います。セレクターを切り替えて新旧公開鍵を並行させ、配送中メールの検証期間を確保してから旧鍵を削除します。

送信サービス、d=ドメイン、セレクター、鍵アルゴリズムと長さ、署名対象、正規化、導入・廃止日、実メールの検証結果を台帳化すると、漏えい対応と配送障害調査ができます。

署名方式の確認資料:RFC 6376「DKIM Signatures」RFC 8301「DKIM Cryptographic Update」RFC 8463「Ed25519-SHA256 for DKIM」

関連用語