DKIMのt=y(テストモード)とは|外す前に確認することと安全な消し方

DKIMの公開鍵レコードを見たとき、t=y という記述が入っていることがあります。診断で「セレクタ ○○ がテストモードのままです」と表示された場合も、これを指しています。
このフラグは、署名の検証を無効にするものではありません。ただし、付けたままにしておく理由もありません。この記事では、t=y が実際に何を意味するのか、外す前に確認すべきこと、そして安全な消し方を説明します。
t=y は公開鍵レコードのフラグです
t= は、DNSに公開するDKIMの鍵レコードに付けられるタグです。値はコロン区切りで複数指定できます。
v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEB...
RFC 6376 §3.6.1 は y を次のように定めています。
y This domain is testing DKIM. Verifiers MUST NOT treat messages from Signers in testing mode differently from unsigned email, even should the signature fail to verify. Verifiers MAY wish to track testing mode results to assist the Signer.
このドメインはDKIMを試験中である、という表明です。受信側は、テストモードの署名者からのメールを、署名の検証に失敗した場合であっても、署名が無いメールと異なる扱いをしてはなりません。
要するに t=y は「まだ試験中なので、失敗しても本番と同じようには扱わないでほしい」という申告です。導入時に段階的な確認をするための仕組みで、動作確認が済んだら外すことが前提になっています。
なお、DKIMの基礎仕様はRFC 6376で、これは現在もInternet Standardです。暗号アルゴリズムと鍵長はRFC 8301やRFC 8463などで更新されていますが、t= タグの意味はRFC 6376 §3.6.1のまま変わっていません。
t=y があるとDMARCが必ず失敗するわけではありません
「テストモードだからDKIM認証が効かない」と書かれている説明を見かけますが、正確ではありません。
RFC 6376で t=y について定めているのは §3.6.1 の上記の一文だけで、署名の検証結果を失敗にするとは書かれていません。鍵が正しく、署名も正しければ、検証そのものは成功します。
DMARCの側を見ると、RFC 9989 §4.4.1 は「If the cryptographic signature validates, then the DKIM Signing Domain is the DKIM-Authenticated Identifier」として、署名が有効に検証されることと、そのドメインがFromのドメインと整合していることを条件にしています。テストモードかどうかには触れていません。
t=y が定めているのは、検証に失敗したときの受信側の扱いです。失敗した署名を理由に、署名が無いメールより不利に扱ってはならない、という保護です。
そのため、t=y が付いていること自体が配送不良の原因とは限りません。ただし、受信側がテストモードをどう扱うかには幅があり、署名の成否を処理判断に反映しない実装もありえます。本番運用に入っているのであれば、外しておくほうが確実です。
まず、そのセレクタが今も使われているか確認します
t=y を見つけたとき、最初にすることはDNSの編集ではありません。そのセレクタが、実際に送っているメールで使われているかを確認してください。
DKIMのセレクタは任意の文字列を取れるため、DNSに残っている鍵が現役とは限りません。過去に試したまま消し忘れた鍵が残っているだけ、という場合があります。その鍵はどのメールにも使われていないので、外しても何も変わりません。
t=y はあまり見かける値ではありません。.jpドメイン19,065件を調べて取得できた9,937件の鍵レコードのうち、t=y が入っていたのは21件でした(2026年7月27日。再現用のスクリプトは scripts/measure-dkim-keys.mjs)。この調査はセレクタを判定できた事業者に偏っており、利用率を示すものではありませんが、少なくとも「よくある設定」ではないことは言えます。
確認方法は、実際に届いたメールのヘッダーを見ることです。
DKIM-Signatureヘッダーのd=とs=を見ます。s=が現在使われているセレクタですAuthentication-Resultsヘッダーのdkim=passとheader.d=を見ます
自分宛にテストメールを送り、受信したメールのソースを表示すれば確認できます。Gmailであれば、メールを開いて「メッセージのソースを表示」から見られます。
セレクタの調べ方はDKIMセレクタの確認方法で詳しく扱っています。
外す前に、DKIMが成功していることを確認します
t=y は、検証に失敗したときの影響を和らげるフラグです。署名が失敗したまま外すと、その保護が無くなります。順序を逆にしないでください。
- 複数の宛先(Gmail、Outlook、自社の別ドメインなど)へテストメールを送ります
- 届いたメールの
Authentication-Resultsでdkim=passを確認します header.d=がFromアドレスのドメインと揃っているかを確認します。DMARCはこの整合を要求します- すべて確認できてから
t=yを外します
dkim=fail や dkim=none が出ている場合、先に署名の設定を直してください。t=y を外すのはその後です。
t=y を安全に外す
確認が済んだら、レコードから y を取り除きます。
自分でTXTレコードを管理している場合
t=y; の部分を削除します。他のタグは残します。
変更前: v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEB...
変更後: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB...
t=y:s のように複数のフラグが指定されている場合は、y だけを外して s を残します。
変更前: v=DKIM1; k=rsa; t=y:s; p=MIGf...
変更後: v=DKIM1; k=rsa; t=s; p=MIGf...
s は別の意味を持つフラグです(次の項で説明します)。まとめて消さないでください。
CNAMEで事業者のレコードを参照している場合
DKIMの設定をCNAMEで行っているサービスがあります。この場合、公開鍵の実体は事業者側のDNSにあり、利用者側では編集できません。
その状態で t=y が付いているなら、事業者の管理画面にテストモードの切り替えがあるか確認してください。見当たらない場合は、事業者のサポートへ問い合わせることになります。自分のDNSでCNAMEをTXTに置き換えるのは、鍵の更新に追随できなくなるため避けてください。
変更したら反映を待つ
DNSのレコードを変更しても、受信側のキャッシュには古い値が残ります。TTLの時間が経過するまでは、以前の t=y が見えている可能性があります。確認方法はDNSが反映されないときの確認方法で扱っています。
t=s は外さなくてよいフラグです
t= にはもう1つ s というフラグがあります。RFC 6376 §3.6.1 の定義は次のとおりです。
s Any DKIM-Signature header fields using the "i=" tag MUST have the same domain value on the right-hand side of the "@" in the "i=" tag and the value of the "d=" tag. That is, the "i=" domain MUST NOT be a subdomain of "d=". Use of this flag is RECOMMENDED unless subdomaining is required.
署名の i= タグに書くドメインを、d= と同じドメインに制限するという意味です。サブドメインを使う必要がなければ推奨される、とされています。
テストモードとは無関係です。t=y:s から y を外すときに s まで消すと、この制限が外れます。サブドメインでの署名を意図的に使っていないのであれば、s は残しておいてください。
外したあとに確認する
t=y を外したら、次を確認します。
- DNSに反映されたか(TTLの経過を待つ)
- テストメールを送り、
Authentication-Resultsでdkim=passが維持されているか - 診断で「テストモードのままです」の表示が消えたか
診断で確認できるのはDNSに公開されている鍵までです。実際のメールで署名が成功しているかは、届いたメールのヘッダーを見て確かめてください。両方を突き合わせれば、設定が意図どおりに効いているかが分かります。