encriptar - password_hash php ejemplo
Mejora el hash de contraseñas con sal aleatoria (5)
dado que un atacante de alguna manera tiene acceso a sus contraseñas hash (y está tratando de revertir el hash al texto plano), significa que probablemente haya abandonado su base de datos, y luego haya tenido acceso a sus sales aleatorias también.
El objetivo de la salazón es vencer a las "tablas del arco iris":
http://en.wikipedia.org/wiki/Rainbow_table
Vea por qué una sal suficientemente larga derrota a cualquier tabla de arcoíris en la sección "Defensa contra tablas de arco iris" .
¿Cómo es eso más seguro?
Solía ser más seguro porque obligaba al atacante a probar, por aquel entonces, un enfoque de fuerza bruta muy costoso en lugar de buscar instantáneamente tablas de arcoiris precalculadas. Si tenía una sal de 64 bits, el atacante necesitaba tener 2 ^ 64 tablas de arcoiris precalculadas en lugar de una ... En otras palabras: hacía que las tablas de arco iris fueran inútiles.
Sin embargo, tenga en cuenta que las GPU modernas pueden descifrar miles de millones de contraseñas por segundo, lo que hace prácticamente inútil que un atacante almacene enormes tablas de arcoiris (en lugar de almacenar miles de millones de hashes, simplemente cómpráelos en unos segundos).
Hoy en día desea almacenar sus "contraseñas" usando algo como PBKDF2 o scrypt.
Estoy comenzando un sitio web y estoy tratando de decidir cómo cifrar las contraseñas de los usuarios para almacenarlas en una base de datos SQL.
Me doy cuenta de que usar un simple md5 (contraseña) es muy seguro. Estoy considerando usar un sha512 (password.salt), y he estado investigando la mejor manera de generar una sal útil. Leí numerosos artículos que dicen que una sal debe ser lo más aleatoria posible para agregar entropía al hash y parece una gran idea. Pero:
- necesitas almacenar la sal aleatoria junto con tu hash
- dado que un atacante de alguna manera tiene acceso a sus contraseñas hash (y está tratando de revertir el hash al texto plano), significa que probablemente haya abandonado su base de datos, y luego haya tenido acceso a sus sales aleatorias también.
¿No es obvio que el valor de aspecto extraño junto al hash en la base de datos es una sal? Si el atacante puede acceder a la sal junto con el valor hash, ¿cómo es eso más seguro?
¿Alguien tiene experiencia en esa área? ¡Gracias!
A un atacante se le "permite" conocer la sal; su seguridad debe diseñarse de manera que incluso con el conocimiento de la sal siga siendo segura.
¿Qué hace la sal?
La sal ayuda a defenderse contra los ataques de fuerza bruta usando "tablas de arco iris" precalculadas.
La sal hace que la fuerza bruta sea mucho más cara (en términos de tiempo / memoria) para el atacante.
El cálculo de dicha tabla es costoso y, por lo general, solo se realiza cuando puede usarse para más de un ataque / contraseña.
SI usa la misma sal para todas las contraseñas, un atacante podría calcular previamente dicha tabla y luego aplicar fuerza bruta a sus contraseñas en texto claro ...
Siempre que genere una nueva sal aleatoria (la mejor criptográficamente fuerte) para cada contraseña que quiera almacenar el hash de no hay problema.
SI quieres fortalecer la seguridad aún más
Podrías calcular el hash varias veces (hash hash, etc.) - esto no te cuesta mucho pero hace que un ataque de fuerza bruta / calcular "tablas de arcoiris" sea aún más caro ... por favor no te inventes - existen métodos estándar probados para hacerlo, consulte, por ejemplo, http://en.wikipedia.org/wiki/PBKDF2 y http://www.itnewb.com/tutorial/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard
NOTA:
Utilizar este mecanismo es hoy en día obligatorio porque el "tiempo de CPU" (utilizable para ataques como tablas arcoiris / fuerza bruta, etc.) se está ampliando cada vez más (ver por ejemplo el hecho de que el servicio en la nube de Amazon está entre los 50 más rápidos supercomputadores en todo el mundo y pueden ser utilizados por cualquier persona por una cantidad comparativamente pequeña).
Aquí hay un buen artículo sobre criptografía: http://www.javacodegeeks.com/2012/02/introduction-to-strong-cryptography-p1.html
Consulte la sección Uso de los algoritmos hash en el mundo real, escenario 1 para la discusión de la sal.
Recomiendo usar http://docs.oracle.com/javase/6/docs/api/java/security/SecureRandom.html para generar su sal
La fuerza de sus contraseñas hasheadas y saladas depende de todos los siguientes factores:
- La fuerza del algoritmo hashing
- La aleatoriedad de la sal
- La aleatoriedad de la contraseña
Tu sistema es tan fuerte como el más débil de los anteriores.
Las preguntas a continuación son del sitio hermano Security StackExchange . Discuten hashing, sales, PBKDF2, brypt, scrypt y algunas otras cosas.
- Cómo segura contraseñas hash?
- ¿Algún experto en seguridad recomienda bcrypt para el almacenamiento de contraseñas?
También hay algunas discusiones previas desde aquí en también:
¿BCrypt es un buen algoritmo hash para usar en C #? ¿Dónde puedo encontrarlo?
En pocas palabras, una sal es una salvaguarda que hace que tome mucho tiempo recuperar una contraseña en caso de compromiso, tal como lo es un hash. Si atacas una contraseña, la sal no hará la diferencia. Si intenta utilizar un diccionario precalculado o prueba muchas contraseñas al mismo tiempo, tener una sal diferente para cada entrada aumentará en gran medida la cantidad de trabajo necesario y, en general, hará que no sea factible generar una tabla arcoiris adecuada.