MailData

DKIM失敗の修正方法

DKIM失敗の修正方法

2025年1月9日
著者: Maitham Al Lawati
翻訳: 竹洞 陽一郎

この記事はPowerDMARCのブログ記事 How to Fix DKIM Failure の翻訳です。
Spelldataは、PowerDMARCの日本代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。


DKIMの失敗は、DKIMプロトコルにおける識別子の整合性の失敗や、レコード設定の問題が原因である可能性があります。
本日は、DKIM仕様がどのようにしてドメインを認証するのか、なぜメッセージに対してDKIMが失敗するのか、そしてDKIMを簡単に修正する方法をステップバイステップで解説します。

重要なポイント

DKIM失敗とは何を意味するのか

送信メールに対してDKIMが有効になっている場合、受信サーバはDKIM秘密鍵をDNS上に公開された公開鍵と照合することでメールの信憑性を確認します。
一致した場合、DKIMはそのメールに対して成功となり、一致しない場合はDKIMが失敗します。

DKIM失敗とは、DKIM認証チェックが失敗した状態を指します。
これは、DKIM署名ヘッダーとFromヘッダーに指定されたドメインの不一致や、鍵ペアの値の不整合が原因で発生します。

DKIM失敗の一般的な原因

1. DKIMレコードの構文エラー

DKIM失敗

信頼性のあるDKIMレコード生成ツールを使用せずに、手動でドメインのレコードを設定しようとすると、正しく実装できない場合があります。
DNSレコードの構文エラーは認証失敗を引き起こします。

2. DKIM整合性チェックの失敗

ドメインにDKIMに加えてDMARCを設定している場合、DKIMチェック中に、メールヘッダーのDKIM署名内のd=フィールドのドメイン値が、Fromアドレスにあるドメインと一致する必要があります。
これは、厳密一致(サブドメインまで完全に一致する必要がある)または緩和一致(ZoneAPEXが一致する必要がある)を指定できます。
DKIM署名ヘッダーのドメインがFromヘッダーのドメインと一致しない場合、典型的にはドメインスプーフィングやなりすまし攻撃のケースで、DKIMが失敗することがあります。

3. サードパーティメールベンダー用のDKIMを設定していない

複数のサードパーティメールベンダーを使用して組織の代わりにメールを送信している場合、各ベンダーに連絡して、送信メール用のDKIMを有効化する方法を確認する必要があります。
カスタムドメインまたはサブドメインを使用している場合、ベンダーに依頼して、ユニークなDKIMセレクターを使用してDNSにDKIMレコードを公開してもらうことが理想的です。

または、DKIM鍵ペアを生成して、秘密鍵をメールベンダーに渡し、公開鍵を自分のDNSに公開することも可能です。
設定ミスがDKIM失敗を引き起こす可能性があるため、DKIM設定に関してベンダーとオープンにコミュニケーションを取ることが重要です。

注意: 一部のサードパーティ交換サーバーは、メールボディにフォーマットされたフッターを追加する場合があります。
これらのサーバーがメール転送プロセスの中間サーバーである場合、追加されたフッターがDKIM失敗の原因となることがあります。

4. サーバー通信の問題

特定の状況では、DKIMが無効化されたサーバーからメールが送信されることがあります。
この場合、そのメールに対するDKIMは失敗します。
通信する各サーバーにおいてDKIMが適切に有効化されていることを確認する必要があります。

5. メール転送エージェント(MTA)によるメッセージボディの改変

SPFとは異なり、DKIMはメッセージの送信者IPアドレスやリターンパスを認証時に確認しません。
その代わり、メッセージ内容が転送中に改変されていないことを確認します。

参加するMTAやメール転送エージェントが、行の折り返しやコンテンツのフォーマット変更を行う場合があり、これがDKIM失敗を引き起こすことがあります。
メール内容のフォーマット変更は、通常、受信者にとって理解しやすくするために自動的に行われます。

6. DNS障害/DNSダウンタイム

これはDKIM失敗の一般的な原因です。
DNS障害は、サービス拒否攻撃などのさまざまな理由で発生する可能性があります。

また、ネームサーバーの定期的なメンテナンスがDNSダウンタイムの理由になることもあります。
この間(通常は短期間)、受信サーバーはDNSクエリを実行できません。
DKIMはDNSにTXTまたはCNAMEレコードとして存在しており、クライアントサーバーは認証中に送信者のDNSに公開鍵を問い合わせます。
障害中はこれが不可能とみなされるため、DKIMが失敗することがあります。

7. OpenDKIMの使用

OpenDKIMは、Gmail、Outlook、Yahooなどのメールボックスプロバイダーによって一般的に使用されるオープンソースのDKIM実装です。
OpenDKIMは検証中にポート8891を介してサーバーと接続します。
不適切な権限設定により、サーバーがソケットに接続できない場合、エラーが発生する可能性があります。
ソケット用のディレクトリが正しく設定され、権限が正確に有効化されているかどうかを確認してください。

DKIM認証失敗の異なる結果

1. Authentication Result: dkim=neutral (bad format)

DKIMレコード内で自動生成された改行が原因で、エラーメッセージ「dkim=neutral (bad format)」が表示されることがあります。
検証時にリソースレコードが分割されてリンクされると、誤った値が生成されます。
解決策として、1024ビットのDKIM鍵を使用することで、DNSの255文字制限内に収めることが可能です(2048ビットでは超える場合があります)。

2. Authentication Result: dkim=fail (bad signature)

DKIM認証失敗の結果は、メッセージボディ内で第三者による内容変更が行われた場合に発生する可能性があります。
このため、DKIM署名ヘッダーがメールのボディと一致しなくなります。

3. Authentication Result: dkim=fail (DKIM-signature body hash not verified)

「DKIM-signature body hash not verified」または「DKIM signature body hash did not verify」という結果は、受信サーバーが返すエラーで、DKIMボディハッシュ値(bh=タグ)が転送中に何らかの形で変更されたことを意味します。
たとえDKIM鍵ペアが正しく設定され、DNS上に有効な公開鍵が公開されていても、ハッシュ値の微妙な変更(スペースや特殊文字の挿入など)がボディハッシュ検証を失敗させる可能性があります。

bh=タグ値が変更される原因は以下の通りです。

4. Authentication Result: dkim=fail (no key for signature)

このエラーは、DNS上で公開鍵が無効または欠落している場合に発生する可能性があります。
公開鍵と秘密鍵がDKIMで一致しており、正しく設定されていることを確認することが不可欠です。
DKIM DNSレコードが公開されており、有効であることを確認しましたか?
無料のDKIMレコードチェッカーを使用して、今すぐ確認してください。

メッセージに対するDKIM失敗を防ぐ方法

DKIMの重要性

上記のすべての問題を完全に解決することは不可能ですが、DKIM失敗の可能性を最小限に抑えるために役立ついくつかのヒントを紹介します。

DKIM失敗を修正するには?

信頼性の高い生成ツールを使用してDKIMレコードを作成
正確な結果を得るため、信頼性のある著名な生成ツールを使用し、値をコピー&ペーストしてエラーを防止します。
DKIMレコードにギャップやエラーがないか確認
DNSレコードを定期的に点検し、不備を修正します。
SPFとDMARCを実装してセキュリティを強化
ドメインスプーフィングやなりすましに対抗する追加のセキュリティ層としてSPFとDMARCを使用します。
DMARCではメッセージが検証を通過するためにSPFまたはDKIMのどちらかが成功する必要があります。
そのため、DKIMが失敗してもSPFが通過すれば、DMARCを通じてメッセージが配信されます。
DMARCレポートを有効化
ドメインのDMARCレポートを有効にし、メッセージの認証結果を監視します。
DMARCリーダーダッシュボードでDKIM失敗レポートを監視
専用のダッシュボードで認証結果を追跡し、問題点を特定します。
メールベンダーと詳細な議論を行う
DKIM設定について、ベンダーがプロトコルをサポートしているか、どのように処理するかを確認します。
専門家のアドバイスを受ける
無料のDMARCトライアルを利用して、DMARCスペシャリストのチームからメール認証設定に関する専門的なアドバイスを受けます。

注意: この記事では一般的なDKIM失敗の原因とその解決方法を取り上げましたが、ドメインやサーバー固有の根本原因によりエラーが発生する場合があります。
そのような状況についてはこの記事では触れていません。
認証プロトコルに関する十分な知識を蓄えた上で、組織においてこれらを実装し、ポリシーを強制するようにしてください。
DKIMの失敗、SPFまたはDMARCの検証失敗は、メールの配信率に影響を与える可能性があります。

メールの自動転送とDKIM vs SPF

メールの転送 SPV VS DKIM

メールが自動転送される場合、1つまたは複数の中間サーバーが関与するため、メールヘッダーが変更されます。
転送されたメッセージは、この中間サーバーのヘッダー情報を使用しますが、そのサーバーが元の送信者のSPFレコードに認可された送信元として含まれているとは限りません。

SPFに中間サーバーのIPが含まれていない場合、SPF認証は失敗します。

一方で、DKIM署名はメールボディに含まれるため、転送はDKIMに影響を与えません。
そのため、既存のSPFポリシーに加えてDKIMを設定することで、転送されたメッセージの不必要な認証失敗を回避することができます。

DKIMを使用せずに問題を解決する方法

DKIMの設定は推奨されますが、必須ではありません。
DKIMを設定せずに転送されたメールにおけるSPF失敗を解決するには、以下の方法を検討してください。

DKIMとは何か、なぜ設定が必要なのか

DKIM(DomainKeys Identified Mail)は、送信元の正当性を確認し、メールの配信プロセス中に内容が改竄されていないことを保証するメール認証システムです。

メールにDKIM設定が必要な理由について話すには、メールが不正行為を実行する手段となる可能性を考える必要があります。
フィッシングやドメインスプーフィングからマルウェア感染に至るまで、偽のメールを利用してなりすまし攻撃が行われることがあります。
このため、企業は送信者を認証するフィルタリングシステムを設定し、自社の評判を守るだけでなく、数百万のユーザーがメール詐欺の被害に遭うのを防ぐ必要があります。

DKIM失敗とは、プライベートキーが公開鍵と一致しない場合を指します。

DKIMは、メール情報を署名するためにハッシュ値(プライベートキー)を使用し、送信者のDNSに保存された公開鍵と照合する仕組みを持つメール認証システムです。
DKIM署名でデジタル署名されたメールは、悪意のある第三者による改竄に対して高い保護を提供します。

DKIM失敗に関するFAQ

どの送信者がDKIMに失敗するのか?
DKIM失敗は、以下の場合に典型的に発生します。
  • プロトコルが適切に設定されていない
  • 2048ビットの鍵非対応のメールプロバイダーで2048ビットの鍵を使用している
  • メッセージ転送中に第三者の中間サーバーがメール内容を改変した
DKIMが失敗してもDMARCは通過するのか?
はい、SPFがそのメールで成功すれば可能です。
DMARCを設定し、SPFおよびDKIMメカニズムに対してメールを整合させた場合、どちらか一方(SPFまたはDKIM)のチェックに合格すれば、DMARCを通過します。
ただし、DMARCの整合性がDKIM認証のみに依存している場合、DKIMが失敗するとDMARCも失敗します。