DNSSEC のこと調べようと思ったら for 文で RSA を decrypto したの巻

今年に入ってレジストリJPRS さんが DNSSEC に対応なさいました (JPドメイン名におけるDNSSEC運用ステートメント(JP DPS)) 。その関係で DNSSEC のこと少しくらいお勉強しないとなぁと思ったわけですが、「要するに RSA で署名しちゃうわけなんでしょ〜」って理解だけだと何なので一応手を動かしてみることにしました。

DNSSEC は、各ゾーン毎で各レコードセットに署名をしてレコード情報の改竄が検知できるようにします (RRSIG レコード)。運用の簡便化の為に公開鍵は 2 つ用意されてます (DNSKEY レコードの ZSK と KSK)。KSK のハッシュなどを上位ドメインに登録してもらうことで「上位ドメインが信じれれば当該ドメインも信じれる」という信頼のチェーンを作ります (DS レコード)。詳しくは、ググってね。

つわけで、ターゲットは www.dnssec.jp だぜ!!

A レコードを引いて RRSIG をゲットしよう

dig で +dnssec を付けると、DNSSEC でお願いというオプション付きで QUERY が投げられるので、お返事に RRSIG という署名のレコードが含まれたものが返ってきます。

$ dig @8.8.8.8 +dnssec +multiline +nocomments +nocmd +nostats +noquestion www.dnssec.jp a
www.dnssec.jp.		60134 IN A 111.89.176.107
www.dnssec.jp.		60134 IN RRSIG A 8 3 86400 20110521100502 (
				20110421100502 168 dnssec.jp.
				JyoYIUF7NJcDvuyAWxHsVVN596rkc68SN+389g1zXPDt
				A07WobZqBhR8QaTTbwqvyb2yviBMQkLmOdpfzWVvBemf
				NYAKONaMN8JadYHhqheWBq2UvtY4sDdhQBz19+NfxoSA
				X5APxSDY92PMiWZxAtp9o08beQdPXjfTFH0eHeE= )

www.dnssec.jp の IP address は A レコードだから 111.89.176.107 らしい。で、次の RRSIG レコードが署名です。この署名はこんな感じのフォーマットになっています (cf. http://www.ietf.org/rfc/rfc4034.txt)

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Type Covered           |  Algorithm    |     Labels    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Original TTL                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Signature Expiration                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Signature Inception                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Key Tag            |                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+         Signer's Name         /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                                                               /
   /                            Signature                          /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

いまの場合 Type Covered = A, Algorithm = 8, Labels = 3 っつー感じで。A は A レコード、8 は RFC5702 を見ると RSA/SHA-256 による署名、3 は www と dnssec と jp の 3 つの 3。で、色々あって Signature のところに base64 encoded な署名が入ってます。

さて、この署名を確認したいのですが

署名の検証には公開鍵が必要です

公開鍵はどこよ、ということで検索すると

$ dig @8.8.8.8 +dnssec +multiline +nocomments +nocmd +nostats +noquestion dnssec.jp dnskey
dnssec.jp.		86400 IN DNSKEY	256 3 8 (
				AwEAAbXdq8xS5JM/A+TZsYC8HzIrm97g2/qSwVCOAVLx
				cx6NWG3Bm5OAfF1TgrOguJ46VuygY0BT4BHmDfZYjwNT
				gEF7Z5xLcAuJyOpckpcCHwR7TznjsJHXTpUT393Ea6cW
				EK0tSZZVMA36JbuIdLf1y5+kf4SAJs/IAudUDWGao0bJ
				) ; key id = 168
dnssec.jp.		86400 IN DNSKEY	257 3 8 (
				AwEAAe0GfS9ZQEOqWyzZtDJp5dRngOOoOyF8TR2DAQwH
				h0B2mSuS1ktv89gIHKs83R7VGOknifvWmQ525UPP4bZS
				3S9G//mZY+VbQ00ckzbytFtMzPFOPPnQVGceYYI8UNF5
				ARBuFx+9EOx6QESoj+VOts08Z7nTeVegxmc+6+EZhOCz
				ziwxY70n5k73W8lBbes7Noo5y4V0fnz0r3KlGC42ABqm
				3kfBBCIAM6niSUaDun70AI8zgObBarb+9pyImdpOTewj
				jKukrzh8hv0qHOgtQxJzuV8Vj02ry+VT3ETszHUnPIZd
				zi5TSnSmYgfMJvy/uUbU49ORgj/vWl+G5Jv+VZc=
				) ; key id = 36700
dnssec.jp.		86400 IN RRSIG DNSKEY 8 2 86400 20110521100502 (
				20110421100502 168 dnssec.jp.
				gYNfw+Bw3Bww0dGcrhqZHstXf5fjcdcduc2acSM3Jf0U
				xXcgO7BRrkoa4v8uRFVTSBp2nGYFfg+M5VuKddf/E3p5
				Zx7/ZM+bgNoEtm2oW7efDzTKLMwb5pxSnKsBjmTFL7or
				IBbJI4rGeqoP999ofainoBWC0F3o6dKQW/VPC/c= )
dnssec.jp.		86400 IN RRSIG DNSKEY 8 2 86400 20110521100502 (
				20110421100502 36700 dnssec.jp.
				vlweHQSlVz2ImqUFViTOpUqHvF9bxE3HS1Ikrvponfwb
				7+5GsPyZF5Xhgz1INnmCq0KV0ILFExNgcx+cWG7NPzB9
				ofoV4aciVp3a3qdJgctwEryKt7x0WlffR8Dry4TQGASV
				aI4yuug0ZEl4B8jXlBkR7eMFLW5iUKiqaUvlnJ96Gy/j
				RohNxJSxjeWRnkzu55RKtsz6eeWSfJgR0q18InMxfjRe
				ft/zfq6L/JSUl6V9Tgl/CvEMlHRZw1iPJ0vafRMXTA/w
				gzpzN/FEMBfG+4wBezb64Hb6ooURtQ3j5jYPrAIvAgcP
				lE5YbysEX9XyA58M4ANJLAvbK5ajlIhiJQ== )

DNSKEY が 2 つやってきた! これのフォーマットは

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Flags            |    Protocol   |   Algorithm   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                                                               /
   /                            Public Key                         /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

1 つめの DNSKEY は Flasg = 257 でこれは KSK、Protocol = 3 ってのは決め打ちらしく、Algorithm = 8 = RSA/SHA-256 による署名でした。Flags は bit 7 と bit 15 しか使ってなくてその他のとこは 0 を入れるらしく、257 ってのは 2 進で 0000000100000001 ですが、1 つめの 1 は DNSKEY が zone key であることを表していて owner name が zone name だとか、2 つめの 1 は ”Secure Entry Point”、で、つまり KSK のことらしく。256 の方が ZSK になり、www.dnssec.jp の RRSIG はこの ZSK の秘密鍵による署名です。

その後に DNSSKEY に対する RRSIG も並んでますが、2 つめの方が長いのは 2 つめが KSK による署名なので、鍵長が長くて署名も長くなっています。

で、ちょっと気になる公開鍵、開いてみると、こりゃ RSA 公開鍵だったわけですが

$ python
Python 2.6.5 (r265:79063, Apr 26 2010, 00:40:59) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> zsk_pubkey = 'AwEAAbXdq8xS5JM/A+TZsYC8HzIrm97g2/qSwVCOAVLxcx6NWG3Bm5OAfF1TgrOguJ46VuygY0BT4BHmDfZYjwNTgEF7Z5xLcAuJyOpckpcCHwR7TznjsJHXTpUT393Ea6cWEK0tSZZVMA36JbuIdLf1y5+kf4SAJs/IAudUDWGao0bJ'.decode('base64')
>>> zsk_pubkey[:1], zsk_pubkey[1:4], zsk_pubkey[4:]
('\x03', '\x01\x00\x01', '\xb5\xdd\xab\xccR\xe4\x93?\x03\xe4\xd9\xb1\x80\xbc\x1f2+\x9b\xde\xe0\xdb\xfa\x92\xc1P\x8e\x01R\xf1s\x1e\x8dXm\xc1\x9b\x93\x80|]S\x82\xb3\xa0\xb8\x9e:V\xec\xa0c@S\xe0\x11\xe6\r\xf6X\x8f\x03S\x80A{g\x9cKp\x0b\x89\xc8\xea\\\x92\x97\x02\x1f\x04{O9\xe3\xb0\x91\xd7N\x95\x13\xdf\xdd\xc4k\xa7\x16\x10\xad-I\x96U0\r\xfa%\xbb\x88t\xb7\xf5\xcb\x9f\xa4\x7f\x84\x80&\xcf\xc8\x02\xe7T\ra\x9a\xa3F\xc9')

最初の 3 は public exponent の長さ、次の \x01\x00\x01 は 65537 なので public exponent, で残りの部分が modulus になってます。

RSA/SHA256 くらい for 文で開いてやんよ

とりあえず public expornet と modulus を数字にしましょう。

>>> def bin2int(binary):
...     result = 0
...     for b in binary:
...         result = result * 256 + ord(b)
...     
...     return result
... 
>>> length, e, n = [bin2int(x) for x in zsk_pubkey[:1], zsk_pubkey[1:4], zsk_pubkey[4:]]
>>> length, e, n
(3, 65537, 127710579967269305433484302104651626342597361464555707819504270842207023962918346940411327251471790299176335027847946204129518106049518212876686262928543125168118556532817042045416941377919117399841795932994110220521093987816918895140985510348788901287952530303542352843423128766705044801888052040612553377481L)

あと、RRSIG も数字にしましょう。

>>> rrsig = 'JyoYIUF7NJcDvuyAWxHsVVN596rkc68SN+389g1zXPDtA07WobZqBhR8QaTTbwqvyb2yviBMQkLmOdpfzWVvBemfNYAKONaMN8JadYHhqheWBq2UvtY4sDdhQBz19+NfxoSAX5APxSDY92PMiWZxAtp9o08beQdPXjfTFH0eHeE='.decode('base64')
>>> C = bin2int(rrsig)
>>> C
27502198510876187980465646157818280059986194540212834161629785109789487749362620691392486698569546589044408517971777221446518536156499105348803047348649520000398226838143781780895855727441904337163081587462315113018339613338150106413764655380583401237547873767573696623557473305367383333455499160337543732705L

で、C を e 乗して n で余りとったら復号されたことになります。M としましょう。

>>> M = 1
>>> for i in range(e):
...     M = M * C % n
>>> M
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535421091908069935709303403272242499531581061652193685641598250672262186656786678285261035616226910189150171881006655863169362808L

あ、これを bytes に戻さないとでした。

>>> def int2bin(integer):
...     result = ''
...     q, r = integer, 0
...     while q != 0:
...         q, r = integer / 256, integer % 256
...         result = chr(r) + result
...     
...     return result
... 
>>> int2bin(M)
'\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00010\r\x06\t`\x86H\x01e\x03\x04\x02\x01\x05\x00\x04 \x9f\xd7\xcc\x89p\xde\x0c\x87\xf0\xe2]\x99\x16\xbam\x89\x0c\xac*\xdb\x817\xcc\x1f\xa2\x8ft\x9e\xc9\xe6+x'

何じゃこりゃ \xff ばっか、失敗か? というわけではなく、RFC5702 を再度見ると

   署名 = ( 00 | 01 | FF* | 00 | プレフィックス | ハッシュ ) ** e (mod n)
   プレフィックスはASN.1 DER SHA-256のアルゴリズム指定プレフィックスであり、
   PKCS #1 v2.1 [RFC3447]で規定される。

   (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20

というわけで、int2bin が悪くて頭の '\x00' が抜けてますが、'010\r\x06\t`\x86H\x01e\x03\x04\x02\x01\x05\x00\x04 ' がプレフィックスで '\x9f\xd7\xcc\x89p\xde\x0c\x87\xf0\xe2]\x99\x16\xbam\x89\x0c\xac*\xdb\x817\xcc\x1f\xa2\x8ft\x9e\xc9\xe6+x' がハッシュです。

'\x9f\xd7\xcc\x89p\xde\x0c\x87\xf0\xe2]\x99\x16\xbam\x89\x0c\xac*\xdb\x817\xcc\x1f\xa2\x8ft\x9e\xc9\xe6+x'

これ覚えておきましょう。

A と RRSIG からもハッシュを作って確認

さて、RSA/SHA256 ですから、署名から取りだしたハッシュと自分で作ったハッシュの比較をしなくてはいけません。RFC4034 を見るとハッシュを取るべきメッセージが書いてあります。

         署名 = sign(RRSIG_RDATA | RR(1) | RR(2)... )

            "|"は連結(concatenation)を表す。

            RRSIG_RDATAは、RRSIG RDATAフィールドの署名者名フィールドを
               正規形式にし、更に署名フィールドを取り除いた残りの部分を
               ワイヤーフォーマットで表現したもの。

            RR(i) = 所有者名 | タイプ | クラス | TTL | RDATA長 | RDATA

               "所有者名"はRRsetの所有者名のFQDN表記(fully qualified
               owner name)を正規形式(ワイルドカードを含む所有者名の場合、
               ワイルドカードラベルも所有者名に含める)で表現したもの。

               各RRの所有者名はRRSIG RRの所有者名と同じでなければならない
               (MUST)。

               各RRのクラスはRRSIG RRのクラスと同じでなければならない
               (MUST)。

               RRset内の各RRは、RRSIG RRの署名対象フィールドに記載された
               一覧に含まれるRRタイプでなければならない(MUST)。

               RRset内の各RRはRRSIG RRのオリジナルTTLフィールドに記載された
               一覧に含まれるTTLでなければならない。

               各RRのRDATAフィールドに含まれるDNS名は正規形式でなければ
               ならない(MUST)。

               RRsetは正規順序で並べられていなければならない(MUST)。

引用が長い。

先ずは RRSIG_RDATA ですが、これは冒頭で見た RRSIG のフォーマットの Signer's Name までです。もぉ面倒になってきたんで wireshark で dump してきました。'\x00\x01\x08\x03\x00\x01Q\x80M\xd7\x8eNM\xb0\x01N\x00\xa8\x06dnssec\x02jp\x00' になります。分けて見てみると、

署名対象タイプ A '\x00\x01'
アルゴリズム RSA/SHA256 '\x08'
ラベル 3 '\x03'
オリジナルTTL 86400 '\x00\x01\x51\x80'
有効期間終了 20110521100502 '\x4d\xd7\x8e\x4e'
有効期間開始 20110421100502 '\x4d\xb0\x01\x4e'
鍵タグ 168 '\x00\xa8'
署名者名 dnssec.jp '\x06dnssec\x02jp\x00'

一方 RR は 1 つだけです。A レコードになります。

所有者名 www.dnssec.jp '\x03www\x06dnssec\x02jp\x00'
タイプ A '\x00\x01'
クラス IN '\x00\x01'
TTL 8640 '\x00\x01\x51\x80'
RDATA長 4 '\x00\x04'
RDATA 111.89.176.107 '\x6f\x59\xb0\x6b'

で、この 2 つを繋げてハッシュを作ってみると、

>>> RRSIG_RDATA = '\x00\x01' + '\x08' + '\x03' + '\x00\x01\x51\x80' + '\x4d\xd7\x8e\x4e' + '\x4d\xb0\x01\x4e' + '\x00\xa8' + '\x06dnssec\x02jp\x00'
>>> RR_1 = '\x03www\x06dnssec\x02jp\x00' + '\x00\x01' + '\x00\x01' + '\x00\x01\x51\x80' + '\x00\x04' + '\x6f\x59\xb0\x6b'
>>> import hashlib
>>> hashlib.sha256(RRSIG_RDATA + RR_1).digest()
'\x9f\xd7\xcc\x89p\xde\x0c\x87\xf0\xe2]\x99\x16\xbam\x89\x0c\xac*\xdb\x817\xcc\x1f\xa2\x8ft\x9e\xc9\xe6+x'

やたー、同じになったよおかーさーん。

というわけで、署名が確認できました。

でも、この鍵信じていいわけ?

ZSK 信じていいの? ということで DNSKEY の RRSIG を KSK で調べれば良いわけです。これは同じ手順。じゃぁ KSK 信じていいの? その確認の為には上位ゾーンの DNS サーバから dnssec.jp の DS (Delegation Signer) レコードを取ってきて確認する必要があります。

$ dig @b.dns.jp +dnssec +multiline +nocomments +nocmd +nostats +noquestion dnssec.jp ds
dnssec.jp.		86400 IN DS 36700 8 1 (
				138E1DDBFA95582C029D1B31DBEED3F4A5DA18EF )
dnssec.jp.		86400 IN DS 36700 8 2 (
				718F289D99890FE8CD385CECB078B1B845DDD79337A2
				D5933FE2A8A4BFA8A190 )
dnssec.jp.		86400 IN RRSIG DS 8 2 86400 20110516174503 (
				20110416174503 57894 jp.
				aO60mQfYGOfM24rPClQ5NM0+3FRtaIrlUnkj+MHvGOuz
				kKqxuqw/lype51YkO+9EGTKUwSV8DY5TnV+F5vllvhwF
				DfCfx9us3ScXpE+WFbC2vqxPaWP/PJvb7/5V2CrPxkct
				mQYD2slZjFMcHvwpLlcSuiUlgmWZgSlWOVy4e0M= )

DS レコードが 2 つありますが、1 つめが SHA1、2 つめが SHA256 ってのが、それぞれのレコードの 8 の次の数字で分かります。レコードはハッシュが 16 進の数字になって表示されてます。で、何のハッシュかというと

     ダイジェスト = ダイジェストアルゴリズム(DNSKEY所有者名 | DNSKEY RDATA);

      "|"は連結(concatenation)を表す。

     DNSKEY RDATA = フラグ | プロトコル | アルゴリズム | 公開鍵

RFC4034 に書いてあるんで実際調べてみます。

>>> ksk = 'AwEAAe0GfS9ZQEOqWyzZtDJp5dRngOOoOyF8TR2DAQwHh0B2mSuS1ktv89gIHKs83R7VGOknifvWmQ525UPP4bZS3S9G//mZY+VbQ00ckzbytFtMzPFOPPnQVGceYYI8UNF5ARBuFx+9EOx6QESoj+VOts08Z7nTeVegxmc+6+EZhOCzziwxY70n5k73W8lBbes7Noo5y4V0fnz0r3KlGC42ABqm3kfBBCIAM6niSUaDun70AI8zgObBarb+9pyImdpOTewjjKukrzh8hv0qHOgtQxJzuV8Vj02ry+VT3ETszHUnPIZdzi5TSnSmYgfMJvy/uUbU49ORgj/vWl+G5Jv+VZc='.decode('base64')
>>> hashlib.sha256('\x06dnssec\x02jp\x00' + '\x01\x01' + '\x03' + '\x08' + ksk).digest()
'q\x8f(\x9d\x99\x89\x0f\xe8\xcd8\\\xec\xb0x\xb1\xb8E\xdd\xd7\x937\xa2\xd5\x93?\xe2\xa8\xa4\xbf\xa8\xa1\x90'
>>> int2bin(int('718F289D99890FE8CD385CECB078B1B845DDD79337A2D5933FE2A8A4BFA8A190', 16))
'q\x8f(\x9d\x99\x89\x0f\xe8\xcd8\\\xec\xb0x\xb1\xb8E\xdd\xd7\x937\xa2\xd5\x93?\xe2\xa8\xa4\xbf\xa8\xa1\x90'

一致しました。sha256 でやったけど一応 sha1 も。

>>> hashlib.sha1('\x06dnssec\x02jp\x00' + '\x01\x01' + '\x03' + '\x08' + ksk).digest()
'\x13\x8e\x1d\xdb\xfa\x95X,\x02\x9d\x1b1\xdb\xee\xd3\xf4\xa5\xda\x18\xef'
>>> int2bin(int('138E1DDBFA95582C029D1B31DBEED3F4A5DA18EF', 16))
'\x13\x8e\x1d\xdb\xfa\x95X,\x02\x9d\x1b1\xdb\xee\xd3\xf4\xa5\xda\x18\xef'

おぉぉ

というわけで、dnssec.jp の KSK はちゃんと jp の DNS サーバに登録されてることが分かりました。

長いし、もぉ終わり?

まだです。

dnssec.jp の DS は調べましたが、これが信じられるかどうかはまた jp の ZSK で RRSIG を検証し、jp の ZSK が正しいか調べる為には jp の DS を調べ、と辿っていきます。最終的に root ドメインの DS を調べる必要があるわけですが、あれ、root ドメインの上位ドメインって?

そうなんです、これ以上は DNS 辿れないので 技術検証WG « DNSSECジャパン にある DNSSECを利用するリゾルバーのためのトラストアンカーの設定方法について 第2版 を読んで root ドメインの鍵が信頼に足るか否かを調べる必要があります。鍵自体は

$ dig @a.root-servers.net +dnssec +multiline +nocomments +nocmd +nostats +noquestion . dnskey
.			172800 IN DNSKEY 256 3 8 (
				AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf
				UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE
				g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V
				EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt
				) ; key id = 34525
.			172800 IN DNSKEY 257 3 8 (
				AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
				bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
				/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
				JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
				oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
				LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
				Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
				LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
				) ; key id = 19036
.			172800 IN RRSIG	DNSKEY 8 0 172800 20110505235959 (
				20110421000000 19036 .
				FnTbWqeNyD5oDuG7bv6RwjlfG/ro9yLuXGmGKnEzr6Uk
				BM0W6zMP4rUu7a+e9CEz/k3wJIIG2ZvUuOxglImPotbh
				sz+p5kViovDmtjleO+A5hjJLtABUI0UF+D+SwYh636eO
				EROSqnjVvfXF3vCXw6JmMR3aw7Byz27QkVhIjKZJkr7G
				J7cjJ2V3nABIyINfZcsngrBg1MFI/+Lh/LvJnez0Rjkz
				bCIvBQuSZPG1SEAISni6DFsZhiuPLGZRsmsv+gnTS0c5
				KFa4uPsXa3imhlph0eSTQSPMa8UOIDl1GXrm+kdmrIqQ
				irfJMmixTv+2UiK4zZMucp3s7JLkAfJ5uQ== )

で直ぐ出るんですけどねぇ。

公開鍵の信頼の連鎖ってのは、そのスタートをどう信じるかっつーのが中々難しいです。