Puncte:1

Detalii despre structura conținutului OpenSSL EC PRIVATE KEY

drapel cn

fundal Încerc să înțeleg modul în care conținutul PEM este formatat pentru „EC Private Key”, așa că de ex. următoarea este cheia privată

-----ÎNCEPE PARAMETRI EC-----
BgUrgQQAIw==
-----PARAMETRI EC END-----
-----BEGIN EC PRIVATE KEY-----
MIHcAgEBBEIAavpiUck1lQc01A6FH1SE1XSwW4C+i354tOQyPjioSnq5lzc9YQXX
yAIiC6hiMhARzBxe2vmYBeCEENlmCG0jNymgBwYFK4EEACOhgYkDgYYABAEyMQ/2
NkU0LHTBhpsbeaFklNSXUeG2znLuFvcb0hvc29R5ydz8/dpDOhhEtT3+SRiYOmBS
f5wQRRWyf872XFtxhgGp6MFrfHL0c2ofvYIfxLJPXSnq+GCqOKi83GwKITfkkd9N
iwfW7YlKbAQPSoPcCoPG+cNCMLs3FLN/6fD6K99R/w==
-----END CHEIE PRIVATĂ EC-----

care a fost creat cu următoarea comandă openssl doar în cazul în care cineva ar dori să vadă

openssl ecparam -out ecc_private_key.key -name secp521r1 -genkey

Recent mi-am dat seama că conținutul între ele -----XXX EC CHEIE PRIVATĂ----- conține mai mult decât o cheie privată și nu poate fi folosit un parametru „D” în ecuația curbei eliptice. Deci, folosind următoarea comandă, am putut găsi elemente individuale, de asemenea, prezentate mai jos;

$ openssl ec -in ecc_private_key.key -noout -text
citiți cheia EC
Cheie privată: (521 biți)
priv:
    00:6a:fa:62:51:c9:35:95:07:34:d4:0e:85:1f:54:
    84:d5:74:b0:5b:80:be:8b:7e:78:b4:e4:32:3e:38:
    a8:4a:7a:b9:97:37:3d:61:05:d7:c8:02:22:0b:a8:
    62:32:10:11:cc:1c:5e:da:f9:98:05:e0:84:10:d9:
    66:08:6d:23:37:29
pub:
    04:01:32:31:0f:f6:36:45:34:2c:74:c1:86:9b:1b:
    79:a1:64:94:d4:97:51:e1:b6:ce:72:ee:16:f7:1b:
    d2:1b:dc:db:d4:79:c9:dc:fc:fd:da:43:3a:18:44:
    b5:3d:fe:49:18:98:3a:60:52:7f:9c:10:45:15:b2:
    7f:ce:f6:5c:5b:71:86:01:a9:e8:c1:6b:7c:72:f4:
    73:6a:1f:bd:82:1f:c4:b2:4f:5d:29:ea:f8:60:aa:
    38:a8:bc:dc:6c:0a:21:37:e4:91:df:4d:8b:07:d6:
    ed:89:4a:6c:04:0f:4a:83:dc:0a:83:c6:f9:c3:42:
    30:bb:37:14:b3:7f:e9:f0:fa:2b:df:51:ff
OID ASN1: secp521r1
CURBA NIST: P-521

Întrebare: Aș dori să știu cum openssl poate decoda conținutul Base64 și a extras cheia privată și publică din el. În prezent, am de-a face cu o aplicație care nu are abilități PemReader încorporate, așa că aș dori să scriu propria mea implementare a PemReader, astfel încât să pot decoda aceste informații în aplicația mea (deocamdată doar chei EC)

PS: Am trecut deja prin RFC5915 conform acelui cheie privată ar trebui să înceapă cu 1 (versiune), dar toate cheile pe care le generez cu openssl încep întotdeauna cu 0x30. Așa că îmi scapa ceva desigur

dave_thompson_085 avatar
drapel cn
5915 #3 spune că este ECPrivateKey de tip ASN.1, care este o SECVENȚĂ _conținând_ INTEGER cu valoarea 1 etc. Codificarea DER (sau BER) a unei SECVENȚE începe cu eticheta _for_ SEQUENCE care este 0x30.
Puncte:4
drapel jp

Datele cheii private sunt codificate în ASN.1, așa că trebuie să îl decodați pentru a scoate diferitele câmpuri. openssl asn1parse poate face acest lucru, dar în mod implicit va analiza secțiunea „EC PARAMETERS” a fișierului (deoarece aceasta vine înaintea secțiunii „EC PRIVATE KEY”), așa că trebuie să o eliminați mai întâi. Poți face asta cu sed, și apoi direcționați rezultatul la openssl asn1parse:

$ sed '1,/-----BEGIN EC PRIVATE KEY-----/ d' ecc_private_key.key | openssl asn1parse --dump
    0:d=0 hl=3 l= 220 contra: SECVENȚA          
    3:d=1 hl=2 l= 1 prim: INTEGER :01
    6:d=1 hl=2 l= 66 prim: STRING OCTET      
      0000 - 00 6a fa 62 51 c9 35 95-07 34 d4 0e 85 1f 54 84 .j.bQ.5..4....T.
      0010 - d5 74 b0 5b 80 be 8b 7e-78 b4 e4 32 3e 38 a8 4a .t.[...~x..2>8.J
      0020 - 7a b9 97 37 3d 61 05 d7-c8 02 22 0b a8 62 32 10 z..7=a...."..b2.
      0030 - 11 cc 1c 5e da f9 98 05-e0 84 10 d9 66 08 6d 23 ...^........f.m#
      0040 - 37 29 7)
   74:d=1 hl=2 l= 7 contra: cont [ 0 ]        
   76:d=2 hl=2 l= 5 prim: OBIECTUL :secp521r1
   83:d=1 hl=3 l= 137 contra: cont [ 1 ]        
   86:d=2 hl=3 l= 134 prim: BIT STRING        
      0000 - 00 04 01 32 31 0f f6 36-45 34 2c 74 c1 86 9b 1b ...21..6E4,t....
      0010 - 79 a1 64 94 d4 97 51 e1-b6 ce 72 ee 16 f7 1b d2 y.d...Q...r.....
      0020 - 1b dc db d4 79 c9 dc fc-fd da 43 3a 18 44 b5 3d ....y.....C:.D.=
      0030 - fe 49 18 98 3a 60 52 7f-9c 10 45 15 b2 7f ce f6 .I..:`R...E.....
      0040 - 5c 5b 71 86 01 a9 e8 c1-6b 7c 72 f4 73 6a 1f bd \[q.....k|r.sj..
      0050 - 82 1f c4 b2 4f 5d 29 ea-f8 60 aa 38 a8 bc dc 6c ....O])...`.8...l
      0060 - 0a 21 37 e4 91 df 4d 8b-07 d6 ed 89 4a 6c 04 0f .!7...M.....Jl..
      0070 - 4a 83 dc 0a 83 c6 f9 c3-42 30 bb 37 14 b3 7f e9 J.......B0.7....
      0080 - f0 fa 2b df 51 ff ..+.Q.

BTW, acum ați publicat această cheie privată pe Internet... așa că vă rugăm să nu o utilizați niciodată pentru nimic care doriți să fie de fapt sigur.

Mubashar avatar
drapel cn
multumesc de raspuns trec prin asta. Desigur, aceasta este doar un exemplu de cheie și nu este destinată să fie utilizată în producție.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.