JCE (Java Cryptography Extension)
Framework para criptografía que forma parte de la distribución estándar de la JVM (máquina virtual de Java). Ofrece un API (application programming interface) que permite:
- generación de claves (claves secretas y pares de claves pública y privada)
- cifrado simétrico (DES, 3DES, IDEA, etc)
- cifrado simétrico (RSA, DSA, Diffie-Hellman, ElGamal…)
- funciones de resumen (MD5 y SHA1 ) y algoritmos MAC (Message Authentication Code)
- acuerdo de claves
Funcionamiento:
Las implementaciones de los algoritmos de cifrado, generación de claves, etc son ofertadas por paquetes externos llamados providers. La distribución básica incluye por defecto el provider «SUN» con implementaciones de los algoritmos más representativos. Otros fabricantes ofrencen providers adicionales que incluyen nuevos algoritmos o implementaciones alternativas de los ya existentes en el provider «SUN». Así es posible dotar al JCE de nuevas funcionalidades sin necesidad de cambiar el API básica y permitir la distribución de algoritmos critpgráficos con limitaciones de exportación.
Para usar las clases y métodos del API JCE las aplicaciones tienen que importar, como mínimo, los siguientes paquetes:
import java.security.*;
import java.security.interfaces.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.interfaces.*;
import javax.crypto.spec.*;
Bouncy Castle Provider
Bouncy Castle es un proyecto de software libre que pretende desarrollar una serie de librerías criptográficas libres y, entre otros, ofrece un provider para el JCE de java. Proporciona:
- Un API de criptografía en Java
- Un proveedor de JCE y JCA. También nos proporciona una implementación de JCE 1.2.1.
- Una librería que permite escribir y leer objetos ASN.1 codificados.
- Generadores de versiones 1 y 3 para certificados X.509, versión 2 de CRLs, y archivos PKCS12.
- Generadores de la versión 2 para los certificados X.509.+
- Generadores / Procesadores para S/MIME y CMS (PKCS7/RFC 3852).
- Generadores / Procesadores para OCSP (RFC 2560).
- Generadores / Procesadores para TSP (RFC 3161).
- Generadores / Procesadores para OpenPGP (RFC 2440).
Descarga y documentación
En la página web del proyecto: www.bouncycastle.org es posible descargar la versión actual del provider Bouncy Castle para distintas versiones de la máquina virtual de Java. También incluye información resumida y el javadoccompleto de la distribución.
Instalación
Para usar las clases de JCA/JCE ofrecidas por Bouce Castle, basta con incluir en el código que lo utilice la sigueinte orden de importación:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
Dentro del código será necesario indicar la carga del provider Bouncy Castle del siguiente modo:
Security.addProvider(new BouncyCastleProvider());
La abrevitura que identifica a este provider es «BC» y deberá indicarse cuando se solicite alguna de las implementaciones de algoritmos que ofrece el provider Bouncy Castle.
Cipher cifrador = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
KeyGenerator keyGen = KeyGenerator.getInstance("DES", "BC");
Esquema basico para realizar y comprobar una firma digital.
Creamos una clave
- KeyPairGenerator.getInstance(«RSA»)
- initialize(1024)
- generateKeyPair()
- Creamos una firma del objeto y la inicializamos
- Cipher.getInstance(«MD5WithRSA»)
- initSign(clave.getPrivate())
- Calculamos la firma apartir del un texto plano y firmamos
- update(textoPlano)
- sign()
- Configuramos la verificación y verificamos la firma
- initVerify(clave.getPublic())
- verify(signature)
Ejemplos de uso
➡ EjemploRSA.java ➡ EjemploHash.java ➡ EjemploGenerarCertificado.java
[…] URL: Librería Bouncy Castle […]