DKIM署名の仕組み
DKIM(DomainKeys Identified Mail)は、送信するすべてのメッセージに暗号署名を付与します。メールサーバーが選択したヘッダーと本文を秘密鍵で署名し、受信側は selector._domainkey.yourdomain.com のDNSから対応する公開鍵を取得して署名を検証します。有効な署名は、メッセージが転送中に改変されていないこと、そして署名した者があなたのDNSを管理していることを証明します。
DNSレコードには、バージョン、鍵タイプ、base64の公開鍵という3つのタグが含まれます。
io1._domainkey.yourdomain.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."自分で鍵を生成する必要があるのは誰か
ホスト型のメールボックスプロバイダーは、DKIM鍵の生成と管理を代行します。Google Workspace では「アプリ」→「Gmail」→「メールの認証」で有効化し、Microsoft 365 では Defender の「メール認証」→「DKIM」で有効化します。このジェネレーターが必要なのは、署名側をご自身で管理している場合だけです。
- Postfix と OpenDKIM や rspamd、Exim、Haraka などによる自前のSMTP。
- 自分で用意した秘密鍵を受け付ける、Amazon SES の Bring Your Own DKIM。
- CNAMEではなく独自鍵のアップロードに対応するトランザクションメールプロバイダー。
- OpenSSLを入れずに使い捨ての鍵が欲しい、テストや検証環境。
2048ビット鍵と255文字での分割
Gmail、Yahoo、Microsoftはいずれも2048ビットの鍵を推奨しており、1024ビットの鍵は弱いと見なされます。トレードオフは長さです。2048ビットの公開鍵はTXTの値が400文字を超えますが、DNSのTXT文字列1つは255文字までに制限されています。ほとんどのDNSホストは値を自動的に複数の引用符付き文字列に分割します。拒否される場合は、ツールが表示する分割形式を使ってください。リゾルバーは照会時にそれらを連結します。
古いDNS管理画面の中には、1024ビットの鍵しか収まらない厳しい上限を持つものもあります。鍵を弱くするより、現代的なプロバイダーへDNSを移すほうが良い解決策です。
秘密鍵のインストールと、その後のローテーション
PEMファイルを送信サーバーに保存し、権限をメールデーモンのみに制限したうえで、DNSで使ったのと同じセレクターとドメインで署名ソフトウェアから参照させてください。Gmailのアドレスにテスト送信し、ヘッダーで dkim=pass と、d= の値が自分のドメインと一致していることを確認します。そのうえでDKIMチェッカーでレコードを確認してください。
鍵は定期的にローテーションしましょう。新しいセレクターで新しい鍵ペアを生成して公開し、サーバーを切り替え、そのあとではじめて古いレコードを削除します。サーバーを管理したくないコールドメール運用者は、DKIM、SPF、DMARCが設定済みのメールボックスをInboxOneに払い出させることもできます。

