¿Por qué debemos proteger el acceso a los hashes de contraseña? ¿Y bajo qué condiciones se puede omitir esta precaución?
Los algoritmos de almacenamiento seguro de contraseñas tienen dos características principales: son unidireccionales y son lentos.
¿Pero qué sucede si su contraseña se encuentra en el top 10 de las peores contraseñas, como "admin" o "123456"? Luego, un atacante adivinará que en unos pocos intentos, sin importar qué tan fuerte sea su algoritmo de hash.
Por lo tanto, las personas con contraseñas débiles siempre estarán en riesgo si un atacante conoce su hash. Por eso los mantenemos en secreto.
Cuando iniciamos sesión en un sistema, no queremos esperar 5 minutos para que el servidor complete el algoritmo de contraseña, por lo que esos algoritmos aún son bastante rápidos (algo así como 0.1 segundos). Debido a que las computadoras se vuelven más rápidas con el tiempo, también necesitamos aumentar la cantidad de cálculos realizados, de modo que aún lleve a un atacante (con hardware moderno) mucho tiempo. O tal vez queremos actualizar a un algoritmo diferente que protege contra un determinado tipo de programa de craqueo de ASIC o GPU. En esos casos, si un atacante conoce el hash anterior, pueden descifrar la contraseña del usuario más fácilmente. Así que además, manteniendo los hashes en secreto el mayor tiempo posible, también contamos con la protección más actualizada en el momento en que los hashes son pirateados.
Algunas personas incluyen pimienta en sus hashes de contraseña (consulte esta pregunta o Wikipedia ), en cuyo caso sería perfectamente seguro publicar la contraseña hashes siempre que el valor de la pimienta siga siendo un secreto . Pero entonces la pregunta es: ¿por qué lo harías? Por lo general, no hay ventaja para publicar los hashes. Cuando el valor de la pimienta se filtra, los atacantes pueden comenzar a romper los hashes más antiguos que hayas publicado. Si proteges los hashes en lugar de publicarlos públicamente, los atacantes primero tienen que obtener tanto la pimienta como la base de datos del usuario antes de que puedan comenzar a descifrar cualquier cosa.
Nunca se debe omitir esta precaución (de proteger los hashes de contraseña) sin que se advierta al usuario sobre el riesgo. Un ejemplo de esto es un tripcode , donde el hash Se publica como prueba de identidad sin necesidad de una base de datos. Este es el único caso en el que puedo pensar en dónde publicar hashes de secretos memorizados es una buena idea. Otros hashes, como las firmas de software, son, por supuesto, un tema diferente porque no funcionan como contraseñas.
A lo largo de los años, los algoritmos de hash de contraseña recomendados han cambiado varias veces como vulnerabilidades y se han producido avances tecnológicos inesperados. No hay una garantía del 100% de que un hash que sea seguro hoy en día siga siendo seguro en 10 años.
Al evitar que un atacante acceda a los hash, mitiga su riesgo de compromiso en el caso de que se capture un hash, y se resquebraje en el futuro.
Esta es también una razón por la que varias organizaciones requieren que las contraseñas se cambien regularmente.
Ha habido muchos ataques grandes en donde las bases de datos de contraseñas se vuelcan y finalmente se descifran. Rockyou es uno de los más notables, su lista de palabras está incluida en todas las instancias de Kali ahora. Los hash simplemente ralentizan a un atacante. Si bien algunas personas miran las matemáticas y dicen "oh, es totalmente seguro, se necesitarían X millones de años para resolver esto", eso no siempre es realista cuando vemos nuevas vulnerabilidades y cambios en los paradigmas de computación todo el tiempo.
Estoy de acuerdo con todas las respuestas escritas antes de mí, pero me gustaría responder a esta pregunta brevemente:
Tenemos que proteger los hashes porque eso es lo que todos los hackers o pentesters quieren obtener para descifrar los hashes y encontrar las contraseñas a través de la fuerza bruta, los ataques de diccionario y las tablas de arco iris. Si facilita el acceso a los hashes de contraseña, con seguridad los hará muy felices.
Si protege los hashes, protege sus contraseñas débiles
.Agregado a las respuestas anteriores, algunos protocolos débiles son vulnerables al ataque "Pase el hash", donde todo lo que necesita el atacante para iniciar sesión es el nombre de usuario y el hash de la contraseña. El atacante no necesita forzar bruscamente el hash. Así que mejor no correr el riesgo de publicar hashes.