DKIMとは
DKIM(DomainKeys Identified Mail)
DKIMは、電子メールの送信者を認証するための技術。メールに電子署名を付与し、受信者がその署名を検証することで、送信者が正当であることを確認する。これにより、なりすましメールやフィッシング攻撃を防ぐことができる。
〇主な特徴
送信者の認証: メールの送信者が正当であることを確認できる
改ざん検出: メールが送信後に改ざんされていないかを検証できる。
スパム対策: 正当なメールとスパムメールを区別しやすくなる。
たとえば・・・
郵便に例えると、送信者が手紙に自分のサインをして、受信者がそのサインを確認することで、手紙が本当にその人から送られてきたことを確認するようなもの。
もしサインが偽物だったり、手紙の内容が書き換えられていたら、受信者はそれを見破ることができる。
〇使用例
企業のメールシステム: 企業が顧客に送るメールの信頼性を高めるために使用する。
メールマーケティング: メールがスパムフォルダに入らないようにするために使用される。
個人のメールアカウント: 個人がなりすましメールを防ぐために使用する。
DKIMの仕組み
①送信ドメインの管理者は、秘密鍵と公開鍵のペアを生成する。秘密鍵はメールサーバーに登録する。公開鍵はDNSサーバーに登録する。
②メールを送信する際、送信サーバーはメールのヘッダーと本文の一部に対してハッシュ値を計算し、そのハッシュ値を秘密鍵で署名する。この署名がメールのヘッダーに追加される。(DKIM-Signatureが付与される)
③送信ドメインのDNSに、公開鍵を含むTXTレコードが追加されます。これにより、受信サーバーは公開鍵を取得できるようになる。
④受信サーバーは、メールのヘッダーに含まれるDKIM署名を確認する。次に、送信ドメインのDNSから公開鍵を取得し、その公開鍵を使って署名を検証する。
具体的には、受信サーバーはメールのヘッダーと本文の一部からハッシュ値を再計算し、そのハッシュ値と署名から得られたハッシュ値を比較する。これが一致すれば、メールが改ざんされていないことが確認できる。
二つの署名方法
〇作成者署名
メールの送信元のドメインが署名する。
送信者自身のドメインがメールに対してDKIM署名を付けることで、メールがその送信者(ドメイン)から正当に送信されたものであることを証明します。
仕組み
メール送信者のドメインが所有する秘密鍵で署名される。
受信側は送信者のドメインのDNSに公開されている公開鍵を使って署名を検証する。
これにより、「このメールは送信者のドメインから改ざんされずに送られてきた」という保証が得られる。
第三者署名 (Third-Party Signature)
メールが正当に配信されたことを、第三者(通常は信頼されている送信サービス)が保証する。配信インフラを持たない送信者が簡単にDKIM署名を利用可能
仕組み
メールを配信するサービスプロバイダー(例: メールマーケティングサービス、クラウドベースのメール配信サービス)が、独自のドメインでDKIM署名を付ける。
受信側はその第三者のドメインのDNSに公開されている公開鍵で検証する。
設定前の前提条件
送信メールサーバーの対応の確認
メールサーバーまたはメールサービス(例:Google Workspace、Microsoft 365、Amazon SESなど)がDKIMに対応している必要があるため確認する。
ドメインのDNS管理権限
ドメインのDNS設定にアクセスできる必要があるのでここに公開鍵(TXTレコード)を追加する。
ドメインに関連付ける署名鍵ペア
・公開鍵:DNSに登録する。
・秘密鍵:メールサーバーが署名用に使用する(外部に公開しない)
設定手順
1. メールサーバーでDKIM署名を有効化
利用しているメールサービスまたはサーバーの管理画面で、DKIM署名を有効にする。
サービスごとの設定例:
Google Workspace:「Admin Console」→「アプリ」→「Google Workspace」→「Gmail」→「認証」→「DKIM署名を設定」
Microsoft 365:「Exchange管理センター」→「認証」→「DKIMの有効化」
2. 公開鍵(DNSレコード)を取得
メールサーバーでDKIM設定を有効化すると、公開鍵が生成される。
公開鍵は通常、TXT形式で指定され、次のようになる。:
v=DKIM1; k=rsa; p=公開鍵文字列
3. ドメインのDNSに公開鍵を追加
ドメインのDNS設定で、新しいTXTレコードを作成する:
ホスト名(例):default._domainkey.example.com
値(例):v=DKIM1; k=rsa; p=公開鍵文字列
注意:ホスト名はメールサービスによって異なることがある(例:selector1._domainkey)。
4. 設定を検証
メール送信後、受信メールサーバーが署名を検証できるよう、以下の方法でDKIMが正しく設定されているか確認する:
メールヘッダーを確認(Authentication-Resultsにdkim=passが表示される)。
dkim=failやdkim=neutralが表示される場合、DKIM署名が正しく設定されていないか、DNSに問題がある可能性がある。
DKIM検証ツール(例:dkimcore.orgやPostmark)を使用してDNSレコードをテスト。
メールヘッダーの確認方法(Outlook)
該当メールを開く。
メニューから「ファイル」→「プロパティ」を選択。
「インターネットヘッダー」セクションでメールのヘッダー情報が表示される。
Authentication-Resultsというフィールドがあるのでdkimがpassになっているか確認する。
DMARCとは
DMARC(Domain-based Message Authentication, Reporting, and Conformance)は、電子メールのなりすましやフィッシング詐欺を防ぐためのメール認証プロトコル。送信者のドメインに対するSPF(送信ポリシーフレームワーク)やDKIM(ドメイン鍵識別メール)の設定と連携し、受信者にメールが信頼できるかどうかを伝える。最後にレポートを送信する。
たとえば・・・
DMARCは学校の門番、受付の事務員的な存在である。DKIMは生徒手帳、SPFは通学証(決められた通学のルート)のようなもの。これを確認してその学校の生徒なのかを確認する。
DMARCは門番の役割をしている。
校長先生がドメイン管理者的な存在。校長先生が門番にルールを渡す。これがDMARCポリシーになる。
none(記録だけ):怪しい人がいても、「一応記録しておこう」と何も行動しない。
quarantine(要注意人物としてマーク):怪しい人は教頭先生に報告し、校内に入らず別の場所で待機(迷惑メールフォルダ行き)
reject(追い返す):怪しい人は学校に絶対に入れない(メール受信拒否)。
レポートを校長に提出する。門番は毎日、誰が来て、誰が追い返されたかを記録して校長先生に報告する。これがDMARCの「レポート機能」です。
DMARC設定前にやっておくこと
SPF(Sender Policy Framework)の設定
目的:メールを送信するサーバーのIPアドレスを指定し、受信者に正当な送信元かを確認させる。
・ドメインのDNSにSPFレコードを追加(例:v=spf1 include:example.com -all)。
・送信元のIPやメールサービスプロバイダ(例:Google Workspace、Microsoft 365)の情報をリストに含める。
DKIM(DomainKeys Identified Mail)の設定
目的:送信するメールにデジタル署名を付与し、改ざんされていないことを確認する。
・メールサーバーでDKIMを有効化。
・ドメインのDNSにDKIMの公開鍵(TXTレコード)を追加。
(例:v=DKIM1; k=rsa; p=公開鍵)
DMARCポリシーの設定
目的:SPFやDKIMの結果を元に、受信側がどのようにメールを扱うかを指示する。
・ドメインのDNSにDMARCレコードを追加(TXTレコード)。
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-failure@example.com
設定例
DMARCポリシーの構文
v=DMARC1; p=ポリシー; rua=レポート送信先; ruf=詳細レポート送信先; sp=サブドメインポリシー; pct=適用割合
最初にDMARCを導入する際、設定をテストするために使用する構文
メールを認証できなくても受信をブロックしない
v=DMARC1; p=none; rua=mailto:dmarc-aggregate@example.com; ruf=mailto:dmarc-failure@example.com; pct=100
v=DMARC1:DMARCレコードのバージョン。
p=ポリシー:none(ログのみ)、quarantine(隔離)、reject(拒否)のいずれか指定。
rua:認証結果レポートの送信先メールアドレス。
ruf:失敗したメールの詳細レポートの送信先メールアドレス。
こんな記事も書いています!
参考にしたドキュメント