¿Cuáles son las diferencias entre una semilla de cifrado y sal?

25

Hoy me costó mucho explicar la diferencia a un amigo.

Sé que las semillas se utilizan cuando se generan cadenas "aleatorias". Y las sales se utilizan para proporcionar diferentes resultados a un hash.

¿Cuál es la mejor manera de describir estos conceptos y sus posibles diferencias?

    
pregunta Gabriel Fair 05.02.2015 - 00:38
fuente

5 respuestas

44

Semilla:

El cifrado se basa en números aleatorios, pero ¿cómo se genera un número realmente aleatorio? ¿El milisegundo actual? ¿El número de subprocesos de procesador en uso? Necesitas un punto de partida. Esto se llama una semilla: inicia un número aleatorio.

Salt:

Cuando hash una cadena, siempre terminará con el mismo hash.

foo = acbd18db4cc2f85cedef654fccc4a4d8 cada vez.

Este es un problema cuando desea almacenar cosas que desea mantener realmente ocultas (como contraseñas). Si ves acbd18db4cc2f85cedef654fccc4a4d8 siempre sabes que es foo . Por lo tanto, simplemente agregue una "sal" a la cadena original para asegurarse de que sea única.

foo + asdf = e967c9fead712d976ed6fb3d3544ee6a

foo + zxcv = a6fa8477827b2d1a4c4824e66703daa9

Así que 'salt' hace que un 'hash' sea mejor al ocultar el texto original.

    
respondido por el schroeder 05.02.2015 - 00:52
fuente
9

Los términos más simples que se me ocurren:

  • Un semilla es un valor aleatorio que generalmente se debe mantener en secreto o el cifrado se rompe
  • Un salt es un valor aleatorio que generalmente no es un secreto, que se usa para hacer que algunos ataques precomputados sean más difíciles

Me gusta usarlos porque la idea de mantener las cosas en secreto o no es algo significativo para cualquiera.

    
respondido por el Cort Ammon 06.02.2015 - 01:57
fuente
5

Tu amigo está realmente justificado en su confusión, porque no hay una gran diferencia. En un nivel alto, cada uno se utiliza como entrada para modificar la salida de una función de aleatorización.

Intente enfatizar la diferencia entre una función hash y un generador de números aleatorios, y para qué se usan normalmente. Además, ser capaz de distinguir entre un generador de números aleatorios regular usado para estadísticas (que puede usar una semilla predecible o conocida), y un generador de números aleatorios criptográficamente seguro usado para la generación de claves secretas (que requiere una fuente indiscutible de entropía como semilla. )

    
respondido por el John Deters 05.02.2015 - 02:31
fuente
0

PRNG (semilla) = una cadena de números aleatorios

hash (salt + contraseña) = contraseña hash

El generador de números aleatorios resalta la naturaleza fundamental de las computadoras. No son aleatorios. Incluso la aleatoriedad percibida no es aleatoria, sino casi aleatoria, aunque uno podría finalmente sacar ese viejo ejemplo de andar a medias distancias hacia una meta y nunca alcanzarla realmente.

    
respondido por el munchkin 06.02.2015 - 10:02
fuente
-1

La semilla de cifrado se usa para ayudar a generar un número pseudoaleatorio. La semilla se utiliza para iniciar la generación de una serie de números pseudoaleatorios y aumentar la aleatoriedad estadística del algoritmo utilizado. Nunca se puede generar realmente un número verdaderamente aleatorio mediante el cálculo solo, lo que permite cierta asimetría en una curva de probabilidad que muestra la distribución de los números generados por un generador de números pseudoaleatorios. Cuanto mayor es la probabilidad de predecir correctamente, un número generado de forma pseudoaleatoria es menos seguro el cifrado. La semilla generalmente se toma desde el momento en que se produce el proceso de encriptación, ya que es un valor fácil de extraer de la computadora. Si la semilla se comparte entre sistemas, puede ser la clave privada en un modelo de cifrado de clave privada / clave pública.

Una SALT suele ser una cadena generada aleatoriamente que un sistema almacenará en lugar de la contraseña de un usuario en texto sin formato. Un hash debe almacenarse junto con la SALT que se genera a partir del valor de la contraseña del usuario (ingresada en el momento de la operación) concatenado a la SALT. Esto significa que el sistema nunca almacenará la información del usuario directamente y comparará el hash almacenado en la base de datos o el almacén de datos con uno generado cuando el usuario ingresa su contraseña. Esto es más seguro en varios niveles, por ejemplo, si la base de datos del sistema está violada, la contraseña del usuario no estará directamente expuesta a un atacante.

    
respondido por el TRex22 05.02.2015 - 11:54
fuente

Lea otras preguntas en las etiquetas