DKIMとは
何ですか?
DKIM(DomainKeys Identified Mail)は、送信メッセージにデジタル署名を付与する暗号ベースのメール認証プロトコルで、受信側がメールが名乗るドメインから確かに送られており、転送中に改ざんされていないことを検証できるようにします。
3ステップの暗号による検証
DKIMは公開鍵暗号を使って、メールメッセージが名乗るドメインから送られ、送信後に改変されていないことを証明します。
送信者が署名する
メールサーバーがメールを送信する際、選択したヘッダーとメッセージ本文のハッシュを作成し、そのハッシュを秘密鍵で暗号化して、結果をDKIM-Signatureヘッダーとして付与します。
メッセージが移動する
署名されたメールはインターネットを移動します。DKIM署名はメッセージヘッダーの一部であるため、任意の数の中間サーバーや転送サーバーを経由してもメールとともに移動します。
受信側が検証する
受信サーバーはDKIM-Signatureヘッダーを読み取り、selector._domainkey.yourdomain.comのDNSから公開鍵を取得し、ハッシュを復号し、再計算して比較します。一致すればDKIMは合格です。
DKIMレコードは
DNSでどう見えるか
DKIMレコードはselector._domainkey.yourdomain.comに公開されるDNS TXTレコードです。送信メッセージに付与されたDKIM署名を、受信側が検証するために使う公開鍵が含まれています。
- セレクタはメールプロバイダーによって選ばれます(例:google、selector1)
- 公開鍵はBase64エンコードされ、1024ビットまたは2048ビットになります
- NISTはセキュリティのため最低でも2048ビットのRSA鍵を推奨しています
- Ed25519鍵はより小さく高速ですが、まだ普遍的にはサポートされていません
selector1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."
v=DKIM1 k=rsa p=MIGf... セレクタはどの鍵を使うかをどう識別するか
DKIMセレクタは、DKIM-Signatureヘッダー内の文字列(s=タグ)で、公開鍵を含むDNSレコードがどれかを受信側に伝えます。各メールサービスは独自のセレクタを使うため、ドメインは複数のDKIM鍵を同時にアクティブにできます。
google google._domainkey.example.com selector1, selector2 selector1._domainkey.example.com s1, s2 s1._domainkey.example.com k1 k1._domainkey.example.com カスタム(CNAME) xxxxxxx._domainkey.example.com 20230601xxxxx dkim.postmarkapp.com へのCNAME DKIM vs SPF vs DMARC
3つのプロトコルは連携して、多層的なメール認証を提供します。SPFは送信サーバーを許可し、DMARCはポリシーによってそれらを結び付けます。それぞれが異なる攻撃の手口から保護します。
よくあるDKIMの問題とその解決方法
DKIMの失敗は、通常、鍵の管理、DNSの設定、または中間サーバーによるメッセージの変更に行き着きます。
署名の不一致
署名に使われた秘密鍵がDNSの公開鍵と一致しません。通常、鍵ローテーションの不完全さや間違った鍵の公開が原因です。DKIMルックアップツールで確認してください。
鍵ローテーションの隙間
その鍵で署名されたすべてのメッセージが配信・検証される前に、古い鍵をDNSから削除してしまうケースです。必ず新しい鍵を先に公開し、少なくとも48時間待ってから古い鍵を削除してください。
転送が署名を壊す
ヘッダーや本文の内容を変更するメーリングリストや転送サーバーは、DKIM署名を無効にします。ARC(Authenticated Received Chain)が役立ちますが、その普及はまだ拡大途上です。
DNSレコードが長すぎる
一部のDNSプロバイダーは長いTXTレコードを誤って分割します。DKIMの公開鍵、特に2048ビットRSAは255文字を超えることがあり、複数の文字列にわたって正しく連結する必要があります。
DKIMレコードの欠落
DNS TXTレコードが一度も公開されていない、誤って削除された、あるいは間違ったセレクタの場所にあります。selector._domainkey.yourdomain.comにレコードが存在するか確認してください。
署名の期限切れ
DKIM-Signatureヘッダーのx=タグは有効期限のタイムスタンプを設定します。このタイムスタンプ以降にメッセージが検証されると、DKIMは失敗します。配信の遅延やキュー内のメッセージでよく起こります。
DKIMに関するよくあるご質問
DKIMとは何ですか?
DKIM(DomainKeys Identified Mail)は、RFC 6376で定義された暗号ベースのメール認証プロトコルで、送信メールにデジタル署名を付与します。受信側メールサーバーはこの署名を使って2つのことを検証します。メールが名乗っているドメインから確かに送られていること、そしてメッセージの内容が転送中に改ざんされていないことです。送信サーバーのIPをチェックするSPFと異なり、DKIMは実際のメッセージ内容に署名するため、転送されたメールに対して最も信頼性の高い認証方法となります。
DKIMはどのように機能しますか?
DKIMは3つのステップで機能します。第一に、送信側メールサーバーが選択したヘッダーとメッセージ本文のハッシュを作成し、そのハッシュをサーバーに保存された秘密鍵で暗号化します。暗号化されたハッシュは、メールに付与されるDKIM-Signatureヘッダーになります。第二に、ドメイン所有者が対応する公開鍵をselector._domainkey.yourdomain.comのDNS TXTレコードとして公開します。第三に、メールが届くと、受信サーバーはDNSから公開鍵を取得し、ハッシュを復号し、受信したメッセージからハッシュを再計算して比較します。一致すればDKIMは合格です。
DKIMセレクタとは何ですか?
DKIMセレクタは、DKIM署名を検証する際にどの公開鍵を使うかを識別する文字列です。DKIM-Signatureヘッダーのs=タグとして、またDNSレコードの場所としてselector._domainkey.yourdomain.comに現れます。セレクタにより、ドメインは複数のDKIM鍵を同時にアクティブにでき、これは鍵のローテーションや複数のメールサービスを使うドメインにとって不可欠です。一般的なセレクタには、Google Workspaceのgoogle、Microsoft 365のselector1とselector2、SendGridのs1などがあります。
DKIMとSPFの違いは何ですか?
SPF(Sender Policy Framework)は、送信サーバーのIPアドレスがドメインのDNSレコードで許可されていることを検証します。可視のFromヘッダーではなく、エンベロープ送信者(Return-Path)をチェックします。DKIMは、暗号署名を付与することでメッセージの内容が転送中に改ざんされていないことを検証します。重要な違いは、SPFはメールが転送されると転送サーバーのIPが元のSPFレコードにないため失敗しますが、DKIM署名はメッセージ自体に付与されるため転送されても維持される点です。DMARCは、SPFまたはDKIMのいずれかが合格しFromヘッダーのドメインと整合することを要求して、両者を結び付けます。
なぜDKIMは失敗するのですか?
DKIMはいくつかの理由で失敗します。DKIM-Signatureヘッダーまたは署名されたヘッダーが転送中に変更された(フッターを追加したり件名を変更したりするメーリングリストでよくあります)、DNSの公開鍵が署名に使われた秘密鍵と一致しない(鍵ローテーションの不完全さが原因のことが多い)、DNS TXTレコードが欠落または到達不能、署名が期限切れ(署名内のx=タグが有効期限のタイムスタンプを指定します)、あるいは中間サーバーによってメッセージ本文が改変された、などです。MailmanやGoogle Groupsのようなメーリングリストソフトウェアによる内容の変更が、DKIM失敗の最も一般的な原因です。
DKIMセレクタはどうやって見つけますか?
あなたのドメインから送られた任意のメールのDKIM-Signatureヘッダーを調べることで、DKIMセレクタを見つけられます。メールヘッダーを開き(Gmailでは三点メニューをクリックして「メッセージのソースを表示」を選択)、DKIM-Signatureヘッダー内のs=タグを探してください。s=の値があなたのセレクタです。あるいは、DMARC ReportのDKIM Lookupツール(dmarcreport.com/tools/dkim-lookup/)を使って、あなたのドメインに公開されているすべてのセレクタを発見することもできます。
DKIM鍵はどのくらいの頻度でローテーションすべきですか?
ベストプラクティスは、RSA鍵では6〜12か月ごと、Ed25519鍵では年1回のローテーションです。NISTは最低でも2048ビットのRSA鍵を推奨しています。鍵のローテーションでは、新しい鍵ペアを生成し、新しい公開鍵を新しいセレクタで公開し、メールサーバーが新しい鍵で署名するよう設定し、猶予期間の後にDNSから古い公開鍵を削除します。セレクタにより、移行期間中は新旧の鍵が共存できるため、このプロセスはシームレスに行えます。
あなたのDKIMセレクタを発見しましょう
無料のDKIM Lookupツールを使って、あなたのドメインに公開されているすべてのDKIM鍵を見つけ、正しく設定されているかを検証しましょう。
DKIMレコードをチェックセキュリティチームが語るDKIM監視
Rated 4.8/5 on G2 · 469 verified reviews
Verified User in Information Technology and Services
"Best security tool for your own domains"
The weekly reports help me a lot to analyze quickly the emails sent from my domains and that gives me peace of mind.
Ryan C.
Director
"Control Centre for Email Security"
I like that we can see and check all reports on just 1 platform. We manage multiple domains, and monitoring them all in one place is essential.
eddy g.
Director
"A great solution to a common email problem."
I have been using them for the last month after my Google business email started giving DMARC errors. I didn't even know what it meant at that time. After a little googling I found that people can spoof it as well. So far so good — the best thing is it protects every email.