¿Es adecuado el KeyPairGenerator EC estándar de JDK para usar con los algoritmos ECDSA y ECDH?

1

He visto varias referencias en la web para generar la Curva elíptica KeyPair s en Java, y los dos ejemplos más comúnmente referenciados (como es de esperar) usan el proveedor predeterminado JDK y BouncyCastle.

Pero lo que me confunde es que el proveedor predeterminado de JDK admite un solo nombre de algoritmo KeyPairGenerator de EC , mientras que BouncyCastle también lo admite, así como dos nombres de algoritmos distintos adicionales de ECDSA y ECDH :

Ejemplo de proveedor predeterminado de JDK:

KeyPairGenerator g = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

Ejemplo de proveedor de BouncyCastle ECDSA :

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

Ejemplo de proveedor de BouncyCastle ECDH :

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDH", "BC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

En resumen, el proveedor BouncyCastle admite los tres nombres de algoritmos, EC , ECDSA y ECDH , mientras que el proveedor predeterminado de JDK solo admite EC .

¿Por qué la discrepancia? ¿Hay alguna diferencia significativa en las claves resultantes utilizadas en cualquiera de estos enfoques?

    
pregunta Les Hazlewood 02.08.2018 - 19:46
fuente

1 respuesta

1

La documentación de Oracle Java es un poco escasa en el tema, pero parece que con SunJCE, una clave generada como EC puede usarse con ECDH o ECDSA. ( fuente ):

(Nosoyunexpertoencurvaselípticas,pero)Teóricamente,creoquelos parámetros de dominio para ECDH y ECDSA tienen la misma forma, es decir, la ecuación de la curva y un punto base G

(CURVE, G)

( A menudo verá el formulario expandido

(p, a, b, G, n, h)

donde p, a, b es la ecuación de la curva, y n, h son valores derivados de G , proporcionados para guardar el cálculo )

Y los pares de teclas para ambos algoritmos son los mismos, a saber:

priv_key: an integer d in [1, n-1]
pub_key: a point on the curve Q = (x,y) = d*G

Línea inferior: Sí, las claves son intercambiables entre ECDH y ECDSA. Habiendo revisado la documentación de Oracle, soy demasiado perezoso para pasar por Bouncy Castle también, pero supongo que EC , ECDH y ECDSA son todos alias de la misma cosa, puestos allí para evitar confusiones.

    
respondido por el Mike Ounsworth 02.08.2018 - 23:11
fuente

Lea otras preguntas en las etiquetas