DNSのDKIMレコードとは?

DKIMレコードは、電子メールの真正性を確認するために使用される公開鍵を登録する、特殊なDNS TXTレコードです。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • DKIMがEメールのスパムを阻止する方法の説明
  • DKIMレコードの例を見る
  • DKIMヘッダーの仕組みの説明

記事のリンクをコピーする

DKIMとは?

DomainKeys Identified Mail(DKIM)は、スパマーやその他の悪意のある者が正当なドメインになりすますことを防止するためのメール認証方式です。

すべての電子メールアドレスにはドメイン(アドレスの「@」記号の後の部分)があります。スパマーや攻撃者は、フィッシング攻撃やその他の詐欺を行うために、メールを送信する際のドメインをなりすまそうとすることがあります。

チャックは、example.comで働いているアリスを騙して、会社の機密情報を送らせたいと考えていると想定してください。チャックは、「bob@example.com」から送られたように見えるメールを彼女に送ることで、彼もexample.comの社員だと思わせることができます。

DKIMは、Sender Policy Framework(SPF)Domain-based Message Authentication Reporting and Conformance(DMARC)で、攻撃者がこのような方法でドメインをなりすますことをはるかに困難にしています。DKIMとSPFで不許可となった電子メールは、「スパム」としてマークされたり、電子メールサーバーによって配信されなかったりします。example.comがDKIM、SPF、DMARCを設定した場合、メールは彼女のスパムフォルダーに入るか、メールサーバーによって完全に拒否されるため、アリスはチャックの悪意のあるメールを見ることはないでしょう。

DKIMの仕組みにとは?

DKIMには主に2つの側面があります。ドメインのDomain Name System(DNS) レコードに保存されるDKIMレコードと、ドメインからのすべての電子メールに挿入されるDKIMヘッダーです。

DKIMは、公開鍵暗号に基づくデジタル署名方式���使用して、電子メールがどこから来たのか、実際にそのドメインから電子メールを送信するサーバーから来たのかを認証します。送信者がメッセージに署名するための秘密鍵と、受信者が署名を検証するための公開鍵の2つの暗号鍵を使用します。受信者は公開鍵を使ってメッセージに署名することはできず、逆もまた同様です。

メールプロバイダーが、公開鍵と秘密鍵を生成します。公開鍵はドメイン所有者に渡され、ドメイン所有者は公開されているDNSレコード(DKIMレコード)に公開鍵を登録します。

そのドメインから送信されるすべての電子メールには、DKIMヘッダーが挿入されています。このヘッダーには、「デジタル署名」と呼ばれる秘密鍵で署名されたデータのセクションが含まれています。メールサーバーは、DKIMのDNSレコードを確認して公開鍵を取得し、その公開鍵を使ってデジタル署名を検証することができます。

このプロセスは、電子メールが送信中に改ざんされていないことも保証します。電子メールのヘッダや本文が改ざん(薬缶の改ざん防止シールのようなもの)されていると、デジタル署名は検証されません。

DKIMレコードとは?

DKIMレコードにはDKIM公開鍵(秘密鍵で署名されたものを検証するために使用されるランダムな文字列)が登録されています。メールサーバーは、該当するドメインのDNSレコードを問い合わせて、DKIMレコードを確認し、公開鍵を確認します。

DKIMレコードは、実際には、DNS TXT ("文字列") のレコードです。TXTレコードは、ドメイン管理者が自分のドメインに関連づけたい任意のテキストを登録するために使用できます。DKIMは、このタイプのDNSレコードの多くの用途の一つです。

以下は、DKIMのDNS TXTレコードの例です。

名称 種類 本文 TTL
big-email._domainkey.example.com TXT v=DKIM1; p=76E629F05F70
9EF665853333
EEC3F5ADE69A
2362BECE4065
8267AB2FC3CB
6CBE
6000

名称

多くのDNS TXTレコードとは異なり、DKIMレコードはドメイン名だけでなく、特殊な名前で登録されます。DKIMレコードの名前はこのフォーマットに従います。

[セレクタ名]._domainkey.[ドメイン名]

セレクタ名 は、ドメインが使用しているメールサービスプロバイダが発行する特殊な値です。これは、メールサーバーがDNSで必要なDKIM検索を実行できるように、DKIMヘッダーに含まれています。ドメイン名 は、メールドメイン名です。._domainkey. は、すべてのDKIMレコード名に含めます。

DKIMレコードを検索するために、メールサーバはドメイン名だけでなく、メールサービスプロバイダが提供するDKIMセレクタを使用します。例えばexample.comが電子メールサービスプロバイダとしてBig Emailを使用しており、Big EmailがDKIMセレクタに big-email を使用していると想定してください。example.comのほとんどのDNSレコードは、example.com という名前になりますが、このDKIM DNSレコードは、上記の例に記載されているように big-email._domainkey.example.com という名前になります。

本文

これは公開鍵を記載したDKIM DNSレコードの一部です。上記の例では、v=DKIM1 が、このTXTレコードがDKIMとして解釈されるべきであることを示しており、公開鍵は p= の後にすべて記載されています。

レコードの種類とTTL

これらは、DNSレコードの標準的なフィールドです。TXT は、これがDNSのTXTレコードであることを示しています。「TTL」は、time to live(秒単位で計測)の略で、このレコードがリフレッシュされるまでの有効期間を示しています。DKIMレコードのTTLは通常数分です。

DKIMヘッダーとは?DKIMの署名はどのように機能するか?

送信側のメールサーバは、メールヘッダ、メール本文(実際にはメール本文のハッシュ値)、秘密鍵を用いてデジタル署名を作成します。この電子署名は、DKIMヘッダーの一部としてメールに挿入されます。

DKIMヘッダーは、電子メールに挿入される数あるヘッダーの一つです。ほとんどのメールアプリケーションでは、ユーザーが特定のオプションを選択しない限り、メールを開いてもヘッダーは表示されません。例えば、Gmailでは、メールの右上にある3つの縦の点をクリックし、「メッセージのソースを表示」をクリックすると、メールのヘッダーを表示することができます。

以下に、DKIMヘッダーの例を示します。

v=1; a=rsa-sha256; 
        d=example.com; s=big-email;
        h=from:to:subject;
      bh=uMixy0BsCqhbru4fqPZQdeZY5Pq865sNAnOAxNgUS0s=;
  b=LiIvJeRyqMo0gngiCygwpiKphJjYezb5kXBKCNj8DqRVcCk7obK6OUg4o+EufEbB
tRYQfQhgIkx5m70IqA6dP+DBZUcsJyS9C+vm2xRK7qyHi2hUFpYS5pkeiNVoQk/Wk4w
ZG4tu/g+OA49mS7VX+64FXr79MPwOMRRmJ3lNwJU=
  • v= は、使用しているDKIMのバージョンを示しています。
  • d= は、送信者のドメイン名です。
  • s= は、受信側サーバーがDNSレコードを検索する際に使用するセレクタです。
  • h= は、デジタル署名(b)を作成するために使用されるヘッダーフィールドを列挙したものです。この例では、from、to、subject の各ヘッダーが使用されています。もし、ボブがexample.comドメインを使ってアリスにメールを送り、その件名が「Recipe for cheesecake」だった場合、ここで使われるコンテンツは「bob@example.com"」+「alice@example.com」+「Recipe for cheesecake」となります。(また、このコンテンツは正規化処理も実施されます — 標準化された形式にします)。
  • bh= は、メール本文のハッシュ値です。ハッシュ値とは、ハッシュ関数と呼ばれる特殊な数学関数の結果です。この値は、受信側のメールサーバーがメール本文全体を読み込む前に署名を計算できるように含まれています。場合によっては読み込みに時間がかかることがあるため、メール本文は任意の長さにすることができます。
  • a= には、デジタル署名(b)の計算と、ハッシュ(bh)の生成に使用されるアルゴリズムが指定されます。この例では、RSA-SHA-256が使用されています(RSAはデジタル署名のハッシュ関数としてSHA-256を使用し、本文のハッシュにはSHA-256が使用されています)。
  • b= は、 hbh から生成されたデジタル署名で、秘密鍵で署名されたものです。

デジタル署名(b=)により、受信サーバーは、1. 送信サーバーを認証し、2. インテグリティ(電子メールが改ざんされていないこと)を保証します。

受信サーバーは、 h= に列挙されているのと同じ内容を取得たものに本文のハッシュ値(bh=)を加え、DKIMレコードの公開鍵を使ってデジタル署名が有効かどうかをチェックすることでこれを行います。正しい秘密鍵が使用され、コンテンツ(ヘッダーと本文)が変更されていなければ、メールはDKIMチェックを許可します。

DKIMとDMARCとの関係は?

DMARCは、DKIMとSPFをベースに構築された電子メール認証方式です。DMARCには、SPFとDKIMに失敗した電子メールへの対処法が記載されています。SPF、DKIM、DMARCを併用することで、メールスパムやメールスプーフィングを防止することができます。DKIMレコードと同様に、DMARCポリシーはDNS TXTレコードとして登録されます。

Cloudflareは、メール認証用のDNS TXTレコードを素早く設定できる「電子メールセキュリティDNSウィザード 」を提供しており、ドメイン管理者は悪意のある当事者が自分のドメインになりすますのを防ぐことができます。

メール用DNSレコードの詳細はこちら:

DKIMの詳細については、RFC 6376 をご覧ください。