La arquitectura criptográfica de Java, denominada JCA, es la pieza principal de la criptografía de Java y está diseñada en torno a los siguientes principios:
- Independencia de la aplicación. Los programas no necesitan implementar algoritmos criptográficos, sino que los utilizan a través de la plataforma Java, mediante su solicitud a un PSC. Además, se pueden utilizar varios proveedores en la misma aplicación.
- Interoperabilidad. Los diferentes proveedores son compatibles con todas las aplicaciones, esto es, una aplicación concreta no tiene por que estar ligada a un proveedor específico, ni un proveedor estará ligado a una aplicación específica.
- Extensibilidad. La plataforma Java incluye una serie de proveedores integrados que implementan un conjunto básico de servicios de seguridad utilizados ampliamente en la actualidad, pero también permite la instalación de proveedores personalizados que implementan nuevos servicios.
La arquitectura JCA, emplea un modelo basado en el uso de proveedores, de manera que se puede decir que incluye dos tipos de componentes:
- Bibliotecas de clases e interfaces: paquete
java.security
. - Proveedores de servicios criptográficos que proporcionan las implementaciones de diferentes algoritmos criptográficos, como por ejemplo
Sun
.
La extensión criptográfica de Java (JCE), emplea el mismo modelo basado en proveedores que JCA, en este caso está presente mediante el proveedor SunJCE
y proporciona una serie de servicios que permiten complementar los servicios de seguridad de JCA, mediante los paquetes javax.crypto
, javax.crypto.spec
, javax.crypto.interfaces
.
Ya te hemos comentado que a partir de JDK 1.4, la distinción entre JCA y JCE es menos evidente, al ir incluido JCE en le propio JDK, de manera que se habla de estos componentes de manera conjunta. Por tanto, podemos decir que la arquitectura criptográfica de Java incluye los siguientes componentes software:
- Las bibliotecas de clases e interfaces que proporcionan las diferentes funcionalidades de seguridad, como son:
java.security
. Consiste básicamente en clases abstractas e interfaces que proporcionan el manejo de certificados, claves, resúmenes de mensajes y firmas digitales.javax.crypto
. Proporciona las clases e interfaces para realizar operaciones criptográficas como encriptación/desencriptación, generación de claves y acuerdo de claves, así como generación de códigos de autentificación de mensajes (MAC).javax.crypto.spec
. Incluye varias clases de especificación de claves y de parámetros de algoritmos.javax.crypto.interfaces
. presenta las interfaces de las claves empleadas en los algoritmos de tipo Diffie-Hellman (clasesDHKey
,DHPrivateKey
yDHPublicKey
).
- Los proveedores de servicios criptográficos, tales como
Sun
,SunRsaSign
,SunJCE
, que contienen las implementaciones de diferentes algoritmos criptográficos.