Joven hacker sonriendo

Implementar Cifrado Simétrico

Necesidad

Implementar criptografía simétrica en Java.

Contexto

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

  1. Se dispone de un programa realizado en Java 1.4 o superior.

Solución

De manera general, se conoce como criptografía a las técnicas de cifrado o codificado destinadas a alterar las representaciones lingüísticas de ciertos mensajes con el fin de hacerlos ininteligibles a receptores no autorizados. Estas técnicas se utilizan tanto en el arte como en la ciencia y en la tecnología.

Con la aparición de la informática y el uso masivo de las comunicaciones digitales, se han producido un número creciente de problemas de seguridad. Las transacciones que se realizan a través de la red pueden ser interceptadas, y por tanto, la seguridad de esta información debe garantizarse. Este desafío ha hecho que la criptografía se use con el fin de proteger la información y dotar de seguridad a las comunicaciones y a las entidades que se comunican.[1]

Por otro lado, la criptografía simétrica, también llamada criptografía de clave secreta o criptografía de una clave, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo, de antemano, sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave.[2]

Para cifrar, descifrar y crear la llave de cifrado, Java proporciona las clases Cipher, KeyGenerator y SecretKey del paquete javax.crypto. A continuación se enumeran las consideraciones que se deben tener en cuenta al momento de implementar el algoritmo de cifrado simétrico AES con un tamaño de clave de 256 bits:

  1. Cree una clase para encapsular los métodos de cifrado y descifrado.

  2. Importe las clases Cipher, KeyGenerator y SecretKey del paquete javax.crypto.

    cifrado.java
    1
    2
    3
     import javax.crypto.Cipher;
     import javax.crypto.KeyGenerator;
     import javax.crypto.SecretKey;
    
  3. Cree el método para generar la llave privada con un tamaño de 256 bits.

  4. Luego cree un objeto Cipher que referencie a un algoritmo de cifrado simétrico. Para este caso se va hacer referencia al algoritmo AES.

    1
    2
    3
    4
    5
    6
    7
    8
     Cipher cipher = Cipher.getInstance(algorithm);
     String algorithm = "AES";
     KeyGenerator kgen = KeyGenerator.getInstance(algorithm);
     //Para establecer un tamaño de clave de 128 bits se debe cambiar este valor
     kgen.init(256);
     SecretKey key = kgen.generateKey();
     cipher.init(Cipher.ENCRYPT_MODE, key);
     byte[] cipherText = cipher.doFinal(secret.getBytes());
    

Referencias

  1. Criptografía

  2. Criptografía simétrica

  3. REQ.0144: Debe utilizarse como mecanismo de cifrado simétrico con un tamaño de clave mínimo de 256 bits.




Haz un comentario