Генерируйте E C KeyPair из OpenSSL одновременно - PullRequest
1 голос
/ 11 апреля 2020

Я хотел бы создать E C частный ключ publi c и поместить их в один файл. Я могу создать закрытый ключ с помощью:

openssl ecparam -genkey -name prime256v1 -noout -out ec256-key-pair.pem

Но вот так, файл содержит только закрытый ключ. Есть ли параметр, что openSSL создает оба ключа одновременно?

Я хотел бы иметь файл, который выглядит следующим образом:

-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIKMPbg+xGGkig+N+lLzCJ9mJ019yqicZezlbF3IeuQkUoAcGBSuBBAAK
oUQDQgAEor2P+NfmQDuS7mcSVGp6b4AiMXkwlKayJcOLMFjovue1ZsUjMIbw53P3
AF5+G6N0arUq+9tT87a+TTRwxiXYqA==
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE///n/cRdxm49shZtjnrQxnemfJgF
A8UVjNyXtShULmgOJOQh7E9yZfomLkFj0FVkd1M9g7hfL+DO3Utl61kJcg==
-----END PUBLIC KEY-----

1 Ответ

2 голосов
/ 12 апреля 2020

Но, как и в этом случае, файл содержит только закрытый ключ.

Файл ec256-key-pair.pem на самом деле включает в себя как частную, так и общедоступную c части пары ключей. Вы можете убедиться в этом, напечатав его содержимое с помощью команды openssl ec:

$ openssl ec -in ec256-key-pair.pem -noout -text
read EC key
Private-Key: (256 bit)
priv:
    a3:0f:6e:0f:b1:18:69:22:83:e3:7e:94:bc:c2:27:
    d9:89:d3:5f:72:aa:27:19:7b:39:5b:17:72:1e:b9:
    09:14
pub:
    04:a2:bd:8f:f8:d7:e6:40:3b:92:ee:67:12:54:6a:
    7a:6f:80:22:31:79:30:94:a6:b2:25:c3:8b:30:58:
    e8:be:e7:b5:66:c5:23:30:86:f0:e7:73:f7:00:5e:
    7e:1b:a3:74:6a:b5:2a:fb:db:53:f3:b6:be:4d:34:
    70:c6:25:d8:a8
ASN1 OID: secp256k1

Фактически, вы можете увидеть, что оно также содержит идентификатор кривой.

Я бы хотел чтобы получить файл, который выглядит следующим образом:

Если вы все еще хотите это, несмотря на информацию выше, вы можете извлечь три разных части с помощью команды openssl ec. Используйте параметр -param_out для параметров, никакой параметр для закрытого ключа (который фактически включает в себя часть publi c) и -pubout только для части publi c.

$ openssl ec -in ec256-key-pair.pem -param_out > result.txt
$ openssl ec -in ec256-key-pair.pem >> result.txt
$ openssl ec -in ec256-key-pair.pem -pubout >> result.txt

С result.txt будет содержать то, что вы просили. Для всего в одной строке, как вы просили:

$ KEY_PEM=$(openssl ecparam -genkey -name prime256v1 -noout) && for OPTION in -param_out "" -pubout; do openssl ec -in <(echo "${KEY_PEM}") ${OPTION}; done > result.txt

(при условии, что вы используете bash в качестве оболочки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...