BLOG ベアメールブログ
DKIM(DomainKeys Identified Mail)は、なりすましメール対策の一つとして、メールの信頼性を高めるうえで重要な役割を果たします。
ただし、DKIMの設定やレコードの記述に誤りがあると、正しく認証されない可能性があります。そのため、仕組みを理解し、適切に設定することが求められます。
本記事では、DKIMの設定方法やDKIMレコードの書き方、よくある失敗例について詳しく解説します。
目次
DKIMとは
DKIMは、メールに電子署名を付与し、配送途中でメールの内容が改ざんされていないかを検証する技術です。
DKIMの仕組み
DKIMでは、送信側がメールに電子署名を付与し、受信側が署名を検証することで認証が行われます。

DKIM認証の具体的な流れは、以下の通りです。
- 送信側:DKIMに使用する秘密鍵を送信メールサーバーに登録する。
- 送信側:対応する公開鍵を、DKIM署名ドメイン(d=タグで指定されるドメイン)のDNSにDKIMレコードとして登録する。
- 送信側:メール送信時に、メールのヘッダと本文からハッシュを生成し、秘密鍵で署名を行う。その結果を、DKIM-Signatureとしてメールヘッダに付与する。
- 受信側:受信したメールのヘッダと本文をもとに、ハッシュ値を再計算する。DNSから取得した公開鍵を用いて電子署名を検証し、署名時のハッシュ値と照合することで、メールが改ざんされていないことを確認する。
DKIMの設定方法
DKIMの具体的な設定方法は、利用しているメールサービスやメール配信システムによって異なりますが、基本的な流れは共通しています。ここでは、DKIMの設定方法を5つのステップに分けて解説します。
1. DKIMを設定するメールの送信環境を確認する
まず、DKIMを設定するドメインのメールが、どのような環境から送信されているかを確認します。
企業によっては、Google WorkspaceやMicrosoft 365などのメールサービスだけでなく、メール配信サービス、CRM・MAツール、ECシステム、問い合わせフォーム、自社のメールサーバーなど、複数の環境から同じドメインのメールを送信していることがあります。
DKIM署名は、実際にメールを送信するサービスやシステム側で付与されます。そのため、複数の送信環境を利用している場合は、それぞれの環境に応じてDKIMを設定する必要があります。
2. DKIMの鍵ペアとセレクタを用意する
利用しているメールサービスやシステムで、DKIM署名に使用する公開鍵と秘密鍵のペアを用意します。メールサービスを利用している場合は、サービス側で鍵が生成・管理され、セレクタやDNSに登録する値が管理画面に表示されることが一般的です。セレクタとは、DKIMで使用する公開鍵をDNS上で識別するための名前(識別子)のことです。
自社でメールサーバーを運用している場合は、OpenDKIMなどのDKIM署名ソフトウェアが提供するツールを使って鍵ペアを生成し、セレクタを設定します。秘密鍵は、送信側で安全に保管します。
DKIMセレクタの役割や命名規則については、以下の記事で詳しく解説しています。
3. DNSにDKIMレコードを登録する
次に、DKIM認証に必要な情報をDNSにDKIMレコードとして登録します。
DKIMレコードは、受信側のメールサーバーがDKIM署名を検証する際に参照する情報です。ホスト名やレコードタイプ、レコードの値は利用しているメールサービスやシステムによって異なるため、管理画面や公式ドキュメントで指定された内容に従って設定します。
DKIMレコードの具体的な書き方については、後述します。
以下の記事では、お名前.comやAmazon Route53でDKIMレコードを設定する具体的な手順を解説しています。
4. 送信側でDKIM署名を有効にする
DNSにDKIMレコードを登録しただけでは、送信メールにDKIM署名は付与されません。DKIM認証を行うには、メールサービスやメール送信システム側でDKIM署名を有効にする必要があります。
Google WorkspaceやMicrosoft 365、メール配信サービスなどを利用している場合は、各サービスの管理画面でDKIM署名を有効化します。自社でメールサーバーを運用している場合は、OpenDKIMなどのソフトウェアを導入し、PostfixなどのMTAと連携させてDKIM署名を付与する設定が必要です。
以下の記事では、OpenDKIMとPostfixを使った具体的な設定方法を解説しています。
5. DKIMが正しく設定されているか確認する
DNSへのDKIMレコード登録と、送信側でのDKIM署名の有効化が完了したら、DKIMが正しく設定されているかを確認しましょう。
確認すべきポイントは、主に「DNS上でDKIMレコードを参照できるか」と「実際に送信したメールでDKIM認証に成功しているか」の2点です。DNS上でDKIMレコードを参照できても、送信メールにDKIM署名が付与されていない場合や、鍵の設定に誤りがある場合は、認証に失敗する可能性があります。
DKIMの設定や認証結果の確認方法については、以下の記事で詳しく解説しています。
DKIMレコードの書き方
DKIMレコードは、DKIM署名の検証に使用する公開鍵などの情報をDNS上に公開するためのレコードです。受信側のメールサーバーは、DKIM-Signatureヘッダに記載されたドメインとセレクタをもとにDKIMレコードを参照し、署名を検証します。
本章では、DKIMレコードの書き方を解説します。
DKIMレコードの記述例
DKIMレコードは、TXTレコードとしてDNSに設定します。例えば、セレクタが「default」、ドメインが「example.com」の場合、次のように設定します。
ホスト名 レコードタイプ TTL レコードの値 default._domainkey.example.com. TXT 3600 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr6Ax…
それぞれの構成要素について解説します。
ホスト名
DKIMレコードを設定するホスト名は、以下の形式をとります。
[セレクタ名]._domainkey.[ドメイン名]
セレクタ名には、DKIM-Signatureヘッダのs=タグで指定される値を設定します。異なるセレクタを使用することで、1つのドメインに対して複数の公開鍵を運用できます。
レコードタイプ
DKIMレコードは、一般的にTXTレコードとして設定します。ただし、メールサービスによっては、CNAMEレコードの登録を求められる場合もあります。指定されたレコードタイプに従って設定しましょう。
TTL
TTLは「Time to Live」の略で、DNSレコードの情報をキャッシュに保持する時間を秒単位で指定します。一般的には、3600秒(1時間)程度が多くなっています。
レコードの値
レコードの値には、公開鍵情報などDKIM認証に必要な情報を設定します。DKIMレコードの値は、複数のタグをセミコロンで区切って記述します。
DKIMレコードで使用する主なタグ
DKIMレコードで使用するタグの内容は以下の通りです。
タグ 指定する値 概要 v
※推奨DKIM1 DKIMのバージョンを示す。RFCにおいては必須ではないとされているが、レコードの最初に記載することが推奨されている。 k
※推奨rsa DKIMで使用する公開鍵の形式を示す。一般的にはRSA形式が広く利用されるため、多くの場合「k=rsa」と記述する。省略時はRSAが適用される。 p
※必須公開鍵データ 公開鍵のデータを保持するタグのため、必須。鍵データはBase64でエンコードする。 h sha256 DKIMで使用するハッシュの方式を限定するためのオプションタグ。省略時は全てのハッシュ方式を許容する。DKIMではSHA1とSHA256が定義されているが、現在の運用ではSHA256の利用が前提となっている。 t y / s 運用モードを指定するためのフラグを示すオプションタグ。指定できるフラグには「y」と「s」があり、省略時は何も適用されない。 「y」はテストモードであることを示し、受信側サーバーは、署名の検証に失敗したメールについても、未署名メールと異なる扱いをしてはならない。「s」は厳格一致モードを示し、i=タグで指定される識別子のドメイン部分が、d=タグで指定されるドメインと一致する必要がある。 また、コロン(:)で区切ることで双方を指定することもできる。 g * /指定したいローカルパート 電子署名の対象とするi=タグで指定される識別子のローカルパートを指定するためのオプションタグ。この鍵を利用できる送信者のアドレスを限定したい場合のみ利用する。全てを対象とするワイルドカード文字「*」を指定でき、省略時は「*」が適用される。 n 任意のテキスト 管理者向けの注釈を記載するためのオプションタグ。署名検証や動作には影響を与えないが、DNSレコードのサイズの増大を防ぐためにも不要な情報の記載は避けるべき。省略時には何も設定されない。 s * / email 当該の公開鍵が有効なサービスを指定するオプションタグ。現時点で指定できるサービスは「*」(全てのサービス)と「email」(電子メール)の2つがある。省略時は「*」が適用される。メール以外の用途でも活用できる可能性を残すために設計されているが、他の用途は事実上未定義であり普及もしていない。
DKIMレコードの失敗例
最後に、DKIMレコードの設定時によくある失敗例を解説します。DKIMレコードのホスト名や値に誤りがあると、受信側のメールサーバーが公開鍵を正しく取得できず、認証に失敗する原因となります。
公開先FQDNを誤っている
DKIMレコードを設定するFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)を誤っているケースです。例えば次のような例があります。
例1:ドメイン直下にDKIMレコードを設定している
ドメイン名に直接DKIMレコードを設定しているケースです。DKIMレコードは、「セレクタ名._domainkey.ドメイン名」の形式で指定したホスト名に設定する必要があります。
失敗例
example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”;
修正例
default._domainkey.example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”;
例2:セレクタを指定していない
セレクタを指定せずにDKIMレコードを設定しているケースです。DKIM-Signatureヘッダのs=タグで指定されたセレクタを含めて設定しなければなりません。
失敗例
_domainkey.example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”
修正例
default._domainkey.example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”
公開鍵の形式に誤りがある
p=タグに指定する公開鍵に、意図しない不要なスペースや改行などが含まれ、正しくBase64エンコードされていない場合は、受信側で正しく検証できず、認証が失敗します。
失敗例
default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjA NBkg…”
default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjANBkg…”
タグ間のセミコロンが欠けている
タグ間のセミコロンが欠けていると、レコードが正しく認識されず、認証に失敗する原因となります。
失敗例
v=DKIM1; k=rsa p=MIIBIjANBgkqh…;
修正例
v=DKIM1; k=rsa; p=MIIBIjANBgkqh…;
vタグを先頭に記載していない
v=DKIM1を記載する場合は、DKIMレコードの先頭に置く必要があります。v=タグ自体は必須ではありませんが、記載する場合は順番に注意しましょう。
失敗例
default._domainkey.example.com. IN TXT “k=rsa; v=DKIM1; p=MIIBIjANBgkqhki…”
修正例
default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjANBgkqhki…”
DNSサービスが公開鍵の長さに対応していない
一部のDNSサービスの仕様では、TXTレコードの長さが制限されているため2048ビットの公開鍵を登録できない場合があります。この場合、DKIMレコードの値を複数の文字列に分割して引用符(” “)で囲むことで登録できることがあります。
- DKIMレコードの値(テキスト)を、255文字以下になるように分割する
- 分割したテキストをそれぞれ引用符(” “)で囲む
- DNSのTXTレコードの値フィールドに順番に入力する
ホスト名
レコードタイプ
レコードの値
default._domainkey.example.com.
TXT
“v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFA“ “AOCAQ8AMIIBCgKCAQEAr6Ax…“
ただし、この方法でも登録ができないDNSサービスもあります。管理画面の指示に従っても登録できない場合は、DNSサービスのサポート窓口へ問い合わせるか、他のDNSサービスの利用を検討してください。
まとめ
DKIMは、なりすまし対策やメールの信頼性向上において重要な仕組みの一つです。ただし、DKIMを機能させるには、DKIMレコードを正しく記述し、設定を漏れなく行う必要があります。今回紹介した設定手順やDKIMレコードの書き方、よくある失敗例を参考に、自社の送信環境に合わせて適切に設定しましょう。
また、ベアメール メールリレーサービスのSMTP DKIMオプションを利用すると、自社システムにDKIM署名の仕組みを導入しなくても、ベアメール上でDKIM対応を行うことができます。DKIMの設定や運用に不安がある場合は、ぜひ利用を検討してみてください。
