Прочитать открытый ключ EC из файла .pem на C

Я создал пару открытого и закрытого ключей EC, используя:

openssl ecparam -name prime256v1 -genkey -noout -out ecprikey.pem
openssl ec -in ecprikey.pem -pubout -out ecpubkey.pem

Я хочу прочитать открытый ключ в массиве байтов на языке C. Как мне это сделать? Только что прочитал из файла? Или OpenSSL что-то предоставляет? Благодарю вас!


person previouslyactualname    schedule 25.07.2014    source источник
comment
Почему вы хотите прочитать ключ? Просто храню это? Используете его для шифрования / подписи?   -  person Stefano Sanfilippo    schedule 26.07.2014
comment
чтобы зашифровать случайное число, которое я генерирую   -  person previouslyactualname    schedule 28.07.2014


Ответы (1)


Я хочу прочитать открытый ключ в байтовый массив на C ...

Что ж, ключ на диске, скорее всего, закодирован в формате PEM. Поскольку это открытый ключ, он, вероятно, имеет пре- и постинкапсулированные границы -----BEGIN PUBLIC KEY----- и -----END PUBLIC KEY-----. Вы можете прочитать это так, используя стандартные библиотечные функции.

Вы также можете прочитать открытый ключ с помощью PEM_read_PUBKEY. Функция возвращает EVP_PKEY*. Я считаю, что вы можете преобразовать EVP_PKEY* в EC_KEY* с помощью:

EC_KEY* ecKey = EVP_PKEY_get1_EC_KEY(pKey);

get1 выше означает, что счетчик ссылок на ключе был увеличен (в отличие от get0). Не забудьте позвонить EC_KEY_free, когда закончите с этим.

Я не уверен, как бы вы прочитали открытый ключ в массиве с EVP_PKEY* или EC_KEY*. Как минимум, есть две части информации: кривая (например, secp256k1) и открытый элемент (точка на кривой, которая состоит из (x,y) координаты). Если названная кривая (т.е. OID) отсутствует (т.е. отсутствует флаг OPENSSL_EC_NAMED_CURVE), тогда у вас есть все параметры домена, такие как p, a, b, G и т. Д. вы должны посмотреть на кодировку ASN.1 / DER. Я думаю, это та самая кладовая, которую ты собираешься получить.

person jww    schedule 26.07.2014
comment
Привет, есть ли образец кода (или не могли бы вы его предоставить) о том, как загрузить открытый ключ, имеющий названную кривую и точку Q? Это то, что у меня есть :) - person FrizzTheSnail; 17.11.2015
comment
@FrizzTheSnail - см. Криптография эллиптических кривых в вики-сайте OpenSSL. - person jww; 17.11.2015
comment
Обновите ссылку для PEM_read_PUBKEY. - person sylvain; 17.05.2021