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?
