Fluid Attacks logo
Contact Us
Young hacker smiling
Zero false positives

Expert intelligence + effective automation

Contact logo Contact Us
GET A DEMO

Listar Servicios Criptográficos

Necesidad

Listar los servicios criptográficos disponibles en Java.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de un compilador estándar de Java.

  2. Se dispone de proveedores de seguridad registrados en el kit de desarrollo de Java (JDK).

Solución

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.

    1. 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.

    2. Primero hay que importar la clase java.security.Provider la cual es una abstracción de cada proveedor registrado.

      cli.java
      1
      import java.security.Provider;
      
    3. 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.

      1
      import java.security.Security;
      
    4. Luego, hay que hacer la importación de algunas clases que permitirán iterar sobre las colecciones de los proveedores.

      1
      2
      import java.util.Iterator;
      import java.util.Set;
      
    5. Posteriormente, se procederá a obtener la colección de proveedores disponibles.

      1
      2
      3
      4
      5
      class CLI
      {
        public static void main(String[] args)
        {
          Provider[] providers = Security.getProviders();
      
    6. Este array contiene la información de todos los proveedores criptográficos registrados en el kit de desarrollo actual.

    7. Sobre dicho arreglo se trabajará para obtener el nombre del servicio y la clase que lo implementa.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
        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));
          }
        }
       }
      }
      
    8. Por último, se compila y ejecuta el programa

      compilar.shell
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      $ 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
      
    9. Los servicios pueden ser de diferentes tipos. Por ejemplo, los servicios de generación de pares de claves comienzan por KeyPairGenerator.

      keypair.shell
      1
      2
      3
      4
      5
      6
      7
      $ 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
      
    10. Los servicios de Message Authentication Code comienzan por Mac.

      mac.shell
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      $ 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
      
    11. Los servicios de firmas o resúmenes de mensajes comienzan por MessageDigest.

      message.shell
      1
      2
      3
      4
      5
      6
      7
      8
      9
      $ 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
      

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

CLI.java Clase CLI.


Service status - Terms of Use