ottieni i componenti xey della chiave pubblica ec usando openssl


12

Sto generando un KeyPair per ECC dalla curva 'secp128r1' usando openssl

I passaggi che ho seguito:

  • prima ho generato una chiave privata usando il comando

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

  • poi ho visualizzato la chiave pubblica corrispondente usando il comando

    openssl ec -in private.pem -text -noout

    che ha mostrato un output come:

    leggere la chiave EC

    Chiave privata: (128 bit)
    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

Voglio esplicitamente i componenti xey dalla chiave pubblica generata qui, per favore qualcuno può suggerire il modo corretto di farlo?
La chiave pubblica sopra è lunga 264 bit, quindi non può prenderla (/ dividerla) come è
Grazie


5
Dupe di security.stackexchange.com/questions/60926/… ; per tools.ietf.org/html/rfc5480#section-2.2 il primo ottetto (04) significa non compresso, seguito da X, Y coordina ciascuno esattamente la dimensione del campo arrotondata ad ottetti, qui 16 ottetti.
dave_thompson_085,

2
@dave_Thompson - Penso che dovresti fornire una risposta. Era una buona domanda e una buona informazione (e sul sito corretto !!!), e dovresti ricevere il beneficio di una buona risposta.
jww

Risposte:


1

Prima di tutto, secp128r1 è obsoleto. Usa le curve che offrono una migliore sicurezza per lo standard di oggi. Vedi le cassette di sicurezza di Daniel J. Bernstein e Tanja Lange.

Una curva ellittica definita su un campo di dimensioni q ed ogni elemento -point- ha due coordinate X e Y . La curva ellittica Secp128r1 ha 2 128 -2 97 -1 dimensioni ℓ, cioè il numero di punti un po 'meno di 2 ^ 128. Ciò significa che abbiamo bisogno di una rappresentazione a 128 bit.

La chiave pubblica, che è anche un punto sulla curva, ha due coordinate, pertanto è necessario memorizzare due 128 bit.

Se osserviamo l'equazione della curva ellittica Y 2 = X 3 + aX + b dove

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

se sappiamo X dall'equazione possiamo trovare Y . Dato che stiamo lavorando in un campo, la Y può avere al massimo due radici quadrate. Y 2 avrà y o -y come radice quadrata. Questa conoscenza può essere utilizzata per comprimere la rappresentazione di un punto e si chiama compressione dei punti . Solo coordinate x e un bit per selezionare y o -y . Ora guarda il punto base (vedi la raccomandazione Certicom )

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

Il primo ottetto determina la struttura

  • 04 significa che non c'è compressione
  • 03significa che c'è una compressione e selezionare y come positivo
  • 02significa che c'è una compressione e selezionare y come negativo

Ora trasforma in parametri di 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

primo ottetto 04significa che non c'è compressione. La prima riga è la coordinata X e la seconda riga è la coordinata Y della chiave pubblica.

Che dire della chiave privata n ? È solo uno scalare -intero- compreso tra 0 <= n <= ℓ

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

Pertanto, il numero sopra - non punto - è la tua chiave privata.

È inoltre possibile utilizzare alcuni strumenti Web per estrarre queste informazioni.

Nota: per favore non esporre la tua chiave privata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.