отримати x і y компоненти відкритого ключа ec, використовуючи openssl


12

Я генерую KeyPair для ECC з кривої 'secp128r1' за допомогою openssl

Кроки, які я дотримувався:

  • спочатку я створив приватний ключ за допомогою команди

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • потім я переглянув відповідний відкритий ключ за допомогою команди

    openssl ec -у private.pem -text -noout

    який показав вихід як:

    прочитати ключ ЕС

    Приватний ключ: (128 біт)
    priv:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40:
    f4: bc
    pub:
    04: 04: ce : 24: 34: d4: cb: f2: 58: 94: 2f: 8a: 5f: 06: d7:
    3f: ed: 5a: 50: ef: fb: cc: b7: 49: 62: 16: 62: 9e : aa: d5:
    30: a8: a5

    ASN1 OID: secp128r1

Я хочу, щоб чітко x та y компоненти, створені з відкритого ключа, створеного тут, будь-хто, може запропонувати правильний спосіб зробити це?
Наведений вище відкритий ключ має 264 біт, тому його не можна взяти (/ розділити), як це
дякує


5
Контратипів security.stackexchange.com/questions/60926 / ... ; per tools.ietf.org/html/rfc5480#section-2.2 перший октет (04) означає нестиснений, за яким слідує X, Y координує кожен точно розмір поля, округлений до октетів, тут 16 октетів.
dave_thompson_085

2
@dave_Thompson - я думаю, ви повинні надати відповідь. Це було гарне запитання та хороша інформація (і на правильному сайті !!!), і ви повинні отримати користь від хорошої відповіді.
jww

Відповіді:


1

Перш за все, secp128r1 застарів. Використовуйте криві, які забезпечують кращу безпеку для сьогоднішнього стандарту. Перегляньте безпечні накази Даніеля Дж. Бернштейна та Танджі Ланге.

Еліптична крива , визначена над полем розміру ц , і кожен елемент -point- має дві координати X і Y . Еліптична крива Secp128r1 має 2 128 -2 97 -1 розмір ℓ, тобто кількість точок трохи менше 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означає, що відбувається стиснення, і виберіть y як позитивне
  • 02означає, що відбувається стиснення, і виберіть y як негативний

Тепер перетворимо на параметри ОП;

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 вашого відкритого ключа.

Що з приватним ключем n ? Це просто скалярний-цілий число- між 0 <= n <= ℓ

priv: 00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40: f4: bc

Тому вказане вище число - не крапка - це ваш приватний ключ.

Ви також можете використовувати деякі веб-інструменти для отримання цієї інформації.

Примітка. Будь ласка, не виставляйте приватний ключ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.