160

RSA 公開鍵の形式に関するドキュメントはどこにありますか?

によってフォーマットされた RSA 公開鍵OpenSSH:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQB/nAmOjTmezNUDKYvEeIRf2YnwM9/uUG1d0BYsc8/tRtx+RGi7N2lUbp728MXGwdnL9od4cItzky/zVdLZE2cycOa18xBK9cOWmcKS0A8FYBxEQWJ/q9YVUgZbFKfYGaGQxsER+A0w/fX8ALuk78ktP31K69LcQgxIsl7rNzxsoOQKJ/CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr/QbrfB1WT6s3838SEaXfgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN+ffE7iiayQf/2XR+8j4N4bW30DiPtOQLGUrH1y5X/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L

Secure Shell で使用するためにフォーマットされた同じ公開鍵(RFC 4716 - The Secure Shell (SSH) Public Key File Format) :

---- BEGIN SSH2 PUBLIC KEY ----
AAAAB3NzaC1yc2EAAAABJQAAAQB/nAmOjTmezNUDKYvEeIRf2YnwM9/uUG1d0BYs
c8/tRtx+RGi7N2lUbp728MXGwdnL9od4cItzky/zVdLZE2cycOa18xBK9cOWmcKS
0A8FYBxEQWJ/q9YVUgZbFKfYGaGQxsER+A0w/fX8ALuk78ktP31K69LcQgxIsl7r
NzxsoOQKJ/CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr/QbrfB1WT6s3838SEaX
fgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN+ffE7iiayQf/2XR+8j4N4bW30DiPtOQ
LGUrH1y5X/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L
---- END SSH2 PUBLIC KEY ----

RSA 公開鍵としてフォーマットされた同じ公開鍵 ( 5 -であり、スペースがないことに注意してください):

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----

base-64 でエンコードされたデータの 16 進ダンプ:

00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 25 00 00 01 00 7f 9c 09
8e 8d 39 9e cc d5 03 29 8b c4 78 84 5f d9 89 f0 33 df ee 50 6d 5d d0 
16 2c 73 cf ed 46 dc 7e 44 68 bb 37 69 54 6e 9e f6 f0 c5 c6 c1 d9 cb
f6 87 78 70 8b 73 93 2f f3 55 d2 d9 13 67 32 70 e6 b5 f3 10 4a f5 c3 
96 99 c2 92 d0 0f 05 60 1c 44 41 62 7f ab d6 15 52 06 5b 14 a7 d8 19 
a1 90 c6 c1 11 f8 0d 30 fd f5 fc 00 bb a4 ef c9 2d 3f 7d 4a eb d2 dc 
42 0c 48 b2 5e eb 37 3c 6c a0 e4 0a 27 f0 88 c4 e1 8c 33 17 33 61 38 
84 a0 bb d0 85 aa 45 40 cb 37 14 bf 7a 76 27 4a af f4 1b ad f0 75 59 
3e ac df cd fc 48 46 97 7e 06 6f 2d e7 f5 60 1d b1 99 f8 5b 4f d3 97 
14 4d c5 5e f8 76 50 f0 5f 37 e7 df 13 b8 a2 6b 24 1f ff 65 d1 fb c8 
f8 37 86 d6 df 40 e2 3e d3 90 2c 65 2b 1f 5c b9 5f fa e9 35 93 65 59 
6d be 8c 62 31 a9 9b 60 5a 0e e5 4f 2d e6 5f 2e 71 f3 7e 92 8f fe 8b

いくつかの形式があることを読みました:

鍵データは、次の 3 つの一般的な方法でエンコードできます。

  • バイナリ DER エンコード形式。これは、ASN.1 BER エンコードと呼ばれることもあります。
  • PEM または base64 形式。これは DER でエンコードされたファイルと同じデータですが、base64 でエンコードされており、ヘッダーとフッターの行が追加されています。
  • XML 形式。

ASN.1の場合、16 進数は確かにそのようには見えません。

RSA 公開鍵の形式は何ですか?


こちらもご覧ください

4

3 に答える 3

80

区切り文字を から---- BEGIN SSH2 PUBLIC KEY ----に変更するだけ-----BEGIN RSA PUBLIC KEY-----では、ある形式から別の形式に変換するだけで十分であると期待することはできません (これは、例で行ったことです)。

この記事では、両方の形式について適切に説明しています。

で得られるものRSA PUBLIC KEYは のコンテンツに近いですが、ASN.1 構造の開始をオフセットして、それがどのタイプのキーであるかを示すインジケーターもPUBLIC KEYあるという事実を反映する必要があります( RFC 3447を参照)。この回答で説明されているように、とを使用してこれを確認できます。PUBLIC KEYopenssl asn1parse-strparse 19

編集RSA PUBLIC KEY:編集に続いて、次を使用して構造の詳細を取得できますgrep -v -- ----- | tr -d '\n' | base64 -d | openssl asn1parse -inform DER

    0:d=0  hl=4 l= 266 cons: SEQUENCE          
    4:d=1  hl=4 l= 257 prim: INTEGER           :FB1199FF0733F6E805A4FD3B36CA68E94D7B974621162169C71538A539372E27F3F51DF3B08B2E111C2D6BBF9F5887F13A8DB4F1EB6DFE386C92256875212DDD00468785C18A9C96A292B067DDC71DA0D564000B8BFD80FB14C1B56744A3B5C652E8CA0EF0B6FDA64ABA47E3A4E89423C0212C07E39A5703FD467540F874987B209513429A90B09B049703D54D9A1CFE3E207E0E69785969CA5BF547A36BA34D7C6AEFE79F314E07D9F9F2DD27B72983AC14F1466754CD41262516E4A15AB1CFB622E651D3E83FA095DA630BD6D93E97B0C822A5EB4212D428300278CE6BA0CC7490B854581F0FFB4BA3D4236534DE09459942EF115FAA231B15153D67837A63
  265:d=1  hl=2 l=   3 prim: INTEGER           :010001

SSH キー形式をデコードするには、RFC 4253 と組み合わせて、RFC 4251のデータ形式仕様も使用する必要があります。

   The "ssh-rsa" key format has the following specific encoding:

      string    "ssh-rsa"
      mpint     e
      mpint     n

たとえば、最初は00 00 00 07 73 73 68 2d 72 73 61. 最初の 4 バイト ( 00 00 00 07) は長さを示します。残りは文字列そのものです: 73=s, 68=h, ... -> 73 73 68 2d 72 73 61= ssh-rsa、その後に長さ 1 の指数 ( 00 00 00 01 25) と長さ 256 のモジュラス( ) が続き00 00 01 00 7f ...ます。

于 2012-10-05T16:28:59.970 に答える
63

OpenSSL rsa-ssh Keyのデコードされた base64 データから始めて、フォーマットを推測できました。

  • 00 00 00 07: 4 バイト長のプレフィックス (7 バイト)

  • 73 73 68 2d 72 73 61: 「ssh-rsa」

  • 00 00 00 01: 4 バイト長のプレフィックス (1 バイト)

  • 25: RSA 指数 ( e): 25

  • 00 00 01 00: 4 バイト長のプレフィックス (256 バイト)

  • RSA モジュラス ( n):

      7f 9c 09 8e 8d 39 9e cc d5 03 29 8b c4 78 84 5f
      d9 89 f0 33 df ee 50 6d 5d d0 16 2c 73 cf ed 46 
      dc 7e 44 68 bb 37 69 54 6e 9e f6 f0 c5 c6 c1 d9 
      cb f6 87 78 70 8b 73 93 2f f3 55 d2 d9 13 67 32 
      70 e6 b5 f3 10 4a f5 c3 96 99 c2 92 d0 0f 05 60 
      1c 44 41 62 7f ab d6 15 52 06 5b 14 a7 d8 19 a1 
      90 c6 c1 11 f8 0d 30 fd f5 fc 00 bb a4 ef c9 2d 
      3f 7d 4a eb d2 dc 42 0c 48 b2 5e eb 37 3c 6c a0 
      e4 0a 27 f0 88 c4 e1 8c 33 17 33 61 38 84 a0 bb 
      d0 85 aa 45 40 cb 37 14 bf 7a 76 27 4a af f4 1b 
      ad f0 75 59 3e ac df cd fc 48 46 97 7e 06 6f 2d 
      e7 f5 60 1d b1 99 f8 5b 4f d3 97 14 4d c5 5e f8 
      76 50 f0 5f 37 e7 df 13 b8 a2 6b 24 1f ff 65 d1 
      fb c8 f8 37 86 d6 df 40 e2 3e d3 90 2c 65 2b 1f 
      5c b9 5f fa e9 35 93 65 59 6d be 8c 62 31 a9 9b 
      60 5a 0e e5 4f 2d e6 5f 2e 71 f3 7e 92 8f fe 8b
    

私の理論の最も近い検証は、RFC 4253 から見つけることができます。

「ssh-rsa」キー形式には、次の特定のエンコーディングがあります。

  string    "ssh-rsa"
  mpint     e
  mpint     n

ここで、'e' および 'n' パラメーターは署名キー blob を形成します。

しかし、長さの接頭辞については説明していません。


(質問で)見つけたランダムを取得しRSA PUBLIC KEY、base64を16進数にデコードします。

30 82 01 0a 02 82 01 01 00 fb 11 99 ff 07 33 f6 e8 05 a4 fd 3b 36 ca 68 
e9 4d 7b 97 46 21 16 21 69 c7 15 38 a5 39 37 2e 27 f3 f5 1d f3 b0 8b 2e 
11 1c 2d 6b bf 9f 58 87 f1 3a 8d b4 f1 eb 6d fe 38 6c 92 25 68 75 21 2d 
dd 00 46 87 85 c1 8a 9c 96 a2 92 b0 67 dd c7 1d a0 d5 64 00 0b 8b fd 80 
fb 14 c1 b5 67 44 a3 b5 c6 52 e8 ca 0e f0 b6 fd a6 4a ba 47 e3 a4 e8 94 
23 c0 21 2c 07 e3 9a 57 03 fd 46 75 40 f8 74 98 7b 20 95 13 42 9a 90 b0 
9b 04 97 03 d5 4d 9a 1c fe 3e 20 7e 0e 69 78 59 69 ca 5b f5 47 a3 6b a3 
4d 7c 6a ef e7 9f 31 4e 07 d9 f9 f2 dd 27 b7 29 83 ac 14 f1 46 67 54 cd 
41 26 25 16 e4 a1 5a b1 cf b6 22 e6 51 d3 e8 3f a0 95 da 63 0b d6 d9 3e 
97 b0 c8 22 a5 eb 42 12 d4 28 30 02 78 ce 6b a0 cc 74 90 b8 54 58 1f 0f 
fb 4b a3 d4 23 65 34 de 09 45 99 42 ef 11 5f aa 23 1b 15 15 3d 67 83 7a 
63 02 03 01 00 01

RFC3447 - Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1から:

A.1.1 RSA 公開鍵の構文

RSA 公開鍵は、ASN.1 タイプで表す必要がありますRSAPublicKey

  RSAPublicKey ::= SEQUENCE {
     modulus           INTEGER,  -- n
     publicExponent    INTEGER   -- e
  }

タイプ RSAPublicKey のフィールドには、次の意味があります。

  • モジュラスは RSA モジュラス n です。
  • publicExponent は RSA 公開指数 e です。

Microsoft の優れた (そして唯一の本物の) ASN.1 ドキュメントを使用する:

30 82 01 0a       ;SEQUENCE (0x010A bytes: 266 bytes)
|  02 82 01 01    ;INTEGER  (0x0101 bytes: 257 bytes)
|  |  00          ;leading zero because high-bit, but number is positive
|  |  fb 11 99 ff 07 33 f6 e8 05 a4 fd 3b 36 ca 68 
|  |  e9 4d 7b 97 46 21 16 21 69 c7 15 38 a5 39 37 2e 27 f3 f5 1d f3 b0 8b 2e 
|  |  11 1c 2d 6b bf 9f 58 87 f1 3a 8d b4 f1 eb 6d fe 38 6c 92 25 68 75 21 2d 
|  |  dd 00 46 87 85 c1 8a 9c 96 a2 92 b0 67 dd c7 1d a0 d5 64 00 0b 8b fd 80 
|  |  fb 14 c1 b5 67 44 a3 b5 c6 52 e8 ca 0e f0 b6 fd a6 4a ba 47 e3 a4 e8 94 
|  |  23 c0 21 2c 07 e3 9a 57 03 fd 46 75 40 f8 74 98 7b 20 95 13 42 9a 90 b0 
|  |  9b 04 97 03 d5 4d 9a 1c fe 3e 20 7e 0e 69 78 59 69 ca 5b f5 47 a3 6b a3 
|  |  4d 7c 6a ef e7 9f 31 4e 07 d9 f9 f2 dd 27 b7 29 83 ac 14 f1 46 67 54 cd 
|  |  41 26 25 16 e4 a1 5a b1 cf b6 22 e6 51 d3 e8 3f a0 95 da 63 0b d6 d9 3e 
|  |  97 b0 c8 22 a5 eb 42 12 d4 28 30 02 78 ce 6b a0 cc 74 90 b8 54 58 1f 0f 
|  |  fb 4b a3 d4 23 65 34 de 09 45 99 42 ef 11 5f aa 23 1b 15 15 3d 67 83 7a 
|  |  63 
|  02 03          ;INTEGER (3 bytes)
|     01 00 01

公開鍵のモジュラスと指数を与える:

  • モジュラス=0xfb1199ff0733f6e805a4fd3b36ca68...837a63
  • 指数= 65,537

更新別の質問でこの回答を拡張した形式

于 2012-10-05T17:00:03.323 に答える
13

CRL、CRT、CSR、NEW CSR、PRIVATE KEY、PUBLIC KEY、RSA、RSA Public Key Parserの参照デコーダ

RSA 公開鍵

-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----

暗号化された秘密鍵

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-----END RSA PRIVATE KEY-----

CRL

-----BEGIN X509 CRL-----
-----END X509 CRL-----

ブラウン管

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

CSR

-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----

新しいCSR

-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----

PEM

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

PKCS7

-----BEGIN PKCS7-----
-----END PKCS7-----

秘密鍵

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----

DSA キー

-----BEGIN DSA PRIVATE KEY-----
-----END DSA PRIVATE KEY-----

楕円曲線

-----BEGIN EC PRIVATE KEY-----
-----END EC PRIVATE KEY-----

PGP 秘密鍵

-----BEGIN PGP PRIVATE KEY BLOCK-----
-----END PGP PRIVATE KEY BLOCK-----

PGP 公開鍵

-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----
于 2018-01-11T13:49:44.933 に答える