Cyber Security Academy · レッスン

DKIM署名

メッセージに暗号学的な署名を付けます。

レッスン 3/413 ステップ

「DKIM署名」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。

DKIMが提供するもの

DKIM (DomainKeys Identified Mail)は、送信メールに暗号学的な署名を付加します。受信側はその署名を検証して、次の2点を確認できます。

  • メッセージが署名ドメインによって正当に承認されたこと
  • 署名された内容が転送中に改変されていないこと

SPFがサーバーを認可するのに対し、DKIMはメッセージ自体を認証し、その署名は転送後も有効です。

公開鍵暗号の基礎

DKIMは非対称暗号方式に基づいています。ドメイン所有者は鍵ペアを保持します。

  • 秘密鍵は送信メールサーバー上で秘密に保管し、署名に使用します
  • 公開鍵はDNSで公開し、誰でも検証に使用できます

秘密鍵の所有者だけが有効な署名を生成できるため、検証に成功すれば、メッセージが正当なドメインから送信されたことを証明できます。

署名プロセス

送信サーバーはメッセージを送信するとき、選択したヘッダーと本文を対象に署名を生成し、DKIM-Signatureヘッダーを追加します。

Steps on the sender side:
1. Select headers to sign (From, Subject, Date, ...)
2. Hash the message body
3. Build the DKIM-Signature header with those fields
4. Sign the hash with the private key
5. Attach the signature to the outgoing message

DKIM-Signatureヘッダーの構造

DKIM-Signatureヘッダーには、受信側が検証するために必要なパラメーターが含まれています。

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=company.com;        domain that signed
  s=mail2024;           selector (which key)
  h=from:subject:date;  signed headers
  bh=base64bodyhash;    body hash
  b=base64signature     the signature itself

DNSにおけるセレクターと公開鍵

セレクター(s=タグ)は、受信側に取得すべき公開鍵を伝えます。鍵は、DNS上の予測可能な場所にあります。

Location:  <selector>._domainkey.<domain>

Example DNS TXT record:
mail2024._domainkey.company.com.  IN  TXT \
  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."

  p = the base64-encoded public key

検証プロセス

受信すると、検証サーバーは逆の手順を実行します。

  • DKIM-Signatureからd=ドメインとs=セレクターを読み取ります
  • DNSのselector._domainkey.domainから公開鍵を取得します
  • 本文ハッシュとヘッダーハッシュを再計算します
  • 公開鍵を使って署名が一致することを検証します

署名が有効なら、DKIMはpassになります。メッセージが改変されていた場合や、誤った鍵で署名されていた場合はfailになります。

本文ハッシュによる改ざん検出

bh(本文ハッシュ)フィールドによって、DKIMは改ざんを検知できます。送信側は本文をハッシュ化し、そのハッシュを署名対象のデータに含めます。

転送中に誰かがメッセージ本文を変更すると、受信側で再計算したハッシュが署名済みのbhと一致しなくなり、検証に失敗します。これによりDKIMは、送信元の認証だけでなく完全性も保証します。

正規化

メールサーバーは転送の途中で、行を折り返したり空白を調整したりするなど、害のない小さな変更を加えることがよくあります。こうした変更で正しい署名が壊れないよう、DKIMでは正規化(c=タグ)を使用します。

  • simple — 厳格で、ほとんどどのような変更でも署名が壊れます
  • relaxed — 空白やヘッダーの大文字・小文字の変更を許容します

さまざまなメール基盤での信頼性を高めるため、多くの環境ではrelaxed/relaxedを使用します。

セレクターによる鍵ローテーション

セレクターは単なるラベルではなく、安全な鍵ローテーションを可能にします。鍵が漏えいした場合の影響を抑えるため、DKIM鍵は定期的に交換する必要があります。

ローテーションの手順は次のとおりです。

  • 新しいセレクター(例:mail2025)を使って新しい鍵ペアを生成します
  • 新しい公開鍵をDNSに公開します
  • 署名側で新しいセレクターを使うように切り替えます
  • 送信途中のメールが配信されるまで古いセレクターをDNSに残し、その後削除します

新しいセレクターを使うことで、署名を検証できなくなる空白期間を避けられます。

DKIMは転送に耐える

SPFとは異なり、DKIMは転送後も有効です。署名はメッセージとともに移動するため、署名対象のヘッダーと本文が変更されない限り、転送されたメッセージも検証できます。

これはSPFの弱点を完全に補います。メッセージが転送されると、接続元IPが変わるためSPFは失敗する可能性がありますが、DKIMはpassになる可能性があり、DMARCによって正当なメールを受け入れられます。

DKIMの制限

DKIMは強力ですが、単独ですべてを解決できるわけではありません。

  • メッセージにドメインが署名したことは証明できますが、署名ドメインが表示されるFromヘッダーと一致すること、つまりDMARCアライメントまでは保証しません
  • 攻撃者は、自分のドメインの有効なDKIM鍵でメールに署名できます
  • 秘密鍵が漏えいすると、鍵がローテーションによって無効化されるまで、攻撃者は有効な署名を偽造できます

なりすまし対策としてDKIMを有効にするには、DMARCと組み合わせる必要があります。

理解度チェック

DKIMについての理解度を確認しましょう。

まとめ

DKIMがメッセージに署名する仕組みについて学びました。

  • DKIMは、送信元と完全性を証明する暗号学的な署名を付加します
  • 秘密鍵でサーバー上から署名し、公開鍵はセレクターの下でDNSに公開します
  • 本文ハッシュで改ざんを検出し、正規化で害のない変更を許容します
  • セレクターによって安全な鍵ローテーションが可能になり、SPFが失敗する場合でもDKIMは転送後も有効です
  • 署名を表示されるFromに結び付けるには、DKIMにもDMARCアライメントが必要です

次は、DMARCのポリシーとレポートを使ってSPFとDKIMを結び付けます。

無料で開始

AI チューターと学ぶ Cyber Security Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
76
レッスン
303

よくある質問

「DKIM署名」レッスンは無料ですか?

はい。「DKIM署名」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。

「DKIM署名」で何を学びますか?

メッセージに暗号学的な署名を付けます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cyber Security Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「DKIM署名」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCyber Security Academyレッスンでコードを書いて実行できますか?

はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. メールスプーフィングの仕組み
  2. SPFレコード
  3. DKIM署名
  4. DMARCポリシーとレポート
← Cyber Security Academyに戻る