技術解説 · 出典付きの回答
DKIM署名ヘッダー(DKIM-Signature)とは?仕組みを解説
DKIM署名ヘッダーとは、送信サーバーがメールメッセージに追加する特定のフィールドです。メッセージ本文と選択したヘッダーの暗号学的ハッシュが含まれており、受信側のメールサーバーはこれを使って、そのメールがドメイン所有者に認可されたものであり、配送中に改ざんされていないことを検証できます。
仕組み
送信サーバーは秘密鍵を使ってメール内容のデジタル署名を作成します。この署名はDKIM-Signatureヘッダーに挿入されます。受信サーバーは、対応する公開鍵をDNSのTXTレコードから取得します。公開鍵で署名を復号し、得られたハッシュを受信したメッセージから新たに計算したハッシュと比較することで、受信側はメッセージが本物であることを確認します。
送信者にとっての重要性
DKIMはメールの転送後も維持されるため、SPFでは得られない信頼のレイヤーを提供します。メッセージの内容が改変されていないこと、そして署名に記載されたドメインが実際の送信者であることを証明します。これによりメッセージが迷惑メールやなりすましと判定される可能性が下がり、良好な送信者レピュテーションを維持するうえで非常に重要です。
運用でよくある間違い
よくある間違いは、重要なヘッダーを署名の対象に含めていないことで、リレーがそのヘッダーを変更すると検証が失敗します。また、サーバー上の秘密鍵を更新したのにDNSの公開レコードが古いままになっている、鍵のローテーションの失敗もよくある問題です。SendHQの無料ツール(https://sendhq.cc/tools)を使って、現在の認証状態を確認できます。
ヘッダーの例
一般的なヘッダーは次のようになります:DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector1; h=from:to:subject:date; bh=hash_of_body; b=digital_signature_value。dタグはドメインを、sはDNSレコードのセレクターを指定し、bhには本文のハッシュが含まれます。
検証のプロセス
メッセージが届くと、受信側はDKIM-Signatureヘッダーを解析してドメインとセレクターを取得します。そしてselector._domainkey.example.comの公開鍵をDNSに問い合わせます。暗号チェックに合格すると、メッセージはDKIM-passとして扱われます。ハッシュが一致しない場合や鍵が見つからない場合は、DKIM-failまたはneutralの結果になります。
よく寄せられる質問
DKIMはメール本文を暗号化しますか?
いいえ、DKIMはプライバシー保護のために内容を暗号化するものではありません。完全性と真正性を保証するためのデジタル署名を提供するもので、内容は読める状態のままですが、署名を壊さずに変更することはできません。
DKIM署名が無効な場合はどうなりますか?
署名が無効な場合、ドメイン所有者が設定したDMARCポリシーに応じて、受信サーバーがメールのスパムスコアを上げたり、メールを完全に拒否したりすることがあります。
1通のメールに複数のDKIM署名を付けられますか?
はい、1通のメールに複数の署名を付けることができます。これは、メッセージがメーリングリストや転送サービスを経由し、元の署名を保持したまま独自の署名が追加される場合によく発生します。
一次情報源
- RFC 6376:DomainKeys Identified Mail(DKIM)の仕様 — RFC Editor
- RFC 7489:ドメインベースのメッセージ認証・レポート・適合(DMARC) — RFC Editor