OpenJCEPlus proveedor
El proveedor criptográfico OpenJCEPlus es una implementación de las API Java™ Cryptography Extensions (JCE), que incluyen, por ejemplo: cifrados, firmas, resúmenes de mensajes, MAC y HMAC, generación segura de números aleatorios y generación de claves. En la versión 8 del SDK, este proveedor de seguridad se conocía como el proveedor IBMJCEPlus.
El proveedor de OpenJCEPlus utiliza interfaces nativas para el hardware de IBM Z®, ofreciendo algoritmos criptográficos acelerados por hardware cuando sea compatible.
- z17 añade la extensión de seguridad de mensajes 11
- A través del OpenJCEPlus java utiliza los nuevos códigos de función KMAC-HMAC-SHA disponibles para mejorar el rendimiento del resumen de mensajes
Habilitar el proveedor de OpenJCEPlus
El proveedor de seguridad OpenJCEPlus está activado por defecto debido a su posición en el archivo JAVA_HOME/conf/security/java.security . Si, en su lugar, desea utilizar un proveedor diferente como predeterminado, mueva ese proveedor delante del proveedor de OpenJCEPlus en este archivo.
Para el correcto funcionamiento del proveedor de seguridad OpenJCEPlus, instale e inicialice la función de hardware Central Processor Assist for Cryptographic Function (CPACF) y configure los archivos de números aleatorios. CPACF proporciona aceleración de hardware para varias operaciones criptográficas y es utilizado por OpenJCEPlus para mejorar la eficiencia del procesamiento criptográfico descargando tareas de la CPU principal. Asegurarse de que CPACF se inicializa correctamente es esencial para que OpenJCEPlus funcione con eficacia y satisfaga las demandas de seguridad y rendimiento de las aplicaciones empresariales. Si CPACF no está instalado o los archivos de números aleatorios no están disponibles, OpenJCEPlus puede encontrar un error java.security.ProviderException: Failed to initialize OpenJCEPlus
provider durante el arranque. Para obtener más información sobre los archivos de números aleatorios, consulte «Archivos de números aleatorios ».
Algoritmos compatibles
La siguiente tabla muestra los algoritmos compatibles. Se prevé que en futuras versiones se incluyan más algoritmos.
| API | Algoritmos compatibles |
|---|---|
| Parámetro del algoritmo | AES, CCM, ChaCha20, ChaCha20-Poly1305, DESede, DH, DSA, EC, GCM, OAEP, PBE, RSASSA-PSS |
| Generador de parámetros de algoritmos | CCM, DH, DSA, EC, GCM |
| Algoritmos de cifrado | AES, AESWrap, AESWrapPad,, ChaCha20, ChaCha20-Poly1305, DESede, PBEWith<digest>And<encryption>, RSA |
| Modos de cifrado | AES admite los siguientes modos: CBC, CCM, CFB8, CFB128, CFB, ECB, GCM, OFB
DESede admite los siguientes modos: CBC, ECB RSA admite los siguientes modos: null, ECB, SSL |
| Algoritmos clave del acuerdo | DH, ECDH, XDH, X25519, X448 |
| Fábrica de llaves | DH, DSA, EC, EdDSA, Ed25519, Ed448, RSA , RSASSA-PSS, XDH, X25519, X448 |
| Generador de claves | AES, ChaCha20, DESede, HmacMD5, HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384, HmacSHA512, HmacSHA3-224, HmacSHA3-256, HmacSHA3-384, HmacSHA3-512, kda-hkdf-with-sha1, kda-hkdf-with-sha224, kda-hkdf-with-sha256, kda-hkdf-with-shasha384, kda-hkdf-with-sha512 |
| Generador de pares de claves | DH, DSA, EC, EdDSA, Ed25519, Ed448, RSA, RSASSA-PSS, XDH, X25519, X448 |
| Código de autenticación de mensajes (MAC) | HmacMD5, HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384, HmacSHA512, HmacSHA3-224, HmacSHA3-256, HmacSHA3-384, HmacSHA3-512 |
| resumen de mensaje | MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-512 |
| Fábrica de llaves secretas | AES, DESede, PBEWith<digest ChaCha20 >And<encryption>, PBKDF2With<digest> |
| Seguro aleatorio | HASHDRBG, SHA256DRBG (predeterminado), SHA512DRBG |
| Algoritmos de firma | EdDSA, Ed25519 , Ed448, NONEwithDSA, NONEwithECDSA, NONEwithRSA, RSASSA-PSS, SHA1withDSA, SHA224withDSA, SHA256withDSA, SHA1withECDSA, SHA224withECDSA, SHA256withECDSA, SHA384withECDSA, SHA512withECDSA, SHA1withRSA, SHA224withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA, SHA3-224withDSA, SHA3-256withDSA, SHA3-384withDSA, SHA3-512withDSA, SHA3-224withECDSA, SHA3-256withECDSA, SHA3-384withECDSA, SHA3-512withECDSA, SHA3-224withRSA, SHA3-256withRSA, SHA3-384withRSA, SHA3-512withRSA |
Curvas elípticas admitidas
secp256r1, 1.2.840.10045.3.1.7, NIST P-256 y X9.62
prime256v1 se refieren a la misma curva. Puede utilizar los nombres de curva para crear especificaciones de parámetros para la generación de parámetros EC con la clase " ECGenParameterSpec ".| Nombre de curva | Identificador de objeto | Nombres adicionales o alias |
|---|---|---|
secp112r1 |
1.3.132.0.6 |
|
secp112r2 |
1.3.132.0.7 |
|
secp128r1 |
1.3.132.0.28 |
|
secp128r2 |
1.3.132.0.29 |
|
secp160k1 |
1.3.132.0.9 |
|
secp160r1 |
1.3.132.0.8 |
|
secp160r2 |
1.3.132.0.30 |
|
secp192k1 |
1.3.132.0.31 |
|
secp192r1 |
1.2.840.10045.3.1.1 |
NIST P-192, X9.62 prime192v1 |
secp224k1 |
1.3.132.0.32 |
|
secp224r1 |
1.3.132.0.33 |
NIST P-224 |
secp256k1 |
1.3.132.0.10 |
|
secp256r1 |
1.2.840.10045.3.1.7 |
NIST P-256, X9.62 prime256v1 |
secp384r1 |
1.3.132.0.34 |
NIST P-384 |
secp521r1 |
1.3.132.0.35 |
NIST P-521 |
X9.62 prime192v2 |
1.2.840.10045.3.1.2 |
|
X9.62 prime192v3 |
1.2.840.10045.3.1.3 |
|
X9.62 prime239v1 |
1.2.840.10045.3.1.4 |
|
X9.62 prime239v2 |
1.2.840.10045.3.1.5 |
|
X9.62 prime239v3 |
1.2.840.10045.3.1.6 |
|
brainpoolP160r1 |
1.3.36.3.3.2.8.1.1.1 |
|
brainpoolP192r1 |
1.3.36.3.3.2.8.1.1.3 |
|
brainpoolP224r1 |
1.3.36.3.3.2.8.1.1.5 |
|
brainpoolP256r1 |
1.3.36.3.3.2.8.1.1.7 |
|
brainpoolP320r1 |
1.3.36.3.3.2.8.1.1.9 |
|
brainpoolP384r1 |
1.3.36.3.3.2.8.1.1.11 |
|
brainpoolP512r1 |
1.3.36.3.3.2.8.1.1.13 |
Limitaciones conocidas
- AES Key Wrap, basado en el documento NIST SP 800‑38F, no permite especificar un valor de comprobación inicial (ICV) personalizado. La implementación siempre utiliza y devuelve el ICV predeterminado definido por la norma.
- PBEWithMD5AndDES Este algoritmo no es compatible con el cifrado basado en contraseña (PBE).
- Solo se admiten claves RSA de 512, 1024, 2048 y 4096.
- Los exponentes públicos de la clave RSA deben ser 65537 o mayores.
- Las claves privadas RSA deben ser claves CRT (teorema chino del resto). No se admiten claves privadas sin los parámetros CRT. Los pares de claves generados tendrán claves privadas CRT.
- El descifrado RSA con la opción " NoPadding " podría dejar bytes de relleno en el texto descifrado.
- Las curvas elípticas binarias no son compatibles.
- Los proveedores de OpenJCEPlus no tienen sus propias implementaciones de Keystore.En su lugar, las implementaciones de Keystore (JKS, JCEKS, PKCS#12 ) provienen de los proveedores SUN y SunJCE.
- OpenJCEPlus no admite la entrada de datos del usuario para aleatorio para EC y XDH Key Pair Generator, por lo que se omite la entrada de datos del usuario para aleatorio.
- OpenJCEPlus Actualmente no es compatible con todos los algoritmos disponibles en su biblioteca nativa subyacente. Por ejemplo, no es compatible con AES-CTR para el cifrado y descifrado de datos.
Las operaciones de cifrado y descifrado AES- GCM Cipher.update , deben realizarse únicamente para grandes cantidades de datos que necesiten protección, por la siguiente razón. La etiqueta de autenticación solo puede validarse en la operación doFinal (Cipher.doFinal()); si la operación doFinal falla por cualquier motivo, debe descartarse todo el texto sin formato devuelto de una operación update anterior. Por lo tanto, para cantidades de datos más pequeñas, es sensato ejecutar solo operaciones de lectura/escritura ( doFinal ).
No se recomienda el uso de AES- GCM con las API de flujo de cifrado (CipherInputStream y CipherOutputStream) porque estas API no fueron diseñadas para lidiar con las complejidades de AES- GCM, como la que se acaba de describir.
- La firma RSASSA-PSS no admite claves simples RSA.
- RSASSA-PSS admite SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512 como algoritmos de resumen de entrada.
- EdDSA la firma admite dos modos puros de Ed25519 o Ed448.