instalar extension como java cryptography jce jca

java - extension - Relación entre JCA, sus proveedores y JCE?



jca java (1)

Pensé que era simple que JCA reemplazara a JCE. Sin embargo, escribir un código de prueba para obtener todos los proveedores en mi sistema mostró que este no es el caso.

Noté lo siguiente:

  1. Algunos algoritmos tienen múltiples proveedores (p. Ej .: MD5withRSA está en SunRsaSign y SunJSSE )
  2. JCA parece tener un type de algoritmo que va más allá de lo que está en JCE

El ítem 1 tiene sentido ya que JCA aparece (para mí) como una biblioteca / matriz de proveedores de JCE para elegir.

El ítem 2 es un poco confuso porque sugiere que JCA no es una matriz exacta de proveedores de JCE "idénticos"; es una especie de abrevadero para cualquier "tipo" de proveedor, JCE interconectado o no.

Entonces, ¿cuál es la relación de trabajo entre JCA, sus proveedores y JCE? ¿Los proveedores también existen en silos independientes o se "construyen" unos a otros / tienen dependencias entre ellos?

Para las personas interesadas en el código y los resultados que dieron lugar a esta pregunta, se enumeran a continuación

import java.security.Provider; import java.security.Security; import java.util.ArrayList; public class ConsoleListJca { public static void main(String[] args) { for (Provider provider : Security.getProviders()) { System.out.println("Provider: " + provider.getName() + " (ver " + provider.getVersion() + ")"); System.out.print(" Algorithms: "); ArrayList<String> algos = new ArrayList<String>(); for (Provider.Service service : provider.getServices()) { algos.add(String.format( "%s (%s)", service.getAlgorithm(), service.getType())); } java.util.Collections.sort(algos); String algorsStr = algos.toString(); // remove [ and ] from ArrayList''s toString() algorsStr = algorsStr.substring(1, algorsStr.length()-1); System.out.println(algorsStr); System.out.println(); } } }

y los resultados (formateados para SO) son

Provider: SUN (ver 1.7) Algorithms: CaseExactJKS (KeyStore), Collection (CertStore), DSA (AlgorithmParameterGenerator), DSA (AlgorithmParameters), DSA (KeyFactory), DSA (KeyPairGenerator), JKS (KeyStore), JavaLoginConfig (Configuration), JavaPolicy (Policy), LDAP (CertStore), MD2 (MessageDigest), MD5 (MessageDigest), NONEwithDSA (Signature), NativePRNG (SecureRandom), PKIX (CertPathBuilder), PKIX (CertPathValidator), SHA (MessageDigest), SHA-256 (MessageDigest), SHA-384 (MessageDigest), SHA-512 (MessageDigest), SHA1PRNG (SecureRandom), SHA1withDSA (Signature), X.509 (CertificateFactory), com.sun.security.IndexedCollection (CertStore) Provider: SunRsaSign (ver 1.7) Algorithms: MD2withRSA (Signature), MD5withRSA (Signature), RSA (KeyFactory), RSA (KeyPairGenerator), SHA1withRSA (Signature), SHA256withRSA (Signature), SHA384withRSA (Signature), SHA512withRSA (Signature) Provider: SunEC (ver 1.7) Algorithms: EC (AlgorithmParameters), EC (KeyFactory), EC (KeyPairGenerator), ECDH (KeyAgreement), NONEwithECDSA (Signature), SHA1withECDSA (Signature), SHA256withECDSA (Signature), SHA384withECDSA (Signature), SHA512withECDSA (Signature) Provider: SunJSSE (ver 1.7) Algorithms: Default (SSLContext), MD2withRSA (Signature), MD5andSHA1withRSA (Signature), MD5withRSA (Signature), NewSunX509 (KeyManagerFactory), PKCS12 (KeyStore), PKIX (TrustManagerFactory), RSA (KeyFactory), RSA (KeyPairGenerator), SHA1withRSA (Signature), SunX509 (KeyManagerFactory), SunX509 (TrustManagerFactory), TLSv1 (SSLContext), TLSv1.1 (SSLContext), TLSv1.2 (SSLContext) Provider: SunJCE (ver 1.7) Algorithms: AES (AlgorithmParameters), AES (Cipher), AES (KeyGenerator), AESWrap (Cipher), ARCFOUR (Cipher), ARCFOUR (KeyGenerator), Blowfish (AlgorithmParameters), Blowfish (Cipher), Blowfish (KeyGenerator), DES (AlgorithmParameters), DES (Cipher), DES (KeyGenerator), DES (SecretKeyFactory), DESede (AlgorithmParameters), DESede (Cipher), DESede (KeyGenerator), DESede (SecretKeyFactory), DESedeWrap (Cipher), DiffieHellman (AlgorithmParameterGenerator), DiffieHellman (AlgorithmParameters), DiffieHellman (KeyAgreement), DiffieHellman (KeyFactory), DiffieHellman (KeyPairGenerator), HmacMD5 (KeyGenerator), HmacMD5 (Mac), HmacPBESHA1 (Mac), HmacSHA1 (KeyGenerator), HmacSHA1 (Mac), HmacSHA256 (KeyGenerator), HmacSHA256 (Mac), HmacSHA384 (KeyGenerator), HmacSHA384 (Mac), HmacSHA512 (KeyGenerator), HmacSHA512 (Mac), JCEKS (KeyStore), OAEP (AlgorithmParameters), PBE (AlgorithmParameters), PBEWithMD5AndDES (AlgorithmParameters), PBEWithMD5AndDES (Cipher), PBEWithMD5AndDES (SecretKeyFactory), PBEWithMD5AndTripleDES (AlgorithmParameters), PBEWithMD5AndTripleDES (Cipher), PBEWithMD5AndTripleDES (SecretKeyFactory), PBEWithSHA1AndDESede (AlgorithmParameters), PBEWithSHA1AndDESede (Cipher), PBEWithSHA1AndDESede (SecretKeyFactory), PBEWithSHA1AndRC2_40 (AlgorithmParameters), PBEWithSHA1AndRC2_40 (Cipher), PBEWithSHA1AndRC2_40 (SecretKeyFactory), PBKDF2WithHmacSHA1 (SecretKeyFactory), RC2 (AlgorithmParameters), RC2 (Cipher), RC2 (KeyGenerator), RSA (Cipher), SslMacMD5 (Mac), SslMacSHA1 (Mac), SunTls12Prf (KeyGenerator), SunTlsKeyMaterial (KeyGenerator), SunTlsMasterSecret (KeyGenerator), SunTlsPrf (KeyGenerator), SunTlsRsaPremasterSecret (KeyGenerator) Provider: SunJGSS (ver 1.7) Algorithms: 1.2.840.113554.1.2.2 (GssApiMechanism), 1.3.6.1.5.5.2 (GssApiMechanism) Provider: SunSASL (ver 1.7) Algorithms: CRAM-MD5 (SaslClientFactory), CRAM-MD5 (SaslServerFactory), DIGEST-MD5 (SaslClientFactory), DIGEST-MD5 (SaslServerFactory), EXTERNAL (SaslClientFactory), GSSAPI (SaslClientFactory), GSSAPI (SaslServerFactory), NTLM (SaslClientFactory), NTLM (SaslServerFactory), PLAIN (SaslClientFactory) Provider: XMLDSig (ver 1.0) Algorithms: DOM (KeyInfoFactory), DOM (XMLSignatureFactory), http://www.w3.org/2000/09/xmldsig#base64 (TransformService), http://www.w3.org/2000/09/xmldsig#enveloped-signature (TransformService), http://www.w3.org/2001/10/xml-exc-c14n# (TransformService), http://www.w3.org/2001/10/xml-exc-c14n#WithComments (TransformService), http://www.w3.org/2002/06/xmldsig-filter2 (TransformService), http://www.w3.org/2006/12/xml-c14n11 (TransformService), http://www.w3.org/2006/12/xml-c14n11#WithComments (TransformService), http://www.w3.org/TR/1999/REC-xpath-19991116 (TransformService), http://www.w3.org/TR/1999/REC-xslt-19991116 (TransformService), http://www.w3.org/TR/2001/REC-xml-c14n-20010315 (TransformService), http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments (TransformService) Provider: SunPCSC (ver 1.7) Algorithms: PC/SC (TerminalFactory) Provider: Apple (ver 1.1) Algorithms: KeychainStore (KeyStore)


La diferencia básica entre JCA y JCE es que JCE es una extensión de JCA, no un reemplazo. El JCA incluye clases como SecureRandom , SecureRandom , KeyFactory , Signature y KeyStore . JCE agrega algunas clases más de criptografía como Cipher , KeyGeneration , Mac y KeyGeneration . La distinción entre JCA y JCE se ha desvanecido en gran medida ya que la JCE ha recibido el tiempo de ejecución estándar desde hace algún tiempo.

JCA/JCE está diseñado para separar la implementación criptográfica de la abstracción. Es una arquitectura basada en proveedores donde puede conectar un proveedor de su elección, por ejemplo BouncyCastle , que tiene más compatibilidad con algoritmos criptográficos que la provista por los proveedores dentro del tiempo de ejecución Java estándar.