dapatkan komponen kunci publik x dan y menggunakan openssl

12

Saya membuat KeyPair untuk ECC dari kurva 'secp128r1' menggunakan openssl

Langkah-langkah yang saya ikuti:

  • pertama saya membuat kunci pribadi menggunakan perintah

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

  • lalu saya melihat kunci publik yang sesuai menggunakan perintah

    openssl ec -in private.pem -text -tidak

    yang menunjukkan output sebagai:

    baca kunci EC

    Kunci Pribadi: (128 bit)
    priv:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3c: 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: 9ee : aa: d5:
    30: a8: a5

    ASN1 OID: secp128r1

Saya ingin komponen x dan y secara eksplisit dari kunci publik yang dihasilkan di sini, dapatkah ada yang menyarankan cara yang benar untuk melakukan ini?
Kunci publik di atas adalah panjang 264 bit, karenanya tidak dapat mengambil (/ membaginya) seperti
Terima kasih

Dhruv Agarwal
sumber
5
Dupe security.stackexchange.com/questions/60926/… ; per tools.ietf.org/html/rfc5480#section-2.2 oktet pertama (04) berarti tidak terkompresi, yang diikuti oleh X, Y mengoordinasikan masing-masing persis ukuran bidang dibulatkan menjadi oktet, di sini 16 oktet.
dave_thompson_085
2
@dave_Thompson - Saya pikir Anda harus memberikan jawaban. Itu pertanyaan yang bagus dan informasi yang baik (dan di situs yang benar !!!), dan Anda harus menerima manfaat dari jawaban yang bagus.
jww

Jawaban:

1

Pertama-tama, secp128r1 sudah usang. Gunakan kurva yang memberikan keamanan yang lebih baik untuk standar saat ini. Lihat safecurves oleh Daniel J. Bernstein dan Tanja Lange.

Sebuah Elliptic Curve didefinisikan lebih dari satu bidang ukuran q dan setiap elemen -point- memiliki dua koordinat X dan Y . The Elliptic Curve Secp128r1 memiliki 2 128 -2 97 -1 ukuran ℓ, jumlah yaitu titik-titik kecil di bawah 2 ^ 128. Ini berarti bahwa kita memerlukan representasi 128-bit.

Kunci publik yang juga merupakan titik pada kurva memiliki dua koordinat, oleh karena itu, kita perlu menyimpan dua 128-bit.

Jika kita melihat persamaan kurva eliptik Y 2 = X 3 + aX + b di mana

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

jika kita tahu X dari persamaan kita dapat menemukan Y . Karena kita bekerja di lapangan, Y dapat memiliki paling banyak dua akar kuadrat. Y 2 akan memiliki y atau -y sebagai akar kuadrat. Pengetahuan ini dapat digunakan untuk mengompresi representasi suatu titik dan itu disebut kompresi titik . Hanya x koordinat dan satu bit untuk memilih y atau -y . Sekarang lihat titik dasar (lihat rekomendasi Certicom )

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

The oktet pertama menentukan struktur

  • 04 berarti tidak ada kompresi
  • 03berarti ada kompresi dan pilih y sebagai positif
  • 02berarti ada kompresi dan pilih y sebagai negatif

Sekarang berubah menjadi parameter OP;

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

oktet pertama 04berarti tidak ada kompresi. Baris pertama adalah koordinat X dan baris kedua adalah koordinat Y dari kunci publik Anda.

Bagaimana dengan kunci privat n ? Itu hanya skalar -integer- antara 0 <= n <= ℓ

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

Oleh karena itu, nomor di atas - bukan titik - adalah kunci pribadi Anda.

Anda juga dapat menggunakan beberapa alat web untuk mengekstrak informasi ini.

Catatan: tolong jangan biarkan kunci pribadi Anda.

kelalaka
sumber