MTA/AntiSPAM/Domain Keysって何?
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
----
* 1.DomainKeys って何? [#tf02d945]
** 1-1. DomainKeys(ドメイン・キーズ)は認証鍵によるメール...
DomainKeys は迷惑メール(SPAM)対策の手法として Yahoo.com...
以上の特徴から、主にドメイン偽装された迷惑メール(SPAM)...
** 1-2. DomainKeys の動作の流れ [#a368dbf5]
+ 公開鍵・秘密鍵を作成し、公開鍵を DNS レコードの TXT フ...
+ メールを送信する度に、メールには秘密鍵(rsa-sha1方式)が...
+ 送り先のメールサーバではメールを受信すると、ヘッダの中...
+ 署名と秘密鍵の組み合わせが正しい場合にメッセージを受け...
** 1-2. DomainKeys に関する開発状況 [#z9439025]
SourceForge(ソース・フォージ)で開発が進んでいます。
http://domainkeys.sourceforge.net/
ドキュメントの中には sendmail と qmail, Postfix に関す...
* 2. ライセンスは無料 [#y8168a8a]
Royalty-free, worldwide, non-exclusive licensing informa...
>http://domainkeys.sourceforge.net/license/softwarelicens...
* 3. DomainKeysに関する技術的な事 [#idb52d43]
** 3-1. 公開鍵による署名の認証 [#cdf505fb]
署名は RSA 暗号(SHA1)によるメールのダイジェスト化された...
署名の例として、openssl の使用例を挙げます。768 bit の...
$ openssl genrsa -out private.txt 512
warning, not much extra random data, consider using the ...
Generating RSA private key, 512 bit long modulus
..++++++++++++
..............++++++++++++
コマンドを実行することで、 private.txt というファイルが...
$ cat private.txt
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANo5mJu+XfOJIJ65idRWQHQDSwKo1YV+2EiGIkx+E62e...
Kdwdlcp6f5KBtH+rEePykgABfb19T8R2kFECAwEAAQJAIgYc3xt9Nn1I...
2jyxM0bzk47FVflj251EoCre+HxFUE9kYjlO2cc/IJmAlvknetxvJxrJ...
gQIhAO+IWb9fPKAqKrl9qKnXWIK3oHuzxfupDrAo0jt/6il5AiEA6To+...
t3GYo61qZ6KeCsnOb0Ro+wi7zkcHP5kCIGPd+W0si95LNlz34yZMvn5h...
Wv9fRafBASQhAiBVKsuTROWrvIRBuN3Ah4cfqSaFUgRsZVLguOO8A/wF...
NYtK7KDGyf2U09OKXi+z8ZdQpyud3I3OvPQq63St
-----END RSA PRIVATE KEY-----
このように秘密鍵(RSA PRIVATE KEY)を作成するように、メー...
$ openssl dgst -sign ./private.txt -sha1 < ./input.file ...
この手順で MIME-Base64 形式のファイルが mime.file に出...
秘密鍵から公開鍵を抽出するには次のような openssl コマン...
$ openssl rsa -in ./private.txt -out public.txt -pubout ...
read RSA key
writing RSA key
作成された公開鍵は cat で確認できます。
$ cat public.txt
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANo5mJu+XfOJIJ65idRWQHQD...
2EiGIkx+E62eHGOrgbWnKdwdlcp6f5KBtH+rEePykgABfb19T8R2kFEC...
-----END PUBLIC KEY-----
この作成された公開鍵の情報を DNS に TXT レコードとして...
なお、署名の正当性を確認するには、openssl では次のコマ...
$ openssl dgst -verify ./public.txt -sha1 -signature ./m...
Verified OK
このように "Verified OK"=認証 OK と表示されました。
** 3-2. DNS 上の TXT レコードとはどんなものか? [#f5d3261e]
まず、認証を行う件ですが、必ず 512, 768, 1024, 1536, 20...
テキストレコードは次のような形式です。
brisbane._domainkey IN TXT "g=; k=rsa; p=MHww ... IDAQAB"
"(ダブルコーテーション)の中の記号(タグ)には、次のような...
- g = キーの暗号強度です。記述は任意であり省略してもあり...
- k = キーの種類です。RSA 認証が標準です。署名は 'rsa'鍵...
- n = メモ欄です。人間が読むことができます。この項目は省...
- p = Base64 文字列としてエンコードされた公開鍵データです...
- t = フラグ(boolean)属性のセットができます。有効な属性は...
なお、TXT レコードは 2048 bit までの暗号強度の鍵を用い...
** 3-3. 鍵の暗号強度 [#f35d4e2c]
どのレベルの暗号強度を用いるかは安全度の高さとコストパ...
- DNS が通信する時に用いる UDP パケットでは、2048 ビット...
- 鍵が大きくなればなるほど、署名の確認に CPU の処理負担と...
- 鍵を頻繁におきかえると、それはそれで面倒になる
- 目的は公開鍵認証方式を用いて正しい送信者か確認ができれ...
結局の所[[ドキュメント:http://www.ietf.org/internet-draft...
** 3-4. 署名とメールヘッダの関係 [#u86a7ff1]
これら署名の情報はメールヘッダ中の【 DomainKey-Signatur...
また、【 DomainKey-Signature: 】はその他のヘッダよりも...
DomainKey-Signature のサンプルはこんな感じです。
DomainKey-Signature: a=rsa-sha1; s=brisbane; d=example.n...
もう少し具体的にしてみると、
DomainKey-Signature: a=rsa-sha1 s=brisbane; d=example.net;
c=simple; q=dns;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ
VoG4ZHRNiYzR;
Gmail.com では次のようなヘッダを返しています。
DomainKey-Signature: a=rsa-sha1; c=nofws;
s=beta; d=gmail.com;
h=received:message-id:date:from:reply-to:to:subject:
mime-version:content-type:content-transfer-encoding;
b=UHWIvAn9.....jw5mJ7H+A
- a = 署名生成時の暗号方式です。暗号方式は "rsa-sha1" で...
- b = Base64 エンコードされた署名データです。この項目も必...
- c = 署名アルゴリズム(正規化)の指定です。"simple" もしく...
- d = メール送信ホストのドメイン名です。この項目も必須で...
- h = 適切な署名かどうか比較するときアルゴリズムが用いる...
- q = 公開鍵を探すための方法(DNS 検索)を指定しなくてはい...
- s = DNS に問い合わせる TXT レコードのタイプです
結局の所、サーバ管理者としては DNS レコードの作成と、Do...
なお、データ正規化に用いるアルゴリズムには simple と no...
** 3-5. DNS 情報の追加を行うには? [#pa9449df]
実際の DNS(bind) のゾーン情報ファイルには以下のような記...
_domainkey IN TXT "t=y; o=-; n=notes; r=emailAddress"
項目はそれぞれ ; セミコロンで区切られます。
タグの意味は次の通りです
- n = 人間が読むことができるメモ欄です。プログラムは無視...
- o = メール送信時のポリシー定義です。 '-' は送信する全メ...
- r = レポート(報告)用メールアドレスです。もし送信時のメ...
- t = boolean フラグです。y はテスト用のフラグです。本物...
なお、認証が失敗したときは "Authenticated-Results:" ヘ...
* 4 実践、DomainKeys DNS 情報の追加[#m7cc92b8]
** 4-1. DNS 上に設定が必要なもの [#l2a4fd05]
DNS に設定が必要なのは「【任意の文字(sタグで定義)】._do...
たとえば s タグが betatest の場合、ドメインは example.j...
実際 gmail の例では dig コマンドは次のような応答を返し...
$ dig beta._domainkey.gmail.com txt
(中略)
;; ANSWER SECTION:
beta._domainkey.gmail.com. 300 IN TXT "t=y\; k...
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/...
X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQc...
LY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQ...
** 4-2. DomainKeys 対応 TXT レコードの作成 [#qf5aebb4]
DomainKeys 対応の TXT レコードを作るためには公開鍵の作...
*** 4-2-1. 秘密鍵の作成 [#me5b20dc]
サーバ内に OpenSSL がセットアップされている事が必須です...
署名は RSA暗号(SHA1) による 1024 bit の鍵を作成すること...
$ mkdir ssl
$ cd ssl
まず作業用にディレクトリを作成します。名前は適当でも良...
手始めに openssl で用いるためのランダムファイルを準備し...
$ openssl md5 ~/* > random.txt
これで random.txt の中にホームディレクトリに含まれるフ...
次に openssl に genrsa オプションをつけ、RSA鍵を作成し...
$ openssl genrsa -rand random.txt -out private.key 1024
8705 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
..................++++++
...............................++++++
e is 65537 (0x10001)
cat で内容を確認します。
$ cat private.key
-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDnvGryYF051/F6PKSgOnfy8nDJc9Jav1bDW7ACQdli...
/2396aeoNk4OpU+yK7kuN4infoT2pn6kGVI6IhoCDmqI42e8R96A3xgg...
iv+kd9gPJUOtID8XyCfoErSwtY3e1vYNMjeCmOKL3bbddO2xLdfi7JLF...
(中略)
74OxW3taChgtQkm5cGvGMAiTIoWWAsGOaTsXJ+32hJco+iu3FuLpZpEC...
MYF+YrjNuwXRAJdy8wshtwJBAORa8K6OrC/gKA0nrtY2dRWP9y1/qGWf...
w0Mjuede7rg9bDfVo93woFAmSWJklpQy5p39BH1MxbSr41M=
-----END RSA PRIVATE KEY-----
"RSA PRIVATE KEY"(RSA秘密鍵)と書かれたファイル内容が表...
*** 4-2-2. 公開鍵の作成 [#ja3dfc09]
公開鍵は次の openssl コマンドを用いて作成します。
$ openssl rsa -in ./private.key -out public.key -pubout ...
read RSA key
writing RSA key
作成された公開鍵は cat で確認できます。
$ cat public.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDnvGryYF051/F6PKSg...
c9Jav1bDW7ACQdliEN/lCTqn/2396aeoNk4OpU+yK7kuN4infoT2pn6k...
DmqI42e8R96A3xggctEu6ftPiv+kd9gPJUOtID8XyCfoErSwtY3e1vYN...
3bbddO2xLdfi7JLFywIDAQAB
-----END PUBLIC KEY-----
ここで表示されたデータを TXT レコードに追加します。
*** 4-2-3. DNS(bind)のゾーン情報ファイルに TXT レコード追...
[[ここでは3-2項を参考に:http://pocketstudio.jp/linux/?M...
----
変なところがあればご指摘下さい……
-秘密鍵を添付するのではなくて、署名をヘッダに加えるのです...
-ご指摘ありがとうございます、なおします -- [[前佛]] &new{...
-どのゾーンにTXTレコードを追加するかわかりません.また,結...
-私が実際に使っているZONE情報ファイルをアップしました。<a...
-こちらの通り設定しているのですが、どうにも自分の方の署名...
-お騒がせしました。結局のところmaster.cfの書き方が悪かっ...
##comment
----
* 5 実際の所 DomainKeys を使うには [#p48c306c]
- SENDMAIL.NET で配布されている sendmail 用 milter フィル...
http://sendmail.net/dk-milter/
* 情報元(リソース) [#q0a328fe]
: Yahoo! Anti-Spam Resource Center - DomainKeys | http://...
: Domain-based Email Authentication Using Public-Keys Adv...
: Preventing SPAM | http://www.poornam.com/articles_spam....
終了行:
#contents
----
* 1.DomainKeys って何? [#tf02d945]
** 1-1. DomainKeys(ドメイン・キーズ)は認証鍵によるメール...
DomainKeys は迷惑メール(SPAM)対策の手法として Yahoo.com...
以上の特徴から、主にドメイン偽装された迷惑メール(SPAM)...
** 1-2. DomainKeys の動作の流れ [#a368dbf5]
+ 公開鍵・秘密鍵を作成し、公開鍵を DNS レコードの TXT フ...
+ メールを送信する度に、メールには秘密鍵(rsa-sha1方式)が...
+ 送り先のメールサーバではメールを受信すると、ヘッダの中...
+ 署名と秘密鍵の組み合わせが正しい場合にメッセージを受け...
** 1-2. DomainKeys に関する開発状況 [#z9439025]
SourceForge(ソース・フォージ)で開発が進んでいます。
http://domainkeys.sourceforge.net/
ドキュメントの中には sendmail と qmail, Postfix に関す...
* 2. ライセンスは無料 [#y8168a8a]
Royalty-free, worldwide, non-exclusive licensing informa...
>http://domainkeys.sourceforge.net/license/softwarelicens...
* 3. DomainKeysに関する技術的な事 [#idb52d43]
** 3-1. 公開鍵による署名の認証 [#cdf505fb]
署名は RSA 暗号(SHA1)によるメールのダイジェスト化された...
署名の例として、openssl の使用例を挙げます。768 bit の...
$ openssl genrsa -out private.txt 512
warning, not much extra random data, consider using the ...
Generating RSA private key, 512 bit long modulus
..++++++++++++
..............++++++++++++
コマンドを実行することで、 private.txt というファイルが...
$ cat private.txt
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANo5mJu+XfOJIJ65idRWQHQDSwKo1YV+2EiGIkx+E62e...
Kdwdlcp6f5KBtH+rEePykgABfb19T8R2kFECAwEAAQJAIgYc3xt9Nn1I...
2jyxM0bzk47FVflj251EoCre+HxFUE9kYjlO2cc/IJmAlvknetxvJxrJ...
gQIhAO+IWb9fPKAqKrl9qKnXWIK3oHuzxfupDrAo0jt/6il5AiEA6To+...
t3GYo61qZ6KeCsnOb0Ro+wi7zkcHP5kCIGPd+W0si95LNlz34yZMvn5h...
Wv9fRafBASQhAiBVKsuTROWrvIRBuN3Ah4cfqSaFUgRsZVLguOO8A/wF...
NYtK7KDGyf2U09OKXi+z8ZdQpyud3I3OvPQq63St
-----END RSA PRIVATE KEY-----
このように秘密鍵(RSA PRIVATE KEY)を作成するように、メー...
$ openssl dgst -sign ./private.txt -sha1 < ./input.file ...
この手順で MIME-Base64 形式のファイルが mime.file に出...
秘密鍵から公開鍵を抽出するには次のような openssl コマン...
$ openssl rsa -in ./private.txt -out public.txt -pubout ...
read RSA key
writing RSA key
作成された公開鍵は cat で確認できます。
$ cat public.txt
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANo5mJu+XfOJIJ65idRWQHQD...
2EiGIkx+E62eHGOrgbWnKdwdlcp6f5KBtH+rEePykgABfb19T8R2kFEC...
-----END PUBLIC KEY-----
この作成された公開鍵の情報を DNS に TXT レコードとして...
なお、署名の正当性を確認するには、openssl では次のコマ...
$ openssl dgst -verify ./public.txt -sha1 -signature ./m...
Verified OK
このように "Verified OK"=認証 OK と表示されました。
** 3-2. DNS 上の TXT レコードとはどんなものか? [#f5d3261e]
まず、認証を行う件ですが、必ず 512, 768, 1024, 1536, 20...
テキストレコードは次のような形式です。
brisbane._domainkey IN TXT "g=; k=rsa; p=MHww ... IDAQAB"
"(ダブルコーテーション)の中の記号(タグ)には、次のような...
- g = キーの暗号強度です。記述は任意であり省略してもあり...
- k = キーの種類です。RSA 認証が標準です。署名は 'rsa'鍵...
- n = メモ欄です。人間が読むことができます。この項目は省...
- p = Base64 文字列としてエンコードされた公開鍵データです...
- t = フラグ(boolean)属性のセットができます。有効な属性は...
なお、TXT レコードは 2048 bit までの暗号強度の鍵を用い...
** 3-3. 鍵の暗号強度 [#f35d4e2c]
どのレベルの暗号強度を用いるかは安全度の高さとコストパ...
- DNS が通信する時に用いる UDP パケットでは、2048 ビット...
- 鍵が大きくなればなるほど、署名の確認に CPU の処理負担と...
- 鍵を頻繁におきかえると、それはそれで面倒になる
- 目的は公開鍵認証方式を用いて正しい送信者か確認ができれ...
結局の所[[ドキュメント:http://www.ietf.org/internet-draft...
** 3-4. 署名とメールヘッダの関係 [#u86a7ff1]
これら署名の情報はメールヘッダ中の【 DomainKey-Signatur...
また、【 DomainKey-Signature: 】はその他のヘッダよりも...
DomainKey-Signature のサンプルはこんな感じです。
DomainKey-Signature: a=rsa-sha1; s=brisbane; d=example.n...
もう少し具体的にしてみると、
DomainKey-Signature: a=rsa-sha1 s=brisbane; d=example.net;
c=simple; q=dns;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ
VoG4ZHRNiYzR;
Gmail.com では次のようなヘッダを返しています。
DomainKey-Signature: a=rsa-sha1; c=nofws;
s=beta; d=gmail.com;
h=received:message-id:date:from:reply-to:to:subject:
mime-version:content-type:content-transfer-encoding;
b=UHWIvAn9.....jw5mJ7H+A
- a = 署名生成時の暗号方式です。暗号方式は "rsa-sha1" で...
- b = Base64 エンコードされた署名データです。この項目も必...
- c = 署名アルゴリズム(正規化)の指定です。"simple" もしく...
- d = メール送信ホストのドメイン名です。この項目も必須で...
- h = 適切な署名かどうか比較するときアルゴリズムが用いる...
- q = 公開鍵を探すための方法(DNS 検索)を指定しなくてはい...
- s = DNS に問い合わせる TXT レコードのタイプです
結局の所、サーバ管理者としては DNS レコードの作成と、Do...
なお、データ正規化に用いるアルゴリズムには simple と no...
** 3-5. DNS 情報の追加を行うには? [#pa9449df]
実際の DNS(bind) のゾーン情報ファイルには以下のような記...
_domainkey IN TXT "t=y; o=-; n=notes; r=emailAddress"
項目はそれぞれ ; セミコロンで区切られます。
タグの意味は次の通りです
- n = 人間が読むことができるメモ欄です。プログラムは無視...
- o = メール送信時のポリシー定義です。 '-' は送信する全メ...
- r = レポート(報告)用メールアドレスです。もし送信時のメ...
- t = boolean フラグです。y はテスト用のフラグです。本物...
なお、認証が失敗したときは "Authenticated-Results:" ヘ...
* 4 実践、DomainKeys DNS 情報の追加[#m7cc92b8]
** 4-1. DNS 上に設定が必要なもの [#l2a4fd05]
DNS に設定が必要なのは「【任意の文字(sタグで定義)】._do...
たとえば s タグが betatest の場合、ドメインは example.j...
実際 gmail の例では dig コマンドは次のような応答を返し...
$ dig beta._domainkey.gmail.com txt
(中略)
;; ANSWER SECTION:
beta._domainkey.gmail.com. 300 IN TXT "t=y\; k...
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/...
X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQc...
LY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQ...
** 4-2. DomainKeys 対応 TXT レコードの作成 [#qf5aebb4]
DomainKeys 対応の TXT レコードを作るためには公開鍵の作...
*** 4-2-1. 秘密鍵の作成 [#me5b20dc]
サーバ内に OpenSSL がセットアップされている事が必須です...
署名は RSA暗号(SHA1) による 1024 bit の鍵を作成すること...
$ mkdir ssl
$ cd ssl
まず作業用にディレクトリを作成します。名前は適当でも良...
手始めに openssl で用いるためのランダムファイルを準備し...
$ openssl md5 ~/* > random.txt
これで random.txt の中にホームディレクトリに含まれるフ...
次に openssl に genrsa オプションをつけ、RSA鍵を作成し...
$ openssl genrsa -rand random.txt -out private.key 1024
8705 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
..................++++++
...............................++++++
e is 65537 (0x10001)
cat で内容を確認します。
$ cat private.key
-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDnvGryYF051/F6PKSgOnfy8nDJc9Jav1bDW7ACQdli...
/2396aeoNk4OpU+yK7kuN4infoT2pn6kGVI6IhoCDmqI42e8R96A3xgg...
iv+kd9gPJUOtID8XyCfoErSwtY3e1vYNMjeCmOKL3bbddO2xLdfi7JLF...
(中略)
74OxW3taChgtQkm5cGvGMAiTIoWWAsGOaTsXJ+32hJco+iu3FuLpZpEC...
MYF+YrjNuwXRAJdy8wshtwJBAORa8K6OrC/gKA0nrtY2dRWP9y1/qGWf...
w0Mjuede7rg9bDfVo93woFAmSWJklpQy5p39BH1MxbSr41M=
-----END RSA PRIVATE KEY-----
"RSA PRIVATE KEY"(RSA秘密鍵)と書かれたファイル内容が表...
*** 4-2-2. 公開鍵の作成 [#ja3dfc09]
公開鍵は次の openssl コマンドを用いて作成します。
$ openssl rsa -in ./private.key -out public.key -pubout ...
read RSA key
writing RSA key
作成された公開鍵は cat で確認できます。
$ cat public.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDnvGryYF051/F6PKSg...
c9Jav1bDW7ACQdliEN/lCTqn/2396aeoNk4OpU+yK7kuN4infoT2pn6k...
DmqI42e8R96A3xggctEu6ftPiv+kd9gPJUOtID8XyCfoErSwtY3e1vYN...
3bbddO2xLdfi7JLFywIDAQAB
-----END PUBLIC KEY-----
ここで表示されたデータを TXT レコードに追加します。
*** 4-2-3. DNS(bind)のゾーン情報ファイルに TXT レコード追...
[[ここでは3-2項を参考に:http://pocketstudio.jp/linux/?M...
----
変なところがあればご指摘下さい……
-秘密鍵を添付するのではなくて、署名をヘッダに加えるのです...
-ご指摘ありがとうございます、なおします -- [[前佛]] &new{...
-どのゾーンにTXTレコードを追加するかわかりません.また,結...
-私が実際に使っているZONE情報ファイルをアップしました。<a...
-こちらの通り設定しているのですが、どうにも自分の方の署名...
-お騒がせしました。結局のところmaster.cfの書き方が悪かっ...
##comment
----
* 5 実際の所 DomainKeys を使うには [#p48c306c]
- SENDMAIL.NET で配布されている sendmail 用 milter フィル...
http://sendmail.net/dk-milter/
* 情報元(リソース) [#q0a328fe]
: Yahoo! Anti-Spam Resource Center - DomainKeys | http://...
: Domain-based Email Authentication Using Public-Keys Adv...
: Preventing SPAM | http://www.poornam.com/articles_spam....
ページ名: