Also habe ich Puttygen verwendet, um einen privaten DSA-Schlüssel zu generieren und diesen dann in das OpenSSH-Format exportiert. Folgendes habe ich erhalten, als ich OpenSSLs asn1parse darauf ausgeführt habe:
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
Meine Frage ist... wo wird dieses Format beschrieben? Was bedeutet beispielsweise der erste ganzzahlige Wert 0?
Ich schätze, ich könnte im Puttygen-Quellcode nachsehen, aber gibt es ein RFC, das dieses Format oder so etwas beschreibt?
Antwort1
Private-Key-Formate sind nichtalsals Public-Key-Formate standardisiert, da sie im Idealfall nie gesendet oder empfangen werden – Interoperabilität stellt daher kein so großes Problem dar.
Allerdings gibt es an mehreren Stellen Dokumentationen zu diesem Format. Es ist sehr ähnlich demRSAPrivateKey-Struktur beschrieben in PKCS#1, das normalerweise in einem PKCS#8-Container transportiert wird. Die normale Art, einen DSA-Schlüssel in einem PKCS#8-Container zu speichern, besteht jedoch darin, nur den privaten Wert zu speichern x
, nicht die gesamte Struktur, die Sie dort haben. Ich vermute, dass es sich um ein vorgeschlagenes, aber nie technisch standardisiertes DSAPrivateKey-Format handelt, das OpenSSL implementiert hat, bevor sich die Standards etablierten. Auf der OpenSSL- dsa
Manpage heißt es:
Die DER-Option mit einem privaten Schlüssel verwendet eine ASN1-DER-codierte Form einer ASN.1-SEQUENZ, die aus den Werten der Version (derzeit Null), p, q, g, den öffentlichen und privaten Schlüsselkomponenten jeweils als ASN.1-GANZZAHLEN besteht.
und ich vermute, dass OpenSSH dieses Format wiederverwendet hat.Die Kommentare in PyCryptos DSA-Schlüsselimplementierungbekräftigen diese Idee; dort nennen sie die Struktur „DSAPrivatKey_OpenSSL“ und bezeichnen sie als „die benutzerdefinierte OpenSSL/OpenSSH-Verschlüsselung“.