Fluid Attacks logo
Contact Us
Young hacker smiling
Zero false positives

Expert intelligence + effective automation

Contact logo Contact Us
GET A DEMO

Generar Cadenas Aleatorias de Manera Segura

Necesidad

Se requiere utilizar una función de generación de cadenas 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 cadenas aleatorias usadas para identificar archivos generados en directorios públicos.

Solución

La generación de valores aleatorios seguros se usa con el fin de satisfacer requerimientos de seguridad en 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.

En Java, la clase java.security.SecureRandom proporciona un generador de números pseudoaleatorios que cumplen, por lo menos, con la especificación FIPS 140-2 sobre pruebas estadísticas para generadores de números aleatorios y 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. Se debe importar la clase SecureRandom del paquete security y BigInteger del paquete math.

    randomNumber.java
    1
    2
    import java.security.SecureRandom;
    import java.math.BigInteger;
    
  2. Se define el método generateRandomText, el cual retornará una cadena de texto aleatoria.

    1
    public static String generateRandomText() {
    
  3. Instanciamos BigInteger pasándole una instancia de SecureRandom como generador de números aleatorios. Luego, convertimos el número a String. Retornamos el valor obtenido.

    1
    2
    3
    4
     SecureRandom random = new SecureRandom();
     String text = new BigInteger(130, random).toString(32);
     return text;
    }
    
  4. A continuación se puede observar algunos de los resultados para la generación de cadenas aleatorias.

    1
    2
    3
    4
    f1gk6tj9l1012scp1412elkqp1
    ugs6av8mq7nq05boivd8kghv86
    crni7ciuhvoh75j68hltm774l
    a5tji2kptaok52j5rq41g077rp
    
  5. En conclusión, se debe tener en cuenta que la calidad de los valores producidos de forma aleatoria se basa en la impredecibilidad o alto grado de entropía de los mismos. Por tanto, la generación de datos aleatorios es más fuerte de forma inversamente proporcional a la posibilidad de predicción de sus resultados.


Service status - Terms of Use