Получить компоненты x и y открытого ключа ec с помощью openssl
Я генерирую KeyPair для ECC из кривой 'secp128r1', используя openssl
Шаги, за которыми я следовал:
сначала я сгенерировал закрытый ключ с помощью команды
openssl ecparam -genkey -name secp128r1 -noout -out private.pem
Затем я просмотрел соответствующий открытый ключ с помощью команды
openssl ec -in private.pem -text -noout
который показал вывод как:
прочитайте ключ EC
Закрытый ключ: (128 бит)
собств:
00: 9F: БФ: 2b: шд:06:86:3a:a1: BC:7в: 3e: 90:57: 40:
f4: Ьс
паб:
04: 04: се:24:34:d4: CB:f2:58:94:2f:8а:5f:06: D7:
3f: изд:5а:50: эф: FB: сс:b7:49:62:16:62:9e: аа: d5:
30: a8: a5
ASN1 OID: secp128r1
Я хочу явно x и y компоненты из открытого ключа, сгенерированного здесь, пожалуйста, кто-нибудь может предложить правильный способ сделать это?
Вышеуказанный открытый ключ имеет длину 264 бита, поэтому не может принять (/ разделить) его как есть
Спасибо
0 ответов
Прежде всего, secp128r1 устарел. Используйте кривые, которые обеспечивают лучшую безопасность для сегодняшнего стандарта. См. Безопасные кривые Даниэля Бернштейна и Тани Ланге.
Эллиптическая кривая, определенная над полем размера q, и каждый элемент -точка имеет две координаты X и Y. Эллиптическая кривая Secp128r1 имеет размер 2 128 -2 97 -1 ie, т. Е. Число точек чуть меньше 2^128. Это означает, что нам нужно 128-битное представление.
Открытый ключ, который также является точкой на кривой, имеет две координаты, поэтому нам нужно хранить два 128-битных.
Если мы посмотрим на уравнение эллиптической кривой Y 2 = X 3 + aX + b, где
a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
b = E87579C1 1079F43D D824993C 2CEE5E
если мы знаем X из уравнения, мы можем найти Y. Поскольку мы работаем в поле, Y может иметь не более двух квадратных корней. Y 2 будет иметь y или -y в качестве квадратного корня. Эти знания могут быть использованы для сжатия представления точки, и это называется сжатием точки. Просто координату x и один бит, чтобы выбрать y или -y. Теперь посмотрите на базовую точку (см. Рекомендацию Certicom)
base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
= 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83
Первый октет определяет структуру
04
означает, что нет сжатия03
означает, что есть сжатие и выберите у в качестве положительного02
означает, что есть сжатие и выберите у как отрицательный
Теперь перейдите в параметры ОП;
pub: 04: 04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X 5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5 -->Y
первый октет 04
значит нет сжатия. Первая строка - это координата X, а вторая - координата Y вашего открытого ключа.
А как насчет закрытого ключа? Это просто скалярное целое число между 0 <= n <= ℓ
приват: 00:9f:bf:2b:bd:06:86:3a:a1:bc:7c:3e:90:57:40:f4:bc
Поэтому указанный выше номер, а не точка, является вашим личным ключом.
Вы также можете использовать некоторые веб-инструменты для извлечения этой информации.
Примечание: пожалуйста, не раскрывайте свой закрытый ключ.