Прочетете публичния ключ на 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