Получить компоненты 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

Поэтому указанный выше номер, а не точка, является вашим личным ключом.

Вы также можете использовать некоторые веб-инструменты для извлечения этой информации.

Примечание: пожалуйста, не раскрывайте свой закрытый ключ.

Другие вопросы по тегам