import java.security.Provider;
Listar los servicios criptográficos disponibles en Java.
A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:
Se dispone de un compilador estándar de Java.
Se dispone de proveedores de seguridad registrados en el kit de desarrollo de Java (JDK).
La criptografía se refiere al estudio y desarrollo de las técnicas de cifrado o descifrado destinadas a alterar las representaciones lingüísticas de ciertos mensajes con el fin de hacerlos ininteligibles a receptores no autorizados. En otras palabras, es la ciencia de cifrar y descifrar datos con el fin de garantizar la integridad; garantizar que la información no ha sido modificada. La privacidad; garantizar que la información no puede ser vista por personas sin autorización. Y la autenticidad; garantiza que la información es verdadera.
En ese orden de ideas, los servicios criptográficos son, valga la redundancia, servicios facilitados por terceros que proveen múltiples funcionalidades que permiten cifrar y descifrar datos y así, mantener la información segura.
En Java los servicios criptográficos son suministrados por proveedores de seguridad, además, estos pueden venir incluidos en el kit de desarrollo estándar o ser incluidos mediante el uso de bibliotecas.
Los servicios criptográficos incluidos en Java pueden ser de los siguientes tipos:
Algoritmos tales como 3DES, DSA, MD5, entre otros.
Generación de claves.
Utilidades de apoyo.
Para conocer todos los Servicios criptográficos disponibles en todos los proveedores de seguridad que se encuentran registrados en el kit de desarrollo actual, se procederá a crear el siguiente programa.
Primero hay que importar la clase java.security.Provider la cual es una abstracción de cada proveedor registrado.
import java.security.Provider;
A continuación, se importa la clase java.security.Security. Esta clase gestiona todas las funciones criptográficas, además, permitirá acceder a todos los proveedores registrados.
import java.security.Security;
Luego, hay que hacer la importación de algunas clases que permitirán iterar sobre las colecciones de los proveedores.
import java.util.Iterator;
import java.util.Set;
Posteriormente, se procederá a obtener la colección de proveedores disponibles.
class CLI
{
public static void main(String[] args)
{
Provider[] providers = Security.getProviders();
Este array contiene la información de todos los proveedores criptográficos registrados en el kit de desarrollo actual.
Sobre dicho arreglo se trabajará para obtener el nombre del servicio y la clase que lo implementa.
for (int i = 0; i < providers.length; i++)
{
System.out.println("\nProveedor: " + providers[i]);
Set services = providers[i].keySet();
for (Iterator it = services.iterator(); it.hasNext();)
{
String name = (String) it.next();
System.out.println(" Servicio: " + name + " = " + providers[i].get(name));
}
}
}
}
Por último, se compila y ejecuta el programa
$ javac CLI.java
$ java CLI
Proveedor: SUN version 1.6
Servicio: Alg.Alias.Signature.SHA1/DSA = SHA1withDSA
Servicio: Alg.Alias.Signature.1.2.840.10040.4.3 = SHA1withDSA
Servicio: Alg.Alias.Signature.DSS = SHA1withDSA
Servicio: SecureRandom.SHA1PRNG ImplementedIn = Software
Servicio: KeyStore.JKS = sun.security.provider.JavaKeyStore$JKS
Servicio: Alg.Alias.MessageDigest.SHA-1 = SHA
Servicio: MessageDigest.SHA = sun.security.provider.SHA
Servicio: KeyStore.CaseExactJKS = sun.security.provider.JavaKeyStore$CaseExactJKS
Servicio: CertStore.com.sun.security.IndexedCollection ImplementedIn = Software
Servicio: Alg.Alias.Signature.DSA = SHA1withDSA
Servicio: KeyFactory.DSA ImplementedIn = Software
Servicio: KeyStore.JKS ImplementedIn = Software
Servicio: AlgorithmParameters.DSA ImplementedIn = Software
Servicio: Signature.NONEwithDSA = sun.security.provider.DSA$RawDSA
Servicio: Alg.Alias.CertificateFactory.X509 = X.509
Servicio: Provider.id className = sun.security.provider.Sun
Servicio: Alg.Alias.Signature.SHA-1/DSA = SHA1withDSA
Servicio: CertificateFactory.X.509 ImplementedIn = Software
Servicio: Signature.SHA1withDSA KeySize = 1024
Servicio: KeyFactory.DSA = sun.security.provider.DSAKeyFactory
Servicio: CertPathValidator.PKIX ImplementedIn = Software
Servicio: Configuration.JavaLoginConfig = sun.security.provider.ConfigSpiFile
Servicio: Alg.Alias.Signature.OID.1.2.840.10040.4.3 = SHA1withDSA
Servicio: Alg.Alias.KeyFactory.1.2.840.10040.4.1 = DSA
Servicio: MessageDigest.MD5 ImplementedIn = Software
Servicio: Alg.Alias.Signature.RawDSA = NONEwithDSA
Servicio: Provider.id name = SUN
Servicio: Alg.Alias.AlgorithmParameters.1.2.840.10040.4.1 = DSA
Servicio: CertPathBuilder.PKIX ValidationAlgorithm = RFC3280
Los servicios pueden ser de diferentes tipos. Por ejemplo, los servicios de generación de pares de claves comienzan por KeyPairGenerator.
$ java CLI|grep " KeyPairGenerator"
Servicio: KeyPairGenerator.DSA KeySize = 1024
Servicio: KeyPairGenerator.DSA ImplementedIn = Software
Servicio: KeyPairGenerator.DSA = sun.security.provider.DSAKeyPairGenerator
Servicio: KeyPairGenerator.RSA = sun.security.rsa.RSAKeyPairGenerator
Servicio: KeyPairGenerator.RSA = sun.security.rsa.RSAKeyPairGenerator
Servicio: KeyPairGenerator.DiffieHellman = com.sun.crypto.provider.DHKeyPairGenerator
Los servicios de Message Authentication Code comienzan por Mac.
$ java CLI|grep " Mac"
Servicio: Mac.SslMacSHA1 SupportedKeyFormats = RAW
Servicio: Mac.HmacSHA1 = com.sun.crypto.provider.HmacSHA1
Servicio: Mac.HmacSHA512 = com.sun.crypto.provider.HmacCore$HmacSHA512
Servicio: Mac.HmacSHA384 SupportedKeyFormats = RAW
Servicio: Mac.HmacSHA256 SupportedKeyFormats = RAW
Servicio: Mac.HmacMD5 SupportedKeyFormats = RAW
Servicio: Mac.HmacSHA256 = com.sun.crypto.provider.HmacCore$HmacSHA256
Servicio: Mac.HmacMD5 = com.sun.crypto.provider.HmacMD5
Servicio: Mac.SslMacMD5 = com.sun.crypto.provider.SslMacCore$SslMacMD5
Servicio: Mac.HmacSHA512 SupportedKeyFormats = RAW
Servicio: Mac.HmacPBESHA1 SupportedKeyFormats = RAW
Servicio: Mac.HmacPBESHA1 = com.sun.crypto.provider.HmacPKCS12PBESHA1
Servicio: Mac.HmacSHA384 = com.sun.crypto.provider.HmacCore$HmacSHA384
Servicio: Mac.SslMacMD5 SupportedKeyFormats = RAW
Servicio: Mac.HmacSHA1 SupportedKeyFormats = RAW
Servicio: Mac.SslMacSHA1 = com.sun.crypto.provider.SslMacCore$SslMacSHA1
Los servicios de firmas o resúmenes de mensajes comienzan por MessageDigest.
$ java CLI|grep " MessageDigest"
Servicio: MessageDigest.SHA = sun.security.provider.SHA
Servicio: MessageDigest.MD5 ImplementedIn = Software
Servicio: MessageDigest.SHA-384 = sun.security.provider.SHA5$SHA384
Servicio: MessageDigest.SHA-512 = sun.security.provider.SHA5$SHA512
Servicio: MessageDigest.SHA ImplementedIn = Software
Servicio: MessageDigest.MD5 = sun.security.provider.MD5
Servicio: MessageDigest.SHA-256 = sun.security.provider.SHA2
Servicio: MessageDigest.MD2 = sun.security.provider.MD2
Puedes descargar el código fuente pulsando en el siguiente enlace:
Clase CLI.
Copyright © 2021 Fluid Attacks, We hack your software. All rights reserved.