DKIMセレクタ:複数鍵の運用と安全な鍵ローテーション
要旨
DKIMセレクタを複数同時に運用し、認証を壊さずに署名鍵をローテーションする方法です。DNSの構成、切り替えの順序、避けるべき失敗を解説します。

DKIMセレクタとは、受信側のメールサーバーが署名を検証するときに、どの公開鍵を使うかを示す小さなラベルです。DKIMでは、署名鍵を同時に複数公開できます(送信サービスごとに1つ、ローテーション中は新旧の鍵)。それらを取り違えないようにするのがセレクタです。設定を誤ると正しい署名でも検証に失敗し、正しく設定すればすべての送信経路が問題なく認証されます。本記事では運用面を扱います。複数のセレクタを並行して運用する方法と、署名のないメールが出る空白期間を作らずに鍵をローテーションする方法です。
セレクタの役割
DKIM署名付きのメールにはすべてDKIM-Signature:ヘッダーがあり、そのうち2つのタグが参照先を決めます。d=はドメインを、s=はセレクタを示します。受信側はこの2つを組み合わせて、1つのDNSクエリを作ります。
<selector>._domainkey.<yourdomain.com>たとえばd=yourdomain.com; s=mail2026で署名されたメールなら、受信側はmail2026._domainkey.yourdomain.comを参照します。このDNSレコードに公開鍵が入っています。対になる秘密鍵は送信インフラの外に出ることはなく、送信時に署名を計算するために使われます。公開している鍵がいくつあっても、受信側を正しい公開鍵へ導く。それがセレクタの役割のすべてです。
参照名にセレクタが含まれるため、1つのドメインの下に複数の鍵を衝突なく公開できます。google._domainkey.yourdomain.com、s1._domainkey.yourdomain.com、selector2._domainkey.yourdomain.comはすべて同時に有効にでき、それぞれが別のサービス用の別の鍵を持ちます。各メールは、どの鍵で署名したかを正確に示します。
署名と検証でのセレクタの働き
セレクタは、署名鍵と、受信サーバーがDNSから取得する公開鍵を結び付けます。
送信側では、メールサーバーが選択したヘッダーと本文のハッシュを計算し、そのハッシュを秘密鍵で暗号化します。結果はd=(ドメイン)とs=(使った鍵のセレクタ)とともにDKIM-Signature:ヘッダーに書き込まれます。
受信側では、サーバーがメールヘッダーからs=とd=を読み取り、<selector>._domainkey.<domain>のクエリを組み立てて公開鍵を取得し、署名を検証します。ハッシュが一致すれば、メールは転送中に改ざんされておらず、ドメインが公開した鍵による署名を確かに持っています。セレクタが存在しないレコードや誤った鍵を指していると、不正が何もなくても検証は失敗します。
検証は、DMARCが上乗せするアライメントとは別物です。アライメントは、d=のドメインが表示上のFrom:ドメインと一致するかを確認します。署名の検証が完全に成功しても、アライメントには失敗することがあります。よくある紛らわしい失敗パターンです。詳しくはDKIM署名がアライメントに失敗する理由をご覧ください。
DKIMセレクタの確認方法
セレクタは推測せず、実際のメールから読み取ります。
- 対象のサービスから、自分で管理している受信トレイ宛てにメールを送ります(GmailでもOutlookでも可)。
- メールのヘッダー全体を開きます(GmailとOutlookのどちらも「メッセージのソースを表示」)。
DKIM-Signature:ヘッダーを探し、s=の値を読みます。これがセレクタです。d=の値は署名ドメインです。
複数のセレクタを運用する理由
複数のセレクタを同時に有効にする理由は、日常的には2つあります。
鍵のローテーション:署名鍵は定期的に交換すべきです。そうすれば、漏えいしたり総当たりで破られたりした秘密鍵が使える期間を限れます。ローテーションが安全なのは、古い鍵を廃止する前に新しい鍵を有効にできる場合だけです。この重なりを可能にするのが、別々のセレクタです。
複数の送信サービス:トランザクションメール、マーケティング基盤、ヘルプデスクは、それぞれ独自の鍵で署名します。サービスごとに専用のセレクタを割り当てれば干渉は起きず、1つのサービスの鍵を廃止しても他には影響しません。複数を同時に管理するには、それなりの作法があります。複数のDKIMレコードを管理する方法をご覧ください。
セレクタでDKIM鍵をローテーション
鍵を定期的にローテーションすれば、秘密鍵が漏えいしたときの被害を抑えられます。
ローテーションでは新しい鍵に新しいセレクタを使い、2つの衝突を防ぎます。
- 新しい鍵ペアを生成します(一般的な基準は2048ビットのRSAです)。
- 新しい公開鍵を公開します。新しいセレクタ(例:
2026a._domainkey.yourdomain.com)の下に、DNSのTXTレコードとして登録します(プロバイダーが鍵をホストする場合はCNAME)。 - 署名を切り替えます。メールサーバーで新しい秘密鍵とセレクタを使います。
- 古いセレクタは猶予期間のあいだ残します。配送中のメールは古い鍵で署名されており、引き続き検証できる必要があります。
- 古い鍵を廃止します。使うメールがなくなったら廃止し、定期的に繰り返します。
セレクタとDKIMレコードの違い
両者は関連していますが、同じものではありません。セレクタは鍵の場所を示す名前(s=タグ)です。DKIMレコードは<selector>._domainkey.<domain>にあるDNSエントリで、公開鍵そのものを保持します。1つのセレクタは1つのレコードに対応します。多くのメール配信サービスはこのレコードをCNAMEとして公開し、サービス側が代わりに生成・ローテーションする鍵を指すようにしています。そのためCNAMEを一度追加すれば、鍵そのものに触れる必要はありません。TXTでもCNAMEでも、受信側の作業は同じです。メールのセレクタでレコードを探し、鍵を読み取り、検証します。
SPFやDMARCと合わせて初めてDKIMを設定するなら、DMARC・DKIM・SPFの概要で3つの関係を確認できます。セキュリティスコアなら、すべてを一度にチェックできます。
関連記事
DKIMの鍵、セレクタ、アライメントが、すべての送信サービスで本当に機能しているか知りたいですか?セキュリティスコアをチェックすれば、現状を無料で確認できます。よくある質問
よくある質問
同じドメインに複数のDKIMセレクタを設定できますか?
はい。それがセレクタの目的です。鍵の数だけ、それぞれ独自の<selector>._domainkey名で公開できます。各メールは署名に使った1つのセレクタを示すため、衝突は起きません。多くのドメインは複数を運用しています。送信サービスごとに一つずつ、さらにローテーション中は一時的に新旧が重なります。
2つのサービスが同じセレクタ名を使うとどうなりますか?
衝突します。たとえば2つのプロバイダーがどちらもs1を使おうとすると、s1._domainkey.yourdomain.comに置ける公開鍵は1つだけなので、もう一方のサービスのメールは検証に失敗します。サービスごとに別のセレクタを割り当ててください。多くのプロバイダーは、まさにこれを避けるために独自の名前(googleやプロバイダー固有の接頭辞など)を使っています。
DKIM鍵のローテーション頻度は?
ほとんどの送信者は、半年から一年ごとにDKIM鍵をローテーションしてください。秘密鍵が漏えいした疑いがあれば、すぐに交換します。セキュリティ上の効果は、1つの鍵が攻撃者にとって使える期間を限ることにあります。サイクルごとに新しいセレクタを使えば、切り替えは安全です。ローテーションを自動化すれば、つい後回しにすることもなくなります。
DKIMセレクタを変更すると既存のメールに影響しますか?
期間を重ねれば影響しません。新しいセレクタの鍵を公開して署名を切り替え、古い鍵で署名された配送中のメールが届いて検証されるまで、古いセレクタをDNSに残します。廃止するのはその後です。正規のメールがバウンスするローテーションの多くは、古いレコードを早く削除しすぎたことが原因です。
DKIMはpassでもDMARCが失敗する理由は?
DKIMの検証が証明するのは、署名が有効であることだけです。DMARCはさらに、d=のドメインがFrom:ドメインと一致することを求めます。サードパーティのプラットフォームが自社のドメインで署名すると、検証は通っても一致しません。解決策は、自社ドメインのセレクタで署名することです。DKIM署名がアライメントに失敗する理由とDKIMが失敗するよくある原因をご覧ください。

執筆者
Ian BussieresPalisade 共同創業者・CTO
Ian BussieresはPalisade共同創業者兼CTO。PalisadeはIT部門・MSP向けのエージェント型DMARC。
Ianの記事 →