¿Qué tan alta es la entropía de este código generador de sal? (No es necesario leer el código)

2

¿Cuál es el mejor método?

Supuesto: Tengo una función que genera un número de bytes de entropía medio-alto

  • Paso 1: Genero 3 de estos bytes de entropía medio-alto.

  • Paso 2: Hago estos bytes usando un algoritmo criptográfico fuerte conocido (sha256)

  • Paso 3: Corté una subcadena del resultado.

  • Paso 4: Utilizo esta cadena como mi sal (sal de 3 bytes)

Entonces, puedo hacer:

  • Paso 1 y 4;

  • 1, 2, 3 y 4;

  • 1, 3 y 4; etc.

La pregunta es ¿cuál de estas operaciones aumenta la entropía y cuál no?

Algún código:

function delicious_delicious_salt()
    {
        $string = openssl_random_pseudo_bytes(3);
        //Do I hash this? Do I generate a longer byte string and cut it?
        return $string;
    }

Lo que en realidad no sé

¿Pasar bits pseudoaleatorios a través de un algoritmo de hash y cortar un conjunto pseudoaleatorio de bits de la salida produce bits de alta entropía?

Quiero implementar una función de generación de sal para mis hashes de contraseña SHA256 en mi servidor web, y como ejercicio, según mi propio entendimiento, quiero que sea criptográficamente seguro, ya que razonablemente puedo hacerlo sin enloquecer (y tomar entropía codificada a partir de HID (mouse, micrófono, video)).

    
pregunta gal 27.02.2013 - 18:16
fuente

2 respuestas

5

Entropy es una medida del número de resultados posibles para todo el sistema. Si comienzas con tres bytes aleatorios, entonces hay 16777216 entradas posibles. Independientemente de lo que haga a partir de estas entradas, solo obtendrá 16777216 salidas posibles; no hay cantidad de hashing y amp; corte y amp; la oración cambiará cualquier cosa a eso, excepto posiblemente reduciendo el número de salidas posibles. Con su hash y luego el truncamiento a 3 bytes finales, no hay garantía de que todos los valores de 16777216 para estos tres bytes sean posibles. De hecho, deberías obtener unos 10 millones de ellos, no más.

Un salt es tan bueno como único. No es necesario que sea secreto o impredecible, pero debe esforzarse por nunca usar el mismo valor de sal dos veces, o al menos mantener la reutilización al mínimo. Si sus sales deben caber en tres bytes, y su fuente de aleatoriedad es de tres bytes, entonces lo mejor que puede hacer es usar estos tres bytes aleatorios como sal. Hashearlos es solo una complicación innecesaria, que no tiene ningún beneficio de seguridad, y en realidad reduce el espacio de posibles valores de sal, lo que implica una mayor tasa de reutilización.

Podría generar sales con un proceso no aleatorio, si puede mantener un estado . Es decir, mantener un contador, que se incrementa por cada sal generada. La gestión del contador puede ser problemática (especialmente en los sistemas de interfaz múltiple), por lo que a menudo se prefiere el uso aleatorio. Pero esa aleatoriedad es solo una herramienta para lograr singularidad . No es un problema si las sales no son aleatorias o siguen una secuencia predecible. El problema es cuando reutilizas un valor de sal.

    
respondido por el Thomas Pornin 27.02.2013 - 18:42
fuente
2

Si comienzas con 24 bits (3 bytes) de entropía, como resultado, solo podrás obtener 24 bits de entropía, sin importar el proceso por el que pases.

Esto se debe a que si comienzas con 2 24 posibles valores de entrada y realizas algún proceso determinista con ellos, tendrás 2 24 posibles valores de salida. Los valores de salida pueden ser de longitudes arbitrarias (imagínese siembre una secuencia de cifrado con su clave de 24 bits), pero aún así solo habrá 2 24 de ellos. Las distribuciones de probabilidad también coincidirán, lo que significa que tendrá exactamente la misma cantidad de entropía con la que comenzó.

En estiramiento de las teclas (que es prácticamente de lo que estás hablando), tu objetivo es terminar con un valor que sea costoso de reproducir. Así que puedes tomar tu entrada de 24 bits, hash N veces donde N es un número entero lo suficientemente grande como para que el proceso tarde varios segundos en el hardware de escritorio y use la salida para algo.

    
respondido por el lynks 27.02.2013 - 18:33
fuente

Lea otras preguntas en las etiquetas