DKIMレコード -- メール署名

DKIM(DomainKeys Identified Mail)DNS TXTレコードをメール署名用に設定する方法を解説します。セレクタ、鍵のフォーマット、ローテーション戦略を理解しましょう。

TXTSecurity

Zone File Entry

selector1._domainkey.example.com.    IN    TXT    "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."

詳細な説明

DKIMレコードとは?

DKIM(DomainKeys Identified Mail)は、送信サーバーが送信メッセージにデジタル署名できるメール認証プロトコルです。公開鍵はDNS TXTレコードとして公開され、受信サーバーが署名を検証できるようになります。

BINDゾーンファイルの構文

; DKIM公開鍵レコード
selector1._domainkey.example.com.    3600    IN    TXT    "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3QEKyU1fSma0axspqYK5iAj+54lsAg4qRRCnpKZyiGfjxBUMvYQHAYPEiv3mQ1V4f6TLmCyEtymadJB2YMlGrq4S2Asb0fJoNaGnz+Y3zGcPD20JHFIF4km2bEk26fO7JKrXUYMPzGpMGJb8CJrIFNfMadj+RHHX/vd8G6F0OwIDAQAB"

; Google Workspace DKIM(CNAME代替)
google._domainkey.example.com.    3600    IN    TXT    "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."

レコードフォーマットの理解

DKIM TXTレコードは以下のコンポーネントで構成されます:

  • v=DKIM1:バージョン識別子(必須)
  • k=rsa:鍵のタイプ -- RSAが最も一般的。Ed25519(k=ed25519)も新しい選択肢として登場
  • p=...:Base64エンコードされた公開鍵

レコードは特定のサブドメインに配置されます:selector._domainkey.yourdomain.com

セレクタとは?

セレクタは送信者が選択する任意のラベルです。同じドメインに複数のDKIM鍵を共存させることができます。よく使われるセレクタには以下があります:

  • Google Workspaceのgoogleまたはselector1
  • Microsoft 365のselector1selector2
  • カスタムメールサーバーのs1s2
  • SendGridなどのトランザクションメールサービスのem1234

受信サーバーがメールを処理する際、DKIM-Signatureヘッダーからセレクタ(s=)とドメイン(d=)を読み取り、DNSにselector._domainkey.domain.comを問い合わせて公開鍵を取得します。

鍵の生成とローテーション

DKIM鍵は、鍵の漏洩による影響を制限するために定期的(6〜12か月ごと)にローテーションすべきです:

  1. 新しいセレクタ名で新しい鍵ペアを生成
  2. 新しい公開鍵をDNSに公開
  3. メールサーバーを新しい鍵で署名するように設定
  4. 送信中のメッセージのために、古いDNSレコードを7〜14日間残す
  5. 古いDNSレコードを削除

鍵サイズの推奨

  • RSA 2048ビット:現在の標準。DNS TXTレコードには255文字の文字列制限があるため、長い鍵は単一のTXTレコード内で複数のクォート付き文字列に分割する必要があります。
  • RSA 1024ビット:最低限とされていますが、段階的に廃止されつつあります。
  • Ed25519:よりコンパクトで高速ですが、すべての受信者でまだ普遍的にサポートされていません。

長い鍵の処理

DNS TXTレコードは文字列あたり255文字に制限されています。2048ビットのRSA鍵はこれを超えるため、分割が必要です:

selector._domainkey.example.com.    IN    TXT    ("v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A"
    "MIIBCgKCAQEA1234567890abcdef...")

ほとんどのDNSプロバイダーは、完全な値を貼り付ける際にこの分割を自動的に処理します。

ユースケース

DKIMレコードを設定して、送信メールに暗号署名を行い、メールがドメインから発信され、転送中に改ざんされていないことを証明します。

試してみる — DNS Record Generator

フルツールを開く