Obtener componentes xey de clave pública ec usando openssl


12

Estoy generando un KeyPair para ECC a partir de la curva 'secp128r1' usando openssl

Pasos que seguí:

  • primero generé una clave privada usando el comando

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

  • entonces vi la clave pública correspondiente usando el comando

    openssl ec -in private.pem -text -noout

    que mostró una salida como:

    leer clave EC

    Private-Key: (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

Quiero explícitamente los componentes x e y de la clave pública generada aquí, ¿alguien puede sugerir la forma correcta de hacerlo?
La clave pública anterior tiene 264 bits de longitud, por lo tanto, no se puede tomar (/ dividir) como es
Gracias


55
Dupe de security.stackexchange.com/questions/60926/… ; por tools.ietf.org/html/rfc5480#section-2.2 el primer octeto (04) significa descomprimido, seguido de X, Y coordina cada uno exactamente el tamaño del campo redondeado a octetos, aquí 16 octetos.
dave_thompson_085

2
@dave_Thompson - Creo que deberías dar una respuesta. Fue una buena pregunta y una buena información (¡y en el sitio correcto!), Y debería recibir el beneficio de una buena respuesta.
jww

Respuestas:


1

En primer lugar, secp128r1 está desactualizado. Utilice curvas que brinden una mayor seguridad para el estándar actual Ver safecurves de Daniel J. Bernstein y Tanja Lange.

Una curva elíptica definida sobre un campo de tamaño q y cada elemento -point- tiene dos coordenadas X y Y . La curva elíptica Secp128r1 tiene 2 128 -2 97 -1 tamaño ℓ, es decir, número de puntos un poco menos de 2 ^ 128. Esto significa que necesitamos una representación de 128 bits.

La clave pública, que también es un punto en la curva, tiene dos coordenadas, por lo tanto, necesitamos almacenar dos de 128 bits.

Si miramos la ecuación de la curva elíptica Y 2 = X 3 + aX + b donde

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

si sabemos X de la ecuación podemos encontrar Y . Como estamos trabajando en un campo, la Y puede tener como máximo dos raíces cuadradas. Y 2 tendrá y o -y como la raíz cuadrada. Este conocimiento se puede utilizar para comprimir la representación de un punto y se denomina compresión de punto . Simplemente coordenada x y un bit para seleccionar y o -y . Ahora mire el punto base (vea la recomendación de Certicom )

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

El primer octeto determina la estructura.

  • 04 significa que no hay compresión
  • 03significa que hay una compresión y seleccione y como positivo
  • 02significa que hay una compresión y selecciona y como negativo

Ahora conviértase en los parámetros de 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

primer octeto 04significa que no hay compresión. La primera línea es la coordenada X y la segunda línea es la coordenada Y de su clave pública.

¿Qué pasa con la clave privada n ? Es solo un escalar -integer- entre 0 <= n <= ℓ

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

Por lo tanto, el número anterior, no el punto, es su clave privada.

También puede usar algunas herramientas web para extraer esta información.

Nota: no exponga su clave privada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.