Задний план
Я пытаюсь понять, как содержимое PEM отформатировано для «Закрытого ключа EC», например. следующий закрытый ключ
----- НАЧАЛО ПАРАМЕТРОВ EC-----
BgUrgQQAIw==
-----КОНЕЦ ПАРАМЕТРОВ EC-----
-----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ EC-----
MIHcAgeEBBEIAavpiUck1lQc01A6FH1SE1XSwW4C+i354tOQyPjioSnq5lzc9YQXX
YAIiC6hiMhARzBxe2vmYBECEENlmCG0jNymgBwYFK4EEACOhgYkDgYYABAEyMQ/2
NkU0LHTBhpsbeaFklNSXUeG2znLuFvcb0hvc29R5ydz8/dpDOhhEtT3+SRiYOMBS
f5wQRRWyf872XFtxhgGp6MFrfHL0c2ofvYIfxLJPXSnq+GCqOKi83GwKITfkkd9N
iwfW7YlKbAQPSoPcCoPG+cNCMLs3FLN/6fD6K99R/w==
-----КОНЕЦ ЗАКРЫТОГО КЛЮЧА EC-----
который был создан с помощью следующей команды openssl на случай, если кому-то захочется увидеть
openssl ecparam -out ecc_private_key.key -name secp521r1 -genkey
Недавно я понял, что содержимое между -----XXX EC ЧАСТНЫЙ КЛЮЧ-----
содержит больше, чем просто закрытый ключ, и не может использоваться как параметр "D" в уравнении эллиптической кривой. Итак, используя следующую команду, я смог найти отдельные элементы, также указанные ниже;
$ openssl ec -in ecc_private_key.key -noout -text
прочитать ключ ЕС
Закрытый ключ: (521 бит)
приват:
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:6д:23:37:29
паб:
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
КРИВАЯ NIST: P-521
Вопрос:
Я хотел бы знать, как openssl может декодировать содержимое Base64 и извлекать из него закрытый и открытый ключи.
В настоящее время я имею дело с приложением, в котором нет встроенных возможностей PemReader, поэтому я хотел бы написать свою собственную реализацию PemReader, чтобы я мог декодировать эту информацию в своем приложении (пока только ключи EC)
PS: я уже прошел RFC5915 в соответствии с этим закрытый ключ должен начинаться с 1 (версия), но все ключи, которые я генерирую с помощью openssl, всегда начинаются с 0x30. Так что я что-то упускаю, конечно