Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Generar Salts Aleatorias de Manera Segura

Nuestros ethical hackers nos explican que son los salts y cual es su importancia a la hora de cifrar la información confidencial de una aplicación por lo que recomiendan que, a la hora de generar un salt este debe crearse de la manera más segura posible.

Necesidad

Se requiere utilizar una función que permita generar salts aleatorias en la aplicación.

Contexto

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

  1. Se está desarrollando una aplicación en Java 1.4 o superior.

  2. La aplicación necesita generar salts aleatorias para uso criptográfico.

Solución

La generación de valores aleatorios seguros se usa con el fin de satisfacer los requerimientos de seguridad necesarios para la creación de claves, firmas o certificados digitales y, en general, para crear algoritmos de encriptación que usan llaves de un sólo uso.

Por otro lado, los salts son claves adicionales que se generan aleatoriamente. Estas claves se crean con el fin de agregar protección adicional a un valor cifrado u otro algoritmo criptográfico. Por lo general, los salts se usan para mitigar ataques que buscan adivinar o, mejor dicho, descifrar la información cifrada. Por ejemplo, ataques de fuerza bruta o ataques de diccionario.

Por otro lado, Java proporciona la clase java.security.SecureRandom. Dicha clase es un generador de números pseudoaleatorios que cumplen, por lo menos, con la especificación FIPS 140-2. Esta especificacion trata sobre las pruebas estadísticas para generadores de números aleatorios y los requisitos de seguridad de los módulos criptográficos [1].

La especificación define 4 niveles de seguridad entre los cuales se menciona que se debe añadir una resistencia a la intrusión tanto física como lógica con fines de desmontaje o modificación, de manera que dificulte al máximo los ataques. Para lo cual, se debe contar con una protección criptográfica y administración de claves de forma eficiente.

Adicionalmente, la clase debe producir una salida no determinística, por lo tanto, requiere que la semilla no sea predecible y que la salida sean secuencias criptográficamente fuertes tal como está descrito en RFC 1750: Recomendaciones de aleatoriedad para la seguridad [2].

  1. Para generar un salt aleatorio se debe importar la clase SecureRandom de la biblioteca security

    salt.java
    1
    import java.security.SecureRandom;
    
  2. Adicionalmente se declara el método generateRandomSalt y se crea un array definiendole un tamaño entre 48 y 8192 bits.

    1
    2
    3
    4
    5
    public static byte[] generateRandomSalt(int size) {
      if (size < 6 || size > 1024) {
        size = 6;
      }
      byte[] salt = new byte[size];
    
  3. Se debe usar SecureRandom y su método nextBytes para llenar aleatoriamente el array.

    1
    2
    3
    4
      SecureRandom random = new SecureRandom();
      random.nextBytes(salt);
      return salt;
    }
    
  4. Lo siguiente es un ejemplo de salts aleatorios generados con SecureRandom

    output.bash
    1
    2
    3
    4
    &#9488;l&#9488;Q
    ?&#9571;Ë£ÿ7&#9577;°&#9618;¶
    }&#9562;z&#9835;%6s±&#9553;í
    ÇT+LÝïh°?×
    



Haz un comentario

Estado de los servicios - Términos de Uso