DomainKeys Identified Mail(DKIM)メール認証標準により、メールサーバーは受信メールを検査し、送信者を確認するとともに、メールメッセージの改ざんを検出できます。この標準は、メールが転送中に傍受・改変されたかどうかを判断するという課題を解決し、SPAMやなりすましメールの検出にも役立ちます。
DKIMを導入すると、組織は自組織のメールの評価を高められるほか、受信側のメールサーバーによるメールセキュリティの向上も可能になります。
この記事では、次の内容を解説します。
DKIMの仕組み
DKIMを大まかに説明すると、組織がメールの重要な部分について暗号化ハッシュ値を提供できるようにする仕組みです。公開鍵と秘密鍵のペアを使った暗号化により、受信側のメールサーバーは、受信したメールのハッシュ値と提供されたハッシュ値を比較し、転送中に改変が行われていないかを検証できます。
DKIMチェックに成功すると、メールの「from」フィールドに記載された組織と、その組織に関連付けられたDNSを照合して、メールの所有権も確認できます。DKIMのハッシュ値が一致しないメールは改変された可能性があるため、受信者への注意喚起として拒否、隔離、またはSPAM扱いになることがあります。

DKIMの基礎
DKIMとその標準に関する詳細情報は、Internet Engineering Task Force(IETF)が公開しています。DKIMとその標準が最後に更新されたのは2011年です。DKIMは、組織がホスティングするDomain Name Service(DNS)レコード内のテキストファイルとして展開されますが、標準を正しく導入・維持するのは複雑な場合があります。幸い、各コンポーネントとその仕組みを理解すれば、この複雑さは容易に管理できます。
DKIM DNSレコードの基本構造
DKIM DNSレコードは非常にシンプルで、レコードの内容だけでなくファイル名からも情報を伝えます。内容は多くの場合、次のようになります。
v=DKIM1; p=76E679F05F709AF665853833EEC3F5ADE69A2392BEBE40658267AB3BD3CB6CBEここで「v」はバージョンを表し、常にDKIM1です。「p」フィールドは公開暗号鍵の値です。
ファイル名は<selector>._domainkey.<domain>の形式になります。Selectorはファイルのバージョンを示し、組織はメールサーバーごとに異なるselectorを使用します。Domainは組織のドメインです。たとえば、ファイル名nashville._domainkey.exampledomain.comは、exampledomain.comを使用する組織におけるnashville selectorを表します。
DKIMの基本プロセス
DKIMの処理は、次の手順で行われます。
- 組織がDKIMファイルをDNSに公開する
- 組織が、ハッシュ処理に含めるヘッダーフィールドと、本文全体または本文の一部のどちらをハッシュ化するかを決定する
- 送信メールサーバーが選択したフィールドのハッシュ値を計算し、メール送信時にDKIM情報をDKIMメール署名(下記参照)としてメールに含める
- 受信側のメールサーバーまたはメールゲートウェイが、含まれているDKIM署名と、組織の公開暗号鍵(DNSに登録されたDKIMレコードに保存)を使ってDKIM署名を再計算し、検証する
注意点として、ハッシュ化する項目を決める際には、厳密性と使いやすさのバランスを取る必要があります。フィールドやテキストを増やすほど安全性は高まりますが、送信や転送の過程でメールに軽微な変更が加えられることがあり、余分なスペースや改行によって、見た目には完全で改ざんされていないメールでもハッシュ値の検証に失敗する可能性があります。
DKIMメール署名
送信元の組織は、DKIMハッシュ文字列を作成するためにメールのどのフィールドを暗号化するかを決め、送信メールにデジタル署名として含めます。送信メールサーバーは、選択したフィールドのテキスト値を取得し、通常はSHA-256などのハッシュアルゴリズムを使ってハッシュ文字列を作成します。ハッシュ文字列が生成されると、メールサーバーは秘密暗号鍵でハッシュ文字列を暗号化し、暗号化されたハッシュ文字列をDKIMメール署名としてメールヘッダーに含めます。
通常、組織は送信ドメインとメッセージ本文の一部を選択してハッシュ値を生成します。
例:
DKIM-Signature: v=1; a=rsa-sha256; d=sampledomain.com; s=nashville;
c=relaxed; q=dns/txt; t=1117574938; x=1118006938;
h=from:to:subject:date:keywords:keywords;
bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ
VoG4ZHRNiYzRこのファイルを構成する要素は次のとおりです。
| 要素と値 | 意味 | 必須要素? |
|---|---|---|
| v=1 | v=バージョン。常に1 | 必須 |
| a=rsa-sha256 | a=署名アルゴリズム。多くのアルゴリズムを使用できますが、メールサーバーがサポートするのはrsa-shaまたはrsa-sha256のみの場合があります | 必須 |
| d= sampledomain.com | d=署名ドメイン識別子(SDID)。メールを送信する組織のドメインであり、DNSおよびDKIMレコードが配置されるドメイン | 必須 |
| s=nashville | s=Selector。このDKIMファイルに固有の名前。複数のDKIMファイルを使用する場合、受信メールサーバーはselector名に基づいて正しい公開鍵を検索する | 必須 |
| c=relaxed | c=正規化アルゴリズム。値は「relaxed」または「simple」。ハッシュ値の計算時に、メールヘッダーや本文への変更を一切許容しない単純な計算にするか、ヘッダーの折り返し方やメール本文の空白の扱いに関する軽微な変更を許容する緩やかな計算にするかを指定する | いいえ。ただし推奨 |
| q=dns/txt | q=公開鍵の取得に使用するクエリ方式。デフォルトは「dns/txt」で、DNSクエリを使用し、テキストファイル(TXT)が返されることを意味する | 必須 |
| t=1127574938 | t=タイムスタンプ、つまりメッセージに署名した時刻 | 必須 |
| x=1168006938 | x=DKIMの有効期限。この有効期限を過ぎると、その他の検証がすべて一致していてもDKIMは失敗する | いいえ。ただし推奨 |
| h=from:to:subject: Date:keywords: keywords; | h=ヘッダー。DKIMの計算に含めるメールヘッダー内のヘッダーをコロンで区切った一覧。転送中に変更される可能性が高いヘッダーフィールドは避けるのが望ましい | 必須 |
| bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=; | bh=(上記のaに示された)ハッシュ関数で正規化した後のメッセージ本文のハッシュ値 | 必須 |
| b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ VoG4ZHRNiYzR | b=(上記のaに示された)ハッシュ関数でハッシュ化したヘッダーと本文のデジタル署名。これが署名そのものを表し、メール内のその他すべてのDKIM情報は、署名ハッシュを正しく計算する方法を示す | 必須 |
| i(上記には未記載) | i = エージェントまたはユーザー識別子(AUID)タグ。SDIDドメインのデフォルト値の前に@文字を付ける場合に使用する | いいえ |
| l(上記には未記載) | l = メッセージ本文の長さ。値は76桁以下の10進数に制限され、メッセージ本文のバイト数を指定する | いいえ |
| z(上記には未記載) | z = コピーされたヘッダーフィールド。すべてのヘッダーフィールドとその内容を、縦棒文字(|)で区切って表示する |
DKIM Selector
組織のDNSサーバーには、組織内の各メールサーバーに対応するDKIMエントリ、つまりselectorが登録されます。一意のselector名は、DKIMファイル名だけでなく送信メールの署名に含まれる「s」タグにも記載されるため、受信メールサーバーはDKIM検証プロセスで使用すべきDKIMエントリを把握できます。
DKIM鍵のローテーション
暗号化を利用する場合、鍵を長期間使い続けるほど、盗難や侵害の可能性が高まります。このリスクを減らすため、4~6か月ごとに鍵をローテーション(現在の鍵を新しい鍵に置き換えること)することが推奨されます。
メールサーバーはどのようにDKIMを検証するのか?
暗号化されたDKIM署名付きのメールが受信メールサーバーに届くと、ヘッダーに記載された暗号化対象フィールド、使用されたハッシュアルゴリズムの種類、公開暗号鍵を確認するためのDKIM selectorが検査されます。次に受信メールサーバーは、指定されたメールフィールドを独自に暗号化し、公開鍵を使って暗号化されたメール署名のハッシュコードを復号して、一致するかどうかを確認します。
DKIMのハッシュコードが一致すればメールの完全性が確認され、このプロセスに合格したメールは受信者に配信されます。一致しないハッシュコードは、メールサーバーの設定に応じて破棄されたり、SPAMフォルダーに移動されたり、不審なメールとしてフラグが付けられたりします。
関連するメール認証標準
DKIMは、限定された範囲で送信メールの完全性を認証します。より堅牢なソリューションでは、SPFおよびDMARC認証フレームワークも実装します。
SPF: Sender Policy Framework(SPF)認証方式は、組織のドメインからメールを送信することを認められたメールサーバーを指定します。
DMARC: Domain-based Message Authentication Reporting and Conformance(DMARC)は、SPFおよびDKIMに失敗したメールをより直接的に制御できるほか、正規のメールとなりすましメールを報告できます。
Domain Keys Identified Email(DKIM)の設定方法
Domain Keys Identified Email(DKIM)では、ドメインのDNSサーバーへのファイル追加、暗号鍵の生成、送信メールサーバーの変更が必要です。
ドメインDNSを使用したDKIMレコードのインストール
ドメインのDNSにDKIMエントリを追加する手順は次のとおりです。
- ドメインレジストラにログインし、DNS設定を管理または構成するオプションをクリックする
- 「新しいレコードを追加」を見つけてクリックし、「TXT」レコードを選択する
- ホスト名のオプションでは、DKIMファイル名に使用する固有の「selector」を、送信メールサーバーごとに設定する必要があります
- 各ファイルでは公開暗号鍵を公開する必要があり、鍵はselectorごとに固有でなければなりません
DKIM暗号鍵の生成
DKIMレコードに使用できる公開鍵を生成する方法はいくつかあります。多くの場合、組織のDKIM署名はMail Transfer Agent(MTA)アプリケーションによって生成されます。それ以外の場合は、鍵を自分で生成する必要があります。
Linuxシステムではssh-keygenツールを使用するのが一般的ですが、WindowsではPuTTYgenが妥当な選択肢です。公開鍵と秘密鍵のペアの生成に役立つオンラインツールも複数あり、その中でも最も簡単なものの1つがDKIM Core Toolsです。
メールサーバーでのDKIM署名者の設定
DKIMのDNSエントリは要件の半分にすぎません。もう半分は、メールサーバーでDKIM署名者を設定することです。これは多くのメールシステムにとって複雑または困難な場合があります。
ただし、多くのメールプロバイダーはDKIMの設定ガイドを公開しており、顧客を支援するサービスを提供しているプロバイダーもあります。公開されているガイドの例は次のとおりです。
外部委託を希望する企業は、DKIMサービスプロバイダーやコンサルタントに依頼できます。基本的な初期設定から継続的な管理、暗号鍵のローテーションまで、さまざまなサービスが提供されています。
DKIMが機能しているかテストする方法
公開後は、MXToolboxまたはMail-tester.comなどのDKIMアナライザーを使用して、エラーを確認できます。その後、テストメールを送信してDKIM署名ファイルを検証できます。
テストメッセージが届いたら、メールヘッダーを展開します。送信者のドメインが「mailed-by」と「signed-by」の両方に表示されていれば、そのメッセージはDKIMによって正常に検証されています。
「Show Original」オプションを使用してメールヘッダーを調べ、DKIM認証の結果を確認することもできます。「PASS」とドメインアドレスが表示されていれば、すべて正常に機能しています。
DKIMのメリット
DKIMを導入する組織は、次のような大きなメリットを得られます。
悪意のあるコンテンツを検出
DKIMに合格しないメールは、受信メールサーバーに対して、受信したメールが傍受された可能性や、メールの内容にスパム、さらには悪意のあるコンテンツが含まれている可能性を示す警告となります。
なりすましを軽減
メールのフィッシング攻撃の一種であるメールスプーフィングは、正規の組織になりすまし、その組織の権威を装って悪意のあるコンテンツを被害者に届けようとします。適切に構成されたDKIMを導入すると、組織になりすますことが難しくなります。
メールサーバーがスプーフィングメールを受信すると、DKIM署名を確認し、DKIMに合格しないスプーフィングメールを拒否します。これにより、組織のブランドを悪用しようとするスパムメールをブロックし、企業の評判を守ることができます。さらに、組織の従業員、たとえばCEOになりすまそうとするフィッシング攻撃も阻止できます。
ドメインの評判を改善
組織がDKIMを設定していない場合、その組織のメールを受信するメールサーバーは、組織のドメインの真正性を確認できないため、メールにフラグを付けたり、拒否したりする可能性があります。DKIMを設定すると、組織のドメインの評判が向上し、正規のメールの到達率も改善します。メールサービス企業のPostmarkは、トラブルシューティングのプロセスを公開し、DKIM署名によってPDF文書を含むメールがSPAMフォルダーに振り分けられず、適切に配信される仕組みを具体的に示しました。
メール転送に対応
Sender Policy Framework(SPF)標準は、組織に代わってメールを送信する認証済みメールサーバーを検証できますが、転送されたメールは送信メールサーバーのIPアドレスと一致せず、SPFに失敗します。一方、DKIM暗号化アルゴリズムはメール転送後も有効であり、転送メールを検証して、コンテンツがスパムまたはスプーフィングとしてフラグ付けされるのを防ぐことができます。
DKIMのデメリット
DKIMは重要かつ有用な標準ですが、導入にあたって認識しておくべき課題もあります。
維持が難しい
組織は、変化するメールサーバー情報を反映したり、暗号鍵をローテーションしたりするために、DKIMファイルを定期的に更新する必要があります。サービスプロバイダーによってプロセスを簡略化できますが、DKIM導入の追加コストが発生します。
ドメイン所有者は、理想的には鍵を定期的に追跡してローテーションすべきですが、すべてのサービスで同じ鍵を使おうとするケースもあり、追跡が不可能になり、鍵のローテーションも難しくなります。
不完全なソリューション
DKIMはメールヘッダーの完全性のみを検証し、ユーザーに表示される「from」メールアドレスとの照合は行いません。フィッシング攻撃者が独自のDKIM暗号鍵を作成した場合、DKIMチェックが有効と判定される可能性があります。より堅牢な対策として、組織の評判と検証済みメールを保護するために、SPF、DKIM、DMARCを組み合わせて使用する必要があります。
暗号鍵の盗難
暗号鍵は盗まれる可能性があり、組織の暗号鍵を入手した攻撃者は、組織そのものであるかのようにメールに署名できます。
ROIの測定が困難
組織は評判の向上やメールの到達率改善を認識できますが、これらのメリットを投資対効果(ROI)の測定で定量化するのは困難です。さらに、悪意のあるメールコンテンツを検出する主なメリットは、一般に他の組織にもたらされるものです。受信メールサーバーやメールセキュリティツールはDKIMレコードを使用してスパムやフィッシングメールをブロックしますが、検証済みメールによるメリットの大半を享受するのは外部の組織です。DKIMの導入コストは低いものの、目に見えないROIやその他のデメリットが、導入率が13%を超えない理由となっています。
なりすましが可能
DKIMは、悪意のある攻撃者やスパマーを含め、どの組織でも導入できます。DKIMチェックではメール本文の「From」情報が常に含まれるとは限らないため、悪意のある攻撃者は独自のDKIMファイルを公開し、スプーフィングメールやスパムを認証できます。
適切なメールサーバー設定が必要
DKIMは、DKIMをチェックするよう設定されたメールサーバー、または同じ処理を実行するメールセキュリティツールでのみ機能します。サーバーはDKIMチェックを簡単に省略できるため、スパムやスプーフィングメールが拡散する可能性があります。
サーバーのオーバーヘッド
ハッシュ値の計算やDNSレコードの検索によってメール配信が遅くなり、サーバーリソースが消費されます。メール1通あたりの負荷はそれほど大きくありませんが、メール数が多いとサーバーに大きな負荷がかかる可能性があります。
DKIMに関するよくある質問
DKIM暗号化の仕組み
送信メールサーバーは、メールのどのフィールドを暗号化するかを決定します。送信者のドメインの秘密鍵は、送信するすべてのメールのデジタル署名にエンコードされます。公開鍵はDomain Name System(DNS)に保存され、暗号化されたデジタル署名付きのメールを受信するすべてのメールサーバーがダウンロードできます。DKIM署名はメールのハッシュ値を暗号化しますが、メール自体のどの要素も暗号化しません。
DKIM署名は偽造できるのか?
公開暗号鍵は利用可能ですが、DKIM署名を偽造することはできません。DKIMはPKI(公開鍵基盤)に基づいており、公開鍵と秘密鍵という1組の鍵を使用します。公開鍵はDNSレコードで公開されますが、秘密鍵はメールサービスプロバイダーのサーバーだけに保持されます。秘密の秘密鍵はメッセージへの署名に使用され、公開鍵は検証のみに使用されます。
DKIMはエンドツーエンドまたは完全なメール暗号化を提供するのか?
いいえ。DKIMはDKIM署名に暗号化されたハッシュ値を含めますが、それ以外の暗号化機能は提供しません。組織は必要に応じて他の暗号化ソリューションを導入する必要があります。
DKIMは他のメッセージ署名プロトコルと似ているのか?
Pretty Good Privacy(PGP)やSecure/Multipurpose Internet Mail Extensions(S/MIME)などのメッセージ署名プロトコルを使用すると、ユーザーはメール本文を認証できます。ただし、これらのプロトコルでは送信者の認証に対応できません。DKIMは、送信者とメールの内容およびフィールドの両方を認証します。
まとめ:メール配信を改善するためにDKIMを導入する
DKIMによるメール認証は、受信メールサーバーにメッセージの有効性への信頼を高め、メッセージが意図したとおりに配信される可能性を高めます。この標準の維持には時間がかかる場合がありますが、信頼性が向上するだけでも、ほとんどの組織にとってDKIMを導入する十分な理由になります。さらに、スプーフィングメールの削減、メール転送の改善、なりすましの軽減といったメリットが、その取り組みを正当化します。
この記事はもともとSean Michael Kernerが2018年1月12日に執筆・公開し、Chad Kimeが2023年5月24日に更新しました。





