DomainKeys Identified Mail (DKIM) の仕組み
DKIMの仕組みの流れは、図解すると以下のような流れになります。
- ユーザからメール送信します。
メール送信者のメールサーバーでは、設定によっては他のドメインを拒否するように設定することもできます。ここでは、許可しているものとして解説しています。
- ユーザから受け取ったメールをメール受信者のメールサーバーへ送信します。
メール送信者のメールサーバーでは、ユーザから受け取ったメールの宛先ドメインにて、本来は、ネームサーバーへメールの送信先メールサーバーを問い合わせます。
問い合わせた結果、メール受信者のメールサーバーが決定し、メールを中継しますが、ここでは説明を割愛しています。
ここで、
SPFとの違いがあります。
DKIMでは、メールを送信する時に電子署名(Signature)をメールのヘッダ情報に付加し、メール送信します。
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=exmaple.com; s=sexmaple_com; t=1323065988; bh=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy=; h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type: Content-Transfer-Encoding; b=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
上記のような情報がメールヘッダ情報に付加されます。
DKIMでなくDomainKeysの場合は、
DKIM-Signature → DomainKey-Signature としてヘッダ情報に付加されます。
- メール受信者のメールサーバーでは、送信者ドメインのDKIM情報をネームサーバーへ問い合わせます。
もちろん、メール送信者のドメインを管理しているネームサーバーへ問い合わせます。
- ネームサーバーは、送信者ドメインのDKIM情報を返信します。
ネームサーバーでは、DKIM情報は、TXTレコードで設定されていますので、その情報があれば、返信します。無ければないで、「無い」と返信します。
ここでDKIM情報は、大きく2点です。
・公開鍵情報 : メールヘッダ情報をこの公開鍵で認証を行い、正等なメールか判断します。
・ポリシー情報 : このドメインがDKIMにどう取り組んでいるかを指定した情報です。
- メール受信者のメールサーバーでは、送信者がDKIM情報に従って正しいメールサーバーを経由して送信しているか確認します。
確認するのは、MTA ( Sendmail,Postfixなどのメールサーバー ) で認証します。具体的には、Sendmail,PostfixなどのメールサーバーにDKIM認証機能を有効に設定していない場合は、この認証は実施されません。
DKIM認証機能が有効になっていた場合、認証失敗時の対処を設定できるようになっています。その設定に従い、メール配信が処置されます。
一般的には、メールのヘッダ情報にDKIMの認証結果が付加されます。
Authentication-Results: mx.google.com; spf=pass (google.com: domain of hoge@exmaple.com designates 11.22.33.44 as permitted sender) smtp.mail=hoge@exmaple.com; dkim=pass header.i=@exmaple.com
Authentication-Results: mail.exmaple.com; dkim=pass (1024-bit key) header.i=@exmaple.net; x-dkim-adsp=none
Authentication-Results というメールヘッダ情報に結果は出力されます。
この情報には、他にSPF , domainkeys などDKIMの結果以外にも設定できるように定義されています。
Authentication-Resultsに結果を出力可能な認証方式
iprev | : | RFC 5451にて定義されている接続ホストのIPアドレスの逆引きに基づく認証方法 |
auth | : | SMTP認証 (SMTP AUTH) |
dkim | : | DKIM送信ドメイン認証 |
dkim-adsp | : | DKIM-ADSP送信ドメイン認証 |
domainkeys | : | DomainKeys送信ドメイン認証 |
sender-id | : | Sender ID送信ドメイン認証 |
spf | : | SPF送信ドメイン認証 |
DKIM / DomaiKeys の認証結果情報 (Authentication-Resultsの出力情報)
none | : |
メッセージは署名されていなかった。 |
pass | : |
メッセージは署名されており、その署名は検証器の受け入れられるものだった。また、その署名は検証試験に合格した。 |
fail | : |
メッセージは署名されており、その署名は検証器の受け入れられるものだった。しかし、試験には合格しなかった。 |
policy | : |
メッセージは署名されていたが、その署名は検証器に受け入れられるものではなかった。 |
neutral | : |
メッセージは署名されていたが、その署名には文法エラーが含まれていたか、その他の理由で処理できなかった。この結果はこの一覧の他の候補では扱えない、その他の失敗に使われるべきである(SHOULD)。 |
temperror | : |
メッセージは、一時的に公開鍵取得ができないなどの本来短期的なエラーのために検証できなかった。後の試行では最終的な結果が生成されるかもしれない。 |
permerror | : |
メッセージは、必要なヘッダフィールドが存在しないなどの回復不可能なエラーのために検証できなかった。後の試行でも最終的な結果が生成されそうにない。 |
DomainKeys Identified Mail (DKIM) の公開鍵情報の設定
先にも記述したようにDKIM情報は、DNS ( ネームサーバー ) の TXT (テキスト) レコード にて設定します。
よくある設定例は、以下のようなものです。
sexample_com._domainkey IN TXT "v=DKIM1; g=*; k=rsa; t=s; p=MIGfMA0GCSqGSIb3... 省略 ... "
|
設定している内容を簡単に解説しておきます。
<セレクタ>._domainkey.<ドメイン名> : の形式で設定します。
ここでは、セレクタ = sexample_com としています。
セレクタは、メールヘッダ情報にあるDKIM署名のsタグに指定されるものと一致しなければなりません。
DKIMの設定内容について
ここでの設定内容は、以下のような意味あいになります。
v=DKIM1 | : | DKIM のバージョンを指定しています。 |
g | : | 公開鍵の適用パターンを指定しています。ここでは、 “*” なので全てに適用となります。 |
k | : | 公開鍵の形式を指定しています。ここでは、 “rsa” なのでRSA形式となります。(現在は、RSA形式のみです) |
t | : | 試験フラグを指定しています。yを指定すると試験モードであることを意味します。ここでは、sなので、通常モードです。 |
p | : | 公開キー情報が設定されています。 |
その他、DKIMの公開鍵情報としてDNSに設定できる情報は、以下のとおりです。
Domainkey(DKIM)の公開鍵情報タグ一覧
v (Keyレコードのバージョン番号) :
設定することが推奨されるが、省略可能
指定する場合は「DKIM1」になる。省略時も「DKIM1」である。指定する場合は、レコードの最初に記述する
g (鍵の適用条件パターン) :
省略可能
電子署名の対象とするメールアドレスのローカルパートにマッチする条件パターン。ワイルドカード文字“*”が利用できる。この鍵を利用できる送信者のアドレスを限定する場合に利用する。省略時は「*」になる
h (利用可能なハッシュ方式) :
省略可能
電子署名の作成の際に利用できるハッシュの方式を限定する。省略した場合、すべてのハッシュ方式を許容する。DKIMでは現在、SHA1とSHA256のみサポートしている。署名作成者と照合者の両方が、SHA256方式をサポートする必要がある。また、照合者は、SHA1もサポートする必要がある
k (鍵の形式) :
省略可能
電子署名の作成の際に利用できる鍵の形式を指定する。DKIMでは現在、RSA形式のみサポートしており、省略時は「RSA」になる
n (説明) :
省略可能
可読な説明文を保持するタグ。省略時は無し(長さゼロ(0)の文字列)
p (公開鍵データ) :
必須
公開鍵のデータを保持するタグ。鍵データはBase64でエンコードする。また、値が指定されない場合は、該当の鍵が無効になっていることを示す
s (サービスタイプ) :
省略可能
当該鍵が有効であるサービスを指定する。カンマで区切って複数指定できる。現時点で指定できるサービスは「*」(すべてのサービス)と「email」(電子メール)の2つがある。省略時は「*」となる
t (フラグ) :
省略可能
フラグを指定する。コロン“:”で区切り、複数指定することができる。指定できるフラグには「y」と「s」がある。「y」は、DKIMの運用が試験モードであることを示す。
yフラグがある場合、受信者は認証に成功したメールとそうでないメールを区別して処理してはいけない。( つまり、破棄や受信拒否してはいけないという意味です。 )
「s」が指定されている場合、メールヘッダ情報にあるDKIM署名のiタグに指定されたアドレスの@(アットマーク)から右のドメイン名は、DKIM署名のdタグに指定された値と一致する必要がある。省略時はフラグ無し
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/ DKIM技術解説(財団法人インターネット協会/センドメール執筆)の「表1 利用できるタグ」
DomainKeys Identified Mail (DKIM) のポリシー情報の設定
DKIMのポリシー情報は、大きく2つの設定を行います。
署名のためのポリシー(SSP)
Site Signing Policy (SSP)と呼ばれ、
_policy._domainkey.<ドメイン名> の形式でDNSのTXTレコードに設定します。
この情報を設定することで、この情報に従いメールの受信側で認証の取り扱いを決定することになります。
何も設定されていない場合は、DKIMに対応していないものと判断されるでしょう。
_policy._domainkey IN TXT "t=y; o=~"
|
Domainkeysでは、
_domainkey.<ドメイン名> の形式でサイトポリシー(ドメインポリシー)として同じようにことができるようになっていました。
これが、DKIMでは、さらに進化し、以下のような形式でユーザ毎まで設定できるようになっています。
<ユーザ名>._policy._domainkey.<ドメイン名>
Domainkey(DKIM)のPolicyタグ一覧
n (説明文) : (省略可)
可読なテキストでポリシーの説明などを記述するタグ。省略時は指定なし(長さ0の文字列)となる。
o (アウトバウンド署名ポリシー) : (省略可)
署名ポリシーを指定する。省略時は「~」。値はそれぞれ次の意味を持つ。
(設定詳細情報)
~ | : |
署名されるメールもされないメールも存在する。 |
– | : |
該当ドメインからのメールはすべて署名される。署名されていないものは受信しないべきである。ただし、信頼する第三者が署名している場合は受信する。 |
! | : |
該当ドメインからのメールはすべて署名される。署名されていないものは受信しないべきである。また、第三者が署名しているものも受信しないようにするべきである。 |
. | : |
該当ドメインからのメールはいっさい送信されない。 |
^ | : |
ユーザーレベルのSSP「<ユーザー>._policy.<ドメイン名>」を取得する。この値はドメインでのSSPに利用するもので、ユーザーレベルのSSPには利用しない。 |
r (コンタクトアドレス) : (省略可)
ポリシーについて問い合わせる場合のメールアドレス。省略時は指定なしとなる。
t (フラグ) : (省略可)
フラグを指定する。「,」で区切って複数指定できる。
指定できるフラグは「y」のみで、これはDKIMの運用が試験モードであることを示す。
「y」フラグがある場合、受信側ではこのSSPを基にメールの認証の正当性を判断してはいけない。省略時はフラグなしとなる。
u (URI)
ポリシーのより詳細な情報を提供するURI。将来の拡張のために予約されている。
認証のためのポリシー(ADSP)
Author Domain Signing Practice(ADSP)と呼ばれ、
_adsp._domainkey.<ドメイン名> の形式でDNSのTXTレコードに設定します。
この情報を設定することで、もしもメールの受信側で認証失敗した時、ここに示された対処に従うことになります。
_adsp._domainkey IN TXT "dkim=unknown"
|
dkim= の値は、以下の値を設定することができます。
DKIMの設定値
all | : |
このドメインから送信されるメールは、すべてメール作成者署名が与えられる |
unknown | : |
このドメインから送信されるメールのいくつか、またはすべてに、メール作成者署名が得られる |
discardable | : |
このドメインから送信されるメールは、すべてメール作成者署名が与えられる。そして、もしメール作成者署名が得られない場合は、受信者はそのメールを破棄することが望まれる |
DomainKeys Identified Mail (DKIM) の署名情報の設定
DKIMの署名は、以下のような情報になります。以下は、yahoo.co.jp のフリーメールアドレスから送信した時に署名された内容です。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.jp; s=yj20110701; t=1323185060; bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=Qm/PvCk9Iayk8FP91JI … 省略 …
DKIM署名の設定内容について
ここでの設定内容は、以下のような意味あいになります。
v=1 | : | DKIM のバージョンを指定しています。 |
a | : | 署名に用いたアルゴリズムを指定しています。ここでは、 “rsa-sha256” なので RSAのハッシュアルゴリズム 256 を利用しています。 |
c | : | メールヘッダ部分 / 本文 の正規化方式を指定しています。ここでは、いずれも “relaxed” なので 比較的緩い正規化を利用しています。 |
d | : | ドメイン名を指定しています。 |
s | : | セレクタ名を指定しています。 |
t | : | 署名実施時のタイムスタンプを指定しています。EPOC(1970年からの秒数)で指定しています。 |
bh | : | 本文のハッシュ値を指定しています。 |
h | : | 署名したヘッダを指定しています。ここでは、Message-ID , X-YMail-OSG などのヘッダ情報が署名されたことになります。 |
b | : | 署名情報が設定されています。 |
このDKIMの署名の各タグの意味は、以下のようになります。
Domainkey(DKIM)の署名情報タグ一覧
v (バージョン) :
必須
バージョン番号を示す。現時点では、このタグには1と指定する
a (署名の作成に利用したアルゴリズム) :
必須
署名の作成に利用したアルゴリズムを指定する。「rsa-sha1」と「rsa-sha256」が利用できる
b (電子署名データ) :
必須
電子署名データ。Base64にエンコードして指定する
bh (本文のハッシュ値) :
必須
電子署名の対象とした本文のハッシュ値
c (メール本文の正規化方式) :
省略可
署名作成のときに利用する正規化処理の方法を指定する。“/”で区切り、それぞれヘッダと本文の正規化に利用したアルゴリズムを表示する。「simple」と「relaxedが」指定できる。省略した場合は「simple/simple」になる。
d (ドメイン名) :
必須
署名を行ったドメイン名。送信ドメイン名である。公開鍵の取得の際に参照するドメイン名の一部になる。後述のiタグに与えられるアドレスのドメイン名は、このタグに与えられる値と同じか、またはサブドメインである必要がある
h (署名したヘッダ) :
必須
電子署名を作成するデータに含まれたヘッダ。“:”で区切って複数列挙できる。送信者を示すヘッダ「From:」や「Sender:」などは必ず署名対象に含める必要がある
i (認証対象送信者アドレス) :
省略可
メールの送信者や送信プログラム(メーリングリストなどの場合)のメールアドレス。省略した場合は、dタグに指定したドメイン名の先頭に@を追加した値になる
l (署名対象本文長さ) :
省略可
電子署名を行ったメール本文の先頭からの文字長(バイト長)。省略した場合、本文全てを署名対象とする。署名実施するシステムの処理能力とのトレードオフであるが、一般的にあまり小さな値は推奨されない
q (公開鍵取得方法) :
省略可
公開鍵を取得する方法を指定する。現時点では「dns/txt」のみ指定可能。省略時は「dns/txt」
s (セレクタ) :
必須
公開鍵を取得する際、クエリを発行する対象のドメイン名の一部に利用する。複数のセレクタを持つことで、1つのドメインで複数の公開鍵を利用できる
t (署名実施時のタイムスタンプ) :
利用推奨(省略可)
電子署名を作成した日付をEPOC(1970年からの秒数)で指定する。省略時は未定義となる
x (有効期限) :
利用推奨(省略可)
電子署名の有効期限を指定する。有効である日時をEPOC(1970年からの秒数)で指定する。省略した場合、署名は無期限になる
z (認証対象としたヘッダのコピー) :
省略可
動作のテスト目的で付与される。実際の認証処理には利用しない
出典 : http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/ DKIM技術解説(財団法人インターネット協会/センドメール執筆)の「表2 タグの一覧」
どうでしょうか、少しはDKIMについて理解が深まりましたでしょうか?
DKIMは、SPFと同じように、そもそもがスパマーが独自の勝手なSMTPサーバーをたてて、適当なメールアドレスを使って、配信するのを防ぐ意図があります。
SPFがドメイン名とメール送信ホスト名(IPアドレス)で認証しているのに対して
DKIMはドメイン名とメールヘッダにある電子署名、公開鍵で認証している違いがあります。
SPFもDKIMも自分が管理するドメインを使ったスパムメールの増殖を増やさないメリットがあります。
ただし、SPF、DKIMなどでスパムメールの受信を撲滅することは、まだまだ、難しいでしょう。
いろいろ考えることはありますが、少なくとも法人用のドメインに関しては、SPF,DKIMなどを、設定しておくことをおすすめします。
この設定をしておくことで、そのドメインを使ったスパムは、減ることは間違いありません。また、ブラックリストに載る確率を低くなるでしょうからね。
コメントを投稿 :