DKIM (DomainKeys Identified Mail) とは何か?
DKIM (DomainKeys Identified Mail) はメール認証方法で、送信サーバーが送信メッセージに暗号署名を追加することを可能にします。受信サーバーはDNS内に公開されている公開鍵を使用してこの署名を検証でき、メッセージがドメインから来たことを確認し、変更されていないこと。
DKIM の動作方式
1. 鍵生成: ドメイン所有者が公開/秘密鍵ペアを生成
2. DNS公開: 公開鍵をTXTレコードとして公開
3. メール署名: 送信メールが秘密鍵で署名
4. 署名検証: 受信サーバーが公開鍵を取得して署名を確認
署名プロセス
メールが送信される場合:
1. メールサーバーがメールヘッダーおよび本文のハッシュを計算
2. ハッシュが秘密鍵 (署名を作成)で暗号化
3. 署名がDKIM-Signature ヘッダーとして追加
4. メールが送信
検証プロセス
メール受信時:
1. サーバーがDKIM-Signature ヘッダーを抽出
2. セレクターおよびドメインを検索 (s=selector; d=domain.com)
3. DNS selector._domainkey.domain.com TXT レコードをクエリ
4. 公開鍵を使用して署名を復号
5. メッセージ独自のハッシュを計算
6. 比較: 一致 = pass、不一致 = fail
DKIMレコード形式
DKIM レコードは特定のサブドメインのTXTレコードです:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
レコードコンポーネント
| タグ | 説明 | 例 |
|---|---|---|
| v | バージョン | v=DKIM1 |
| k | キータイプ | k=rsa |
| p | 公開鍵 (base64) | p=MIGfMA0GCSqG... |
| t | フラグ (オプション) | t=y (テストモード) |
| h | ハッシュアルゴリズム | h=sha256 |
セレクター
セレクターはドメイン当たり複数のDKIMキーを許可します:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
各メールサービスは独自のセレクターおよびキーを提供します。
DKIM署名ヘッダー
DKIM署名は以下のようになります:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/relaxed; q=dns/txt;
h=from:to:subject:date:message-id;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=AuUoFEfDxTDkHlLXSZEpZj79...
主要なフィールド:
- d=: 署名ドメイン
- s=: セレクター (DNSレコード検索向けに使用)
- h=: 署名に含まれるヘッダー
- b=: 実際の署名
- bh=: 本文ハッシュ
DKIMセットアップ
Google Workspace向け
1. 管理コンソール → アプリ → Gmail → メール認証に移動
2. DKIMキーを生成 (2048ビット推奨)
3. Googleが提供するTXTレコードを追加
4. DKIM署名をアクティベート
サードパーティサービス向け
ほとんどのメールサービス (SendGrid、Mailchimp など) は以下を提供します:
1. CNAMEレコード (彼らが管理するキー向け)
2. または 公開鍵を持つTXTレコード
例 (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
DKIMの検証
テストメール送信 ヘッダーを表示するサービス (Gmailは認証結果を表示). コマンドライン:dig google._domainkey.example.com TXT
DomScanを使用:
curl "https://domscan.net/v1/health?domain=example.com"
# 一般的なセレクターに基づいてDKIMステータスを報告
DKIMベストプラクティス
2048ビットキーを使用
古い1024ビットキーはますます脆弱です。ほとんどのプロバイダーは現在、デフォルトで2048ビットです。
キーを定期的にローテーション
年1回DKIMキーをローテーション、または セキュリティインシデント後。新しいセレクターでキーを公開してからスイッチ前。
重要なヘッダーに署名
From、To、Subject、Date、およびMessage-ID が署名に含まれることを確認します。
署名されたメッセージを変更しないでください
メーリングリストまたは転送サービスがコンテンツを変更するとDKIM を破壊します。転送されたメール向けにARC (Authenticated Received Chain)を使用します。
DKIMの制限
DKIM単独ではスプーフィング防止しません。メッセージが変更されなかったことのみを証明します。ドメインは有効なDKIMを持ちながら、攻撃者が署名なしのスプーフィングされたメールを送信する可能性があります。DMARCはこれに対処します。