Joven hacker sonriendo

Listar Servicios Criptográficos

Nuestros ethical hackers explican en que consiste la criptografía y que son los servicios criptográficos. Igualmente, mediante el uso de un pequeño programa realizado en Java, muestran como consultar con cuales servicios criptográficos cuenta en kid de desarrollo.

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.

Referencias

  1. Class Provider

  2. Class Security

  3. REQ.0142: Las funciones de criptografía del sistema deben ser implementadas con mecanismos criptográficos pre-existentes.




Haz un comentario

Estado de los servicios - Términos de Uso