Por ejemplo, una de las técnicas es agregar algunos mensajes aleatorios con las contraseñas originales para evitar el ataque de la tabla arco iris
Hacer que la función hash sea más lenta (aumentar el factor de trabajo ) hace que sea más difícil de romper, pero agregar un salt no hace que sea más difícil hacer el hash Romper en absoluto, eso no es lo que se supone que debe hacer.
Lo que hace es proteger a dos o más usuarios que tienen la misma contraseña. Un hash de la misma entrada siempre tendrá la misma salida, por lo que todos los usuarios con el mismo hash en la base de datos deben tener la misma contraseña. Si rompes uno, los obtienes todos.
Agregar una sal aleatoria a cada contraseña hace que sus hashes sean diferentes, por lo que la tabla del arco iris solo se agrieta una a la vez.
¿No está haciendo el hashing de contraseñas más lento usando la recursión o iteración igual que el inicio de sesión más lento para los usuarios?
Sí.
Si la verificación de la contraseña fue un hash rápido, los atacantes pueden verificar muchas contraseñas rápidamente y encontrar la correcta. Por lo tanto, las funciones hash para contraseñas deben ser lentas para protegerse contra eso. Y su uso normal es que una persona escriba y vea una pantalla de inicio de sesión, esperar medio segundo, una vez, no es una mala transacción.
Algunos son lentos por diseño (bcrypt) y otros son lentos haciendo un hash rápido una y otra vez (pbkdf2).
Scrypt también es una variante de esta idea: un hash que hace que el cálculo lleve mucho tiempo, y también requiere mucha memoria, por lo que tratar de atacarlo rápidamente usando varias computadoras es caro.
enlace discute esta compensación con ejemplos.
¿Las técnicas de hashing de contraseñas se vuelven generalmente secretas o abiertas a otros?
Generalmente abierto. Un hash más antiguo (ahora en desuso) era RC4, y era un desarrollo propietario de RSA Security, y nunca se lanzó oficialmente , pero se filtró, se confirmó y se usó ampliamente de todos modos.
Los algoritmos comunes de hashing de contraseña (lentos) están abiertos:
-
bcrypt , que se publicó públicamente y se usa en OpenBSD, que es código abierto.
o estándares oficiales a través de Internet Engineering TaskForce (IETF):
Los algoritmos comunes de hash rápido (utilizados en SSH, IPSEC, TLS) también son estándares abiertos, por ejemplo
y también hay RFC 6234 que dice " Los Estados Unidos de América han adoptado un paquete de Secure Hash Algoritmos (SHA) [..] a saber, SHA-224, SHA-256, SHA-384 y SHA-512. Este documento hace que el código fuente abierto que realiza estas funciones de hash SHA esté disponible para la comunidad de Internet. ".
Alternativas a PBKDF2 Argon2 y Lyra2 también son de código abierto.
Eso no quiere decir que las personas no puedan crear algoritmos de hashing cerrado propietarios, o basar sus hashes de contraseña en algoritmos rápidos, pero [Microsoft usa MD5] en los hashes de contraseña de Active Directory, y muchas empresas utilizan PBKDF2 .
(De hecho, tendría curiosidad por encontrar funciones de hash propietarias utilizadas en los sistemas populares, no puedo creer que conozca alguna)