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.

Con las actualizaciones de z17®, las siguientes mejoras de rendimiento para HMAC están disponibles en las plataformas z/OS®.
  • 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.

Nota: Si su aplicación contiene referencias codificadas a un nombre de proveedor en lugar de utilizar la lista de proveedores y los mecanismos de conmutación por error de proveedores, es posible que los cambios en el archivo java.security no afecten a su aplicación.

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.

Tabla 1. Algoritmos admitidos por el OpenJCEPlus proveedor
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

La siguiente tabla enumera las curvas elípticas que implementa el proveedor de OpenJCEPlus, su identificador de objeto y cualquier nombre o alias adicional que se utilice para referirse a ellas. Todas las cuerdas que aparecen en una fila se refieren a la misma curva. Por ejemplo, las cadenas 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 ".
Tabla 2. Curvas elípticas implementadas por OpenJCEPlus
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.