DKIMとは?
DKIM(DomainKeys Identified Mail)は、RFC 6376で定義されたメール認証方法です。非対称暗号化を使用しており、メールサーバー上の秘密鍵が送信メッセージに署名し、DNSに公開された公開鍵によって受信サーバーがその署名を検証します。署名後にメッセージが改ざんされた場合、署名は無効になります。
SPFとは異なり、DKIMは送信IPだけでなく、メッセージの内容自体(ヘッダーや本文)を認証します。これにより、送信者のIPが変わるメール転送シナリオでも有効性を維持できます。
なぜDKIMが必要なのか?
1メッセージの整合性
メールの本文とヘッダーがサーバーを出てから変更されていないことを証明します。
2転送に強い
署名はメールに埋め込まれており送信IPに依存しないため、中継されても有効性が保たれます。
3DMARCに必須
DMARCは、パス/フェイルの判断基準としてDKIMのアライメントを使用できます。
4到達率の向上
GmailやOutlookなどは、フィルタリングにおいてDKIM署名付きのメールを高く評価します。
DKIMの仕組み — ステップ・バイ・ステップ
公開鍵と秘密鍵のペアを生成し、秘密鍵を使用するようにメールサーバーを構成します。
公開鍵を `selector._domainkey.yourdomain.com` のDNS TXTレコードとして公開します。
メールを送信すると、メールサーバーは選択されたヘッダーと本文をハッシュ化し、そのハッシュを秘密鍵で署名します。
署名は `DKIM-Signature` ヘッダーとしてメールに追加されます。
受信サーバーは `DKIM-Signature` を読み取り、DNSから公開鍵を取得して署名を復号し、メッセージを再ハッシュして比較します。
一致すればメッセージは真正かつ未改ざんです。不一致は、改ざんまたは設定ミスを示します。
DKIM DNSレコード(公開鍵)
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADC...AQAB主要なフィールド
v=DKIM1— バージョン識別子k=rsa— 鍵の種類(rsa または ed25519)p=— Base64でエンコードされた公開鍵h=— 許容されるハッシュアルゴリズム(sha256)s=— サービスタイプ(email または *)t=s— ストリクトモードフラグDKIM-Signature ヘッダー(メール内)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=yourdomain.com; s=mail2024;
h=from:to:subject:date:message-id;
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
b=mY93xZ...署名フィールドの意味
一般的なDKIMの問題
本文の改変
一部のメーリングリストやウイルス対策スキャナーが本文を変更し、bh=(ボディハッシュ)が壊れることがあります。
DNSレコードの欠落
送信前に、TXTレコードが公開され伝播していることを確認してください。
誤ったセレクタ
署名内の s= は、DNSレコード名のセレクタと一致する必要があります。
鍵の長さが短すぎる
少なくとも2048ビットのRSA鍵を使用してください。1024ビットは安全ではないと見なされ、一部のプロバイダーでは拒否されます。
よくある質問 (FAQ)
DKIMはメールに電子署名を付加する暗号化認証方式です。受信サーバーはこの署名を使用して、メールがドメイン所有者によって承認されたものであること、および配送中に内容が改ざんされていないことを検証します。
DNS内の特定の公開鍵を特定するための文字列です。メールサービスプロバイダー(ESP)の設定画面や、送信済みメールのヘッダーにある「s=」タグで確認できます。
セレクタ名の誤り、DNS浸透の遅延、またはTXTレコードを誤ったドメイン階層に追加したことが主な原因です。
はい、複数のメールサービスを利用する場合は、サービスごとに固有のセレクタを使用して複数のレコードを運用するのが一般的であり、ベストプラクティスです。
有効なDKIM署名は、ISPからの信頼を高めます。良好な送信者レピュテーションの構築に繋がり、メールがスパムフォルダに振り分けられる可能性を低くします。
秘密鍵は送信サーバーでメールの署名に使用され、公開鍵はDNSで公開されます。受信側は公開鍵を使って署名を検証します。