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