今回は電子署名を利用した送信ドメイン認証技術「DomainKeys」について解説する。Sender IDやSPFなどのIPアドレスベースの送信ドメイン認証に比べて、本質的にメール転送に強いという利点があり、長期的には電子署名方式の送信ドメイン認証を利用していくべきであるといわれている。
ただし、Sender IDの導入は送信側ではDNSにSPFレコードを登録するだけで簡単に開始できるのに対して、DomainKeysなどの電子署名方式では送信側でも電子署名を行うメールフィルタを導入する必要があり、やや敷居が高い。
電子署名方式で最も普及しているDomainKeys
DomainKeysは、電子署名を利用した送信ドメイン認証技術の中では最も普及している技術である。DomainKeysは、米Yahoo!が提唱する方式であり、Yahoo!メールやGmailなどで利用されている。RFCのドラフトは以下のURLからダウンロードできる。
まず、DomainKeysの仕組みを説明する(図1)。電子署名に利用する公開鍵や秘密鍵はOpenSSLなどのツールを利用すれば自分で作成できる。なお、公的なCA(Certificate Authority:認証局)で電子署名された公開鍵の利用については現在検討中となっている。
図1 DomainKeysの仕組み
(1)X.COMではあらかじめ署名に使う公開鍵をDNSサーバにて公開する
(2)X.COMのメールサーバは送出メールの本文とヘッダを基に電子署名を付与する
(3)メールをY.COMへSMTPで送信する
(4)Y.COMのメールサーバは「From:」のドメイン部であるX.COMのDNSサーバに公開鍵を問い合わせる
(5)X.COMから取得した公開鍵により電子署名を照合して、OKであれば認証成功
DomainKeysのヘッダ
メール送信側では、作成した電子署名を「DomainKey-Signature:」ヘッダとして個々のメールに追加する。電子署名の値は選択したヘッダとメールの本文からハッシュ値を作成しそれを基に生成される。受信側ではメールの受信時にこのヘッダを参照して認証処理を実施する。
「DomainKey-Signature:」ヘッダの例を示す。
DomainKey-Signature: a=rsa-sha1; s=tls; d=sendmail.com; c=nofws; q=dns; h=in-reply-to:references:mime-version:content-type:message-id: content-transfer-encoding:cc:from:subject:date:to:x-mailer:x-ok-sendmail.com; b=hQ/NU8dng9Dkher6Te8xD/Ltt2KdEGCcd1aB+2/cmgNL3BKE9o 4BnYu4BBcWcxDSlrG1LYAC7hGVZi6/NT5TT6d20cfvSy39dWsqb MNRhBJKRX/h5+srjTJWfSpzeThz3lU9hq8ZfrVfJedi8SlKVjseafF0 Yp7m+w7k+MqapU8=
「b=」に続いているものが電子署名のデータである。ヘッダには電子署名以外にも複数の情報がタグ付きで記録される。タグの一覧について表1に説明する。
タグ | 説明 | |
a | 署名を作成するために用いた暗号化方式(必須) | |
b | 電子署名データ。Base64でエンコードされたもの(必須) | |
c | 正規化アルゴリズム。「simple」と「nofws」がある(必須) | |
d | 署名したドメインのドメイン名。このドメインとセレクタタグから公開鍵を取得するためのDNSクエリを作成する(必須) | |
h | 署名対象にしたヘッダのリスト。省略した場合DomainKeys-Signature:ヘッダより下のすべてのヘッダが署名の対象になる(オプション) | |
q | 公開鍵の取得に利用するメソッドを指定する。現時点ではdnsのみ(必須) | |
s | セレクタ。公開鍵を取得するときのDNSクエリを構成する要素(必須) | |
表1 DomainKeys-Signatureヘッダで利用できるタグ |
DomainKeysレコード
送信側では電子署名の照合に利用する公開鍵をDNS上にTXTレコードとして公開しておく。DNS上の公開鍵は例えば次のようになる。
k1._domainkey.sm-ex.co.jp. 300 INTXT"g=; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6xMd6S/.<省略>"
このTXTレコードには公開鍵以外にも制御用の情報もタグ付きで指定する。利用可能なタグの一覧を表2に示す。
タグ | 説明 | |
g | 送信者アドレスのローカルパートをしめす。受信側ではこのタグで指定された文字列がローカルパートであるアドレスからのメールしか認証成功としない(オプション) | |
k | keyのタイプ。省略可能でデフォルトは「rsa」(必須) | |
n | 説明文。利用者への説明のための情報を保持する(オプション) | |
d | 署名したドメインのドメイン名。このドメインとセレクタタグから公開鍵を取得するためのDNSクエリを作成する(必須) | |
p | Base64でエンコードした公開鍵のデータ。空白にした場合、鍵が無効になったことをしめす(必須) | |
t | 動作モード。Yの場合、試験的運用であることをしめす(オプション) | |
表2 DomainKeysの公開鍵情報で利用できるタグ |
受信側では、「DomainKey-Signature:」ヘッダのdの値が同じメールのヘッダ内にある「From:」か「Sender:」のドメイン部と一致していることを確認できたら、sタグの値(セレクタ)と合わせてDNSクエリを実施する。クエリするFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)は、
セレクタ._domainkey.ドメイン名
となる。例えば、「s=k1」で「d=sm-ex.co.jp」だとすると、
k1._domainkey.sm-ex.co.jp
へのTXTレコードのクエリを実施し、公開鍵を取得する。
セレクタを利用することにより1つのドメインで異なる鍵を使い分けることができる。例えば、一定期間で鍵を更新していく場合など、新旧2つの鍵を異なるセレクタを利用して同時に公開することで、移行期間の余裕を設けることができる。
Copyright © ITmedia, Inc. All Rights Reserved.