security - que - salt informatica
¿Las contraseñas hash y saladas son seguras contra ataques de diccionario? (5)
Entiendo que las sales hacen el mismo hash de contraseña para diferentes valores. Sin embargo, las sales generalmente se almacenan en la base de datos con la contraseña. Entonces, digamos que soy un atacante, así es como podría usar un ataque de diccionario contra una sal (nótese que en este ejemplo no escribo hash o sales de 128 bits por razones de brevedad):
user_pw = ''blowfish''
Given:
email = ''[email protected]''
hash = ''1234567890''
salt = ''0987654321''
function attack(){
for each(word in dictionary)
md5( word * salt ) == hash ? cracked_one(email, word)
}
Entiendo que esto evita que los hackers usen tablas rainbow ... pero parece que no previene ataques de diccionario. Supongo que podrías agregar algo más al algoritmo hash, pero con seguridad debemos asumir que el método de ataque es conocido.
Por lo tanto, parece que la salazón evita que los piratas informáticos descubran qué contraseñas son las contraseñas del diccionario (las que tienen muchos usuarios) y previene los ataques del arco iris ... pero no evita los ataques del diccionario.
¿Es este un análisis correcto? ¿Alguna sugerencia para una mejor seguridad?
¡Gracias!
Eso es correcto. Si alguien obtiene el material de la contraseña, un ataque de diccionario sería efectivo.
Para protegerse de esto:
- Asegúrese de que sus contraseñas no estén sujetas a ataques de diccionario.
- Asegúrese de que su archivo de contraseña (
/etc/shadow
) solo sea legible por root.
Nada impide que un atacante adivine la contraseña.
Las sales solo lo hacen más difícil al obligar a un atacante a actualizar el diccionario por usuario (de manera efectiva, por sal).
Para mejorar la seguridad, una función hash sintonizable es su mejor opción. Cambie el tiempo por compilación, haciendo que los ataques de diccionario sean poco prácticos en cualquier hardware que su atacante pueda tener disponible.
Básicamente, lee esto .
Salt no evita ataques de diccionario, solo ataques de diccionario precalculados. En particular, protege contra tablas de arcoiris ( http://en.wikipedia.org/wiki/Rainbow_table ) y también asegura que descifrar la contraseña de un usuario no le permite crackear automáticamente a cualquier usuario que comparta esa contraseña.
El artículo que relacioné menciona algunas formas de mejorar la salazón, incluyendo el fortalecimiento de claves ( http://en.wikipedia.org/wiki/Key_strengthening ).
Sin sal, el atacante puede generar hashes para cada palabra en su diccionario y luego ejecutar el nuevo dictionario contra su lista de contraseñas.
Con salt, cada contraseña se codifica con una cadena aleatoria, por lo que, incluso con los conocimientos previos del hash, aún tiene que volver a crear un nuevo dicionario hash que contenga la sal para cada sal diferente en su base de datos.
Solo piense en las tablas dictionnaries como un subconjunto (pequeña porción) de las tablas del arco iris. Mientras que las tablas de arcoíris pueden contener miles de millones de entradas, los dictionarios contienen "palabras conocidas", por lo que tal vez unos pocos millones de entradas como máximo.
La razón por la que las tablas de arcoíris fallan contra la sal es porque el proceso de recreación sería "miles de millones de entradas" de recálculo mientras que los ataques diccionales siguen siendo "pocos millones de entradas". La sal solo bloquea valores precalculados
Su lógica es sólida, pero en realidad, con suficiente potencia y tiempo de cómputo, no hay protección contra ataques de diccionario / fuerza bruta.