PKCS # 5 ¿Privacidad de la sal? [duplicar]

7

En la documentación oficial del estándar PKCS5 V2.0, podemos leer "La sal se puede ver como un índice en un gran conjunto de claves derivadas de la contraseña, y no es necesario mantenerlas en secreto".

La parte "no es necesario mantenerla en secreto" es interesante.

Dado que se usa Salt para agregar una gran variedad de posibilidades de contraseña (o para crear dos claves diferentes si dos usuarios tienen la misma contraseña), ¿cuál es el propósito de dejar que el Salt no sea seguro?

Entiendo que normalmente, un atacante no tendrá acceso a la sal, por lo que complicará su trabajo para encontrar la contraseña correcta. Pero si un atacante conoce la sal, ¿dónde está la "magia"? Saber que la sal es como realizar un ataque de diccionario tradicional (si excluimos el recuento de iteraciones)

¿Hay algo que no entiendo? Sé que saber que la sal no rompe la seguridad, pero decir que "no es necesario mantenerlo en secreto" me parece extraño.

    
pregunta Normand Bedard 30.05.2011 - 16:20
fuente

2 respuestas

4

Mantener algo privado es difícil (es decir, caro). Para un elemento de datos confidenciales, generalmente llamado "clave" (a veces una "contraseña" cuando dicha clave puede almacenarse en un sistema basado en humanos), debemos pensar en todo el ciclo de vida de la clave: cómo, cuándo y dónde está Creada, almacenada, copiada y borrada. En algunos contextos (¡muchos!), La administración de claves adecuada requiere sistemas de almacenamiento físicos resistentes a la manipulación (tarjetas inteligentes, HSM ...); Estos no crecen en los árboles. No hay necesidad de ninguna razón para no mantener algo privado; más bien, necesitamos razones explícitas para hacer que algo valga la pena ser privado.

Un salt no es una clave (de lo contrario, lo llamaríamos una clave, no un salt). Su objetivo es ser distinto para cada instancia, incluso si se utiliza la misma clave. La sal previene muchos tipos de costos compartidos, donde un atacante puede atacar elementos protegidos N (por ejemplo, contraseñas con hash) por menos de N el costo de atacar una. Una forma de compartir costos son las tablas precomputadas, por ejemplo, "tablas del arco iris". Una sal lo derrota al ser único para cada instancia.

Al permitir que la sal sea pública, hacemos que sea mucho más fácil tener una sal única por instancia. Gestionar tantas claves secretas sería muy difícil, pero para los elementos públicos, solo invocamos un PRNG y almacenamos el valor a medida que avanza, sin más dilación.

    
respondido por el Thomas Pornin 31.05.2011 - 04:07
fuente
0
  

"no es necesario mantenerlo en secreto"

Probablemente significan algo como "no tiene que estar cifrado con una criptografía fuerte"; pero no "debe publicarse activamente a todos".

El propósito principal de la sal es evitar compartir costos . El costo compartido sería pre-computando una tabla hash una vez, y luego usa esa tabla hash para atacar todas las cuentas de usuario a la vez. (O peor aún, atacar efectivamente las cuentas de usuario en muchos sistemas).

Una sal grande y aleatoria protege eficazmente contra los costos compartidos. Y lo hace incluso si se almacena en texto sin formato junto a la representación con hash de la contraseña.

Piénselo de esta manera: realizar una búsqueda a través de un conjunto de datos gigantesco lleva tiempo; Los tamaños de RAM y las velocidades de E / S de RAM son limitados. En algún punto, el tamaño de la tabla hash precalculada se vuelve prohibitiva. La sal ha cumplido su propósito, tanto si se mantiene en secreto como si no.

(Cuando el enfoque de la tabla hash no es factible, el atacante presumiblemente cambiará a solo ejecutar la función hash. Fx ataque de fuerza bruta mediante el hashing de las posibles contraseñas en paralelo a través de grupo de máquinas baratas .)

    
respondido por el Jesper Mortensen 30.05.2011 - 18:52
fuente

Lea otras preguntas en las etiquetas