DKIMとは?電子署名の仕組みとDNSレコードの設定
要旨
DKIMとは、公開鍵と秘密鍵の電子署名でメールの送信元と改ざんの有無を確かめる認証技術です。公開するDNSレコード、推奨の鍵長、SPF・DMARCとの関係を解説します。

DKIMとは
DKIM(DomainKeys Identified Mail)とは、ドメインが送信するメールに暗号署名を付けるメール認証の標準規格です。受信サーバーは署名によって2つのことを確認できます。メールが本当にそのドメインから送られたこと、そして署名された部分が途中で改ざんされていないことです。RFC 6376で定義されており、送信サーバーが秘密鍵を厳重に保管したまま、対になる公開鍵をDNSに公開する仕組みです。
手元にメールやプロバイダーのセレクタがあるなら、DKIMレコードのチェックで公開鍵を正確に取得し、本番と同じ経路を検証できます。
DKIMは、どのサーバーが代わりに送信してよいかは示しません。それはSPFの役割です。また、チェックに失敗したときの処理も、DKIM単体では受信側に伝えません。その判断はDMARCが担います。DKIMの役割は1つだけです。転送に対してSPFより強い、持ち運べる送信元と完全性の証明を提供することです。
DKIMの仕組み
DKIMは非対称の鍵ペアを使います。送信者だけが持つ秘密鍵と、誰でもDNSから読める公開鍵です。
- 署名:メールサーバーは送信時に、選んだヘッダー(通常は
From、Subject、Date、To)と本文のハッシュを計算し、そのハッシュを秘密鍵で暗号化します。結果はDKIM-Signature:ヘッダーとして挿入されます。このヘッダーには署名ドメイン(d=)、セレクタ(s=)、署名したヘッダーの一覧(h=)も記録されます。 - 鍵の公開:ドメインの所有者は、対になる公開鍵を
<selector>._domainkey.yourdomain.comにTXTレコードとして公開します。セレクタがあるため、1つのドメインで複数の鍵を同時に運用できます。送信サービスごとに一つずつ、あるいはローテーション中の新旧の鍵といった使い方です。 - 検証:受信サーバーは署名から
d=とs=を読み取り、そのDNSの場所から公開鍵を取得して、ハッシュを計算し直します。結果が復号した署名と一致すれば、DKIMは合格です。署名がない、鍵が見つからない、本文が改ざんされている場合、DKIMは失敗します。
このレコードの値が公開鍵です。v=DKIM1タグはDKIMであることを示し、k=rsaはアルゴリズムを指定し、p=はBase64でエンコードされた鍵そのものを格納します。p=の値を削除すると、鍵はすぐに失効します。
DKIM署名で証明できること、できないこと
有効なDKIM署名が証明するのは、署名したヘッダーと本文が署名後に変更されていないこと、そして署名者がd=ドメインの秘密鍵を管理していることです。表示上のFrom:アドレスが信頼できることは証明しません。攻撃者は自分のドメインで完全に有効なDKIM署名を付けたまま、From:欄にあなたのブランドを表示したメールを送れます。この穴こそがDMARCの存在理由です。DMARCは、DKIMのd=ドメイン(またはSPFのドメイン)が、読み手が実際に目にするFrom:ドメインと一致することを求めます。
DKIMは接続ではなくメールそのものに署名するため、その結果はメールとともに運ばれます。メーリングリストや転送サービスが署名済みのヘッダーと本文をそのまま残せば、署名は合格のまま保たれます。SPFが壊れても、転送メールでDKIMによってDMARCが合格できるのはこのためです。
推奨される鍵長とアルゴリズム
- 2048ビットのRSA鍵を使う:RFC 8301は、署名者は2048ビット以上のRSA鍵を使うべき(should)であり、最低でも1024ビットを使わなければならない(must)と定めています。2048ビットの鍵なら、この指針とGmail・Yahooの一括送信者ルールを満たします。1024ビット未満の鍵は、検証側で即座に拒否されます。
- Ed25519は定義済みだが普及途上:RFC 8463で
k=ed25519の署名が追加されました。受信側やゲートウェイの対応はまだまちまちです。Ed25519を採用する場合は、それだけに頼らず、RSA鍵も併せて公開してください。 - セレクタでローテーション:セレクタはDNSのパスの一部です。新しいセレクタで新しい鍵を公開し、署名をそちらに切り替え、配送中のメールが古い鍵に依存しなくなったら削除できます。ダウンタイムはありません。
DKIMが重要な理由
- 改ざんを防ぐ:署名された内容が少しでも変われば署名は無効になり、請求書、リンク、支払い情報の改ざんから受信者を守ります。
- なりすましやフィッシングを抑える:DMARCのアライメントと組み合わせれば、自社ドメインから届いたように見える巧妙なスパムを、攻撃者が送るのは格段に難しくなります。
- DMARCの前提条件:DMARCは、SPFまたはDKIMが一致すれば合格します。DKIMは2つのうち転送に強い方なので、正しく署名されたドメインは、メールが転送されても認証を保てます。
- 到達率を高める:メールボックスプロバイダーは、一貫して署名するドメインをより信頼できるとみなします。長い目で見て、受信トレイへの到達を後押しします。
Google Workspaceで自社ドメインのメールを送信している場合は、Google WorkspaceのDKIM設定ガイドに沿って、アカウント固有の鍵の生成、DNSへの公開、認証の開始、届いたメールでの検証を進めてください。
Microsoft 365で自社ドメインのメールを送信している場合は、Office 365のDKIM設定ガイドに沿って、テナント固有のCNAMEレコードを両方コピーし、署名を有効にして、届いたメールで検証してください。MicrosoftもDKIM構成ガイドで同じ手順を説明しています。
Mimecastが最終の送信ゲートウェイなら、MimecastのDKIM設定ガイドで、DNS Authenticationの定義、生成されたTXT鍵、送信ポリシー、届いたメールでの検証の手順を確認してください。
根拠
出典と参考資料
- RFC 6376:DomainKeys Identified Mailの署名を定義しています。
- RFC 8301:DKIMの鍵長とアルゴリズムに関する現行の指針を定めています。
- Google:メール送信者のガイドライン:Gmailが送信者に求める認証要件を示しています。
- Google Workspace:DKIMを設定する:Google自身によるDKIMの設定手順です。
- Microsoft:DKIMを構成してメールに署名する:Microsoft 365のDKIM設定手順です。
- Yahoo Sender Best Practices:Yahooが送信者に求める認証要件を示しています。
関連記事
よくある質問
よくある質問
DKIMレコードは1つのドメインにいくつ?
セレクタの数だけ置けます。メールボックスプロバイダー、マーケティングプラットフォーム、チケット管理ツールなど、送信サービスごとに専用のセレクタで専用の鍵を使って署名するのが理想です。そうすれば各ストリームが独立して認証され、ほかに影響を与えずに1つだけ失効させることもできます。
DKIMでメールは暗号化される?
いいえ。DKIMは改ざんを検知できるようメールのハッシュに署名しますが、接続をTLSで別途保護しない限り、本文は平文のまま送られます。DKIMが扱うのは真正性と完全性で、機密性ではありません。
DKIMは合格なのにDMARCが失敗する理由は?
ほぼ必ずアライメントの問題です。DMARCでは、DKIMのd=ドメインが表示上のFrom:ドメインと一致する必要があります(relaxedモードでは組織ドメインが一致すれば足ります)。From:がyourdomain.comのメールをd=mailer.vendor.comで署名すると、DKIM署名自体は有効でも、ドメインが一致しないためDMARCでは不合格になります。
送信後にDKIM署名が壊れる原因は?
署名されたヘッダーや本文を変更するものすべてです。フッターを追加するメーリングリスト、リンクを書き換えるセキュリティゲートウェイ、内容を整形し直す転送サービスなどが該当します。こうした変更があると、次の中継先でDKIMが失敗します。SPFやDMARCと組み合わせると認証の経路がもう一つ確保できるのは、このためです。受信側がbody hash did not verifyと報告したら、DNSを編集する前にDKIMのbody hashエラー対処ガイドで、署名後の変更箇所を突き止めてください。
DKIMのDNS変更が反映されるまでの時間は?
DKIMのDNS変更が反映されるまでの時間は、決まった時間ではなく、レコードのTTLで決まります。古いレコードをキャッシュしたリゾルバーは、そのコピーの期限が切れるまで古い値を返します。TTLが短ければ数分です。鍵をローテーションする前にTTLを下げ、終わったら元に戻してください。

執筆者
Samuel ChenardPalisade 共同創業者・CEO
Samuel ChenardはPalisade共同創業者兼CEO。Palisadeは1ドメインから数千まで対応する、IT部門・MSP向けのエージェント型DMARC。
Samuelの記事 →

