DSA 私鑰格式

DSA 私鑰格式

因此,我使用 puttygen 產生 DSA 私鑰,然後將其匯出為 OpenSSH 格式,以下是我在其上執行 OpenSSL 的 asn1parse 時得到的結果:

    0:d=0  hl=4 l= 443 cons: SEQUENCE
    4:d=1  hl=2 l=   1 prim:  INTEGER           :00
    7:d=1  hl=3 l= 129 prim:  INTEGER           :B9916796B7A3EFFD5CA36368186D0ED
193BE7FDD61CC6851174F3E9781A0C0CEA7473E528372F559A1DB2A7E049A9BEFAE2CAAC55527049
2A0CD55B59A48A53BCADD32181F519EA9E6A98EF8EF59DE314A2E69606C728F2F8DEE722B4C67BA6
8EB8A619B6006804F83740F9C74C38136522E7E83F22920AA39822FBDA0DF4D0B
  139:d=1  hl=2 l=  21 prim:  INTEGER           :D832F5B01F075FEC0F162B91982F34D
B26A0CC29
  162:d=1  hl=3 l= 129 prim:  INTEGER           :9B73F47AEFF8E39584FD10ACF81CCD5
75C96FC5558A5C94B941EF76318D132007ACAE1EA22E95CE0B13FC7875CE4D4ED33BA639CD8C2AC9
C0A0530FB7786F584A62EBAE5985E1C26ED0D0B9FDD5E8DB0142BE182A4E5359307007060C327FEE
C2F8D04EABB37D7B74076EB9BDB4885F627DE85708D5BDBF5177A05721E09A367
  294:d=1  hl=3 l= 128 prim:  INTEGER           :6BD9267D2D1E4546EE05F6CD087F311
93C0EEB13B1E139F5072E900AB2EEF68EEC28BF4D7D6CAE4DEE59005F00BAE07343EE520C217FF6E
7880DC788E4555F78CCB5E89A10CDC71A663DA696C5BC34E296CEB3518D65A79BF00B6D592B1399A
9F0D79AE3F3FB445EE1F2B4B72515F036C8E1D5C7FAD336FD3503874645C5C264
  425:d=1  hl=2 l=  20 prim:  INTEGER           :15295A12325E5F1A6F7243B7BB3BE74
6FE7B76E9

我的問題是......這種格式在哪裡描述?例如,第一個 0 整數值是什麼意思?

我想我可以查看 puttygen 原始碼,但是是否有 RFC 描述這種格式或其他內容?

答案1

私鑰格式不是作為標準化為公鑰格式,因為理想情況下,它們永遠不會發送或接收,因此互通性並不是一個大問題。

但是,可以在幾個地方找到有關該格式的文件。它非常類似於PKCS#1 中所描述的 RSAPrivateKey 結構,通常會在 PKCS#8 容器內攜帶。但是,在 PKCS#8 容器中儲存 DSA 金鑰的正常方法只是儲存私有值x,而不是儲存那裡的整個結構。我猜測這是 OpenSSL 在標準確定之前實施的提議但從未在技術上標準化的 DSAPrivateKey 格式。 OpenSSLdsa手冊頁顯示:

帶有私鑰的 DER 選項使用 ASN.1 SEQUENCE 的 ASN1 DER 編碼形式,其中包含版本(目前為零)、p、q、g、公鑰和私鑰元件的值,分別作為 ASN.1 INTEGER。

我猜 OpenSSH 重用了該格式。PyCrypto 的 DSA 金鑰實作中的註釋強化這個想法;他們將結構稱為“DSAPrivatKey_OpenSSL”,並將其稱為“自訂 OpenSSL/OpenSSH 編碼”。

相關內容