ASN.1 DER でエンコードされた RSA 公開キーの読み取り
-
16-09-2019 - |
質問
DKIM をより深く理解するためにアプリを作成しています。仕様には、ドメイン TXT レコードから「ASN.1 DER でエンコードされた」公開キーを取得すると記載されています。キーは「s1024._domainkey.yahoo.com」=「MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm」で確認できます。
.net からこのキーを使用するにはどうすればよいですか?私が見た例では、X509Certificate2、または RSAParameters を含む XML ファイルからキーを取得します。
修正:上記のキーを network-tools.com DNS ツールからコピーして貼り付けましたが、これで短縮できたはずです。nslookup を実行すると完全なキーが得られます。
s1024._domainkey.yahoo.com text = "k = rsa;t=y;p = migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdreee0ri4juz+qfiwyui/e9ugsxau2p8ljntdd8v4unn+2fazvge3kl23bzeoulyv4peleb3gfmfm " bk0vtetatl2yr/s3btxhy+1xtj4rkdv7fvxtn56lb4udunwuxk4v5b5b5pdokj+xcwidaqab;n=A 1024 ビット鍵;"
abelenky は BASE64 で正しい軌道に乗っていたということですね。
解決
これは、RSA 公開キーを含む ASN.1 PublicKeyInfo の DER エンコーディングの Base64 エンコーディングです。
翻訳は次のとおりです。
0 30 159: SEQUENCE {
3 30 13: SEQUENCE {
5 06 9: OBJECT IDENTIFIER '1 2 840 113549 1 1 1'
16 05 0: NULL
: }
18 03 141: BIT STRING 0 unused bits, encapsulates {
22 30 137: SEQUENCE {
25 02 129: INTEGER
: 00 EB 11 E7 B4 46 2E 09 BB 3F 90 7E 25 98 BA 2F
: C4 F5 41 92 5D AB BF D8 FF 0B 8E 74 C3 F1 5E 14
: 9E 7F B6 14 06 55 18 4D E4 2F 6D DB CD EA 14 2D
: 8B F8 3D E9 5E 07 78 1F 98 98 83 24 E2 94 DC DB
: 39 2F 82 89 01 45 07 8C 5C 03 79 BB 74 34 FF AC
: 04 AD 15 29 E4 C0 4C BD 98 AF F4 B7 6D 3F F1 87
: 2F B5 C6 D8 F8 46 47 55 ED F5 71 4E 7E 7A 2D BE
: 2E 75 49 F0 BB 12 B8 57 96 F9 3D D3 8A 8F FF 97
: 73
157 02 3: INTEGER 65537
: }
: }
: }
オブジェクト識別子は、次のビット文字列に RSAPublicKey のエンコーディングが含まれていることを示します。INTEGER はモジュラスと公開指数です。
Base64をデコードするには、 Convert.FromBase64String, ただし、.NET には PublicKeyInfo を解析するための機能が組み込まれていないと思います。そのため、BouncyCastle などのサードパーティ ツールを使用する必要があります。
他のヒント
この件に興味がある人には、次のことをお勧めします。 System.Security.Cryptography.X509Certificates.PublicKey これを使用して、DER でエンコードされた公開鍵を読み取ることができます。
この文字列は、ある種の Base64 エンコーディングのように見えます。その文字列を Base-64 から BLOB に変換すると、有効な ASN.1 形式になるはずです。
試してみてください 弾む城 ライブラリは、そのような場合に優れた機能を提供します。