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?