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の
selector1とselector2 - カスタムメールサーバーの
s1、s2 - SendGridなどのトランザクションメールサービスの
em1234
受信サーバーがメールを処理する際、DKIM-Signatureヘッダーからセレクタ(s=)とドメイン(d=)を読み取り、DNSにselector._domainkey.domain.comを問い合わせて公開鍵を取得します。
鍵の生成とローテーション
DKIM鍵は、鍵の漏洩による影響を制限するために定期的(6〜12か月ごと)にローテーションすべきです:
- 新しいセレクタ名で新しい鍵ペアを生成
- 新しい公開鍵をDNSに公開
- メールサーバーを新しい鍵で署名するように設定
- 送信中のメッセージのために、古いDNSレコードを7〜14日間残す
- 古い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レコードを設定して、送信メールに暗号署名を行い、メールがドメインから発信され、転送中に改ざんされていないことを証明します。