¿Cómo almacenan las empresas de software los nombres de usuario y las contraseñas? ¿Cómo guardo nombres de usuario y contraseñas de forma segura?

El nombre de usuario siempre se almacena como texto sin formato. Casi no hay ninguna ventaja con solo conocer la contraseña y muchas veces el nombre de usuario es público como su ID de correo electrónico.

La segunda parte es la contraseña, nunca la almacene como texto sin formato. Siempre debes hacer hash de la contraseña. La función hash es una función unidireccional. Obtiene el mismo hash de la misma contraseña cada vez, pero conociendo el hash, no puede adivinar la contraseña. Hash es la comida preparada, mientras que la contraseña es la receta. No importa cuántas veces cocines con una receta, siempre obtienes la misma comida. Pero, ¿puedes adivinar la receta exacta al probar la comida?

Hay una forma de adivinar la contraseña cifrada, que es la búsqueda de fuerza bruta. Intentan cada método hasta que se genera el mismo hash. También pueden usar una tabla hash precalculada llamada tabla Rainbow. Los hash se generan para contraseñas comunes y cuando obtienen hash, buscan el hash y obtienen la contraseña.

Para superar el método de la tabla Rainbow, usamos Salt. Se genera una cadena aleatoria, agregada a su contraseña antes del hash. Dado que el atacante no conoce una secuencia aleatoria de antemano, no es posible calcular la tabla del arco iris. Además, si la sal es única para cada cuenta, la tabla hash puede no ser útil ya que el atacante debe forzar cada contraseña y su operación es muy costosa.

Tomemos un ejemplo. Estoy usando MD5, pero MD5 es un hash débil, puedes usar hashes más fuertes como SHA. Supongamos que la contraseña sea contraseña

1) MD5 (contraseña) = 5f4dcc3b5aa765d61d8327deb882cf99
2) MD5 (contraseña.salt1) = 05b604d36ceaeadd8c8fe358f112d98e
3) MD5 (contraseña.salt2) = 4e513a3fc7b203d970d750f125506416

Aunque la contraseña es la misma en los tres casos anteriores, debido a la sal, se genera un hash diferente. Nunca asuma que sus contraseñas son seguras solo porque es secreto, las mejores son aquellas en las que le da todo al atacante y, sin embargo, no pueden adivinar el original.

Personalmente no me gusta el hash ya la contraseña hash. Reduce el conjunto universal. Por ejemplo, MD5 tiene 16 caracteres posibles y la longitud es 32. Entonces, las combinaciones máximas son 16 ^ 32 = 3.4028237e38 Si usa sal de minúsculas, mayúsculas y números, obtendrá 62 caracteres y 62 ^ 22 = 2.7e39 combinaciones con solo 22 caracteres. . Eso incluye tu contraseña. Más si usa caracteres especiales en su contraseña / salt.

No trabajo en una empresa famosa, pero supongo que usan hash + sal.

Necesita almacenar el hash de sus contraseñas … un hash es una función de cadena a cadena que:
– Es difícil de revertir. Eso mantiene seguras las contraseñas del tour
– dada una entrada, siempre recuperará el mismo resultado.
– dos entradas no deben tener el mismo valor. Llamamos a eso una colisión y debería ser raro. Para que pueda almacenar hash en lugar de contraseña.

Puede elegir uno de los siguientes algoritmos hash:

– md5 (no el mejor …)
– sha 1
– sha 256 …

Bueno, pero puedes encontrar valores comunes para algoritmos hash comunes. Pero puedes combinarlos. Por ejemplo :

SHA256 (SHA256 (SHA256 (contraseña))))

¿Es suficiente?

No. Puede agregar una cadena después de la contraseña almacenada del recorrido. Esta cadena debe ser secreta. Pero debes usar siempre el mismo. A eso lo llamamos sal.

Los nombres de usuario generalmente se almacenan en una base de datos en texto plano, mientras que las contraseñas generalmente se digieren usando un hash unidireccional como md5 (débil) o SHA-1 o SHA-2, preferiblemente “salado”, es decir, con una cadena aleatoria añadida a la contraseña antes de que esté en hash.

No es estándar de la compañía, pero aquí hay algunas pautas,

1. Si necesita leer el nombre de usuario, use texto plano, hash de lo contrario
2. Las contraseñas siempre son hash
3. No te olvides de salar todos los datos hash

No hace daño perder el tiempo de hashing en la autorización. Daña si se hackeó toda la contabilidad de su cliente.

Para un ejercicio de aprendizaje, hay excelentes respuestas aquí. En realidad, simplemente no lo implementaría en absoluto: delegue sus usuarios y autenticación en otro servicio, como Google o Facebook. Han invertido mucho en hacer fantásticos servicios de autenticación para aplicaciones de terceros.

La inscripción fuerte se ve más prometedora.
Ssl, a una base de datos y a una aplicación web

Usa bcrypt. Ver http://codahale.com/how-to-safel