¿Qué tan seguros son los hashes sha256 + salt para el almacenamiento de contraseñas [duplicado]

19

Comencé a leer sobre el hashing de contraseñas recientemente en varios sitios como esta página en crackstation y otros, y para qué He entendido, debería evitar el uso de algoritmos de hashing como md5 y sha1, ya que están desactualizados y, en cambio, debería usar sha256 con sal. Pero, después de leer esta página en el manual de php, noté que desalientan el uso de incluso sha256 y en su lugar recomiendan usar las funciones password_hash (). También me di cuenta de que la mayoría de estos artículos / páginas se escribieron en el intervalo de 2011-13, por lo que no estoy seguro de cuán seguras son las contraseñas hash sha256 con sales hoy en día y si aún deben usarse en aplicaciones web.

    
pregunta Yuran 25.05.2015 - 20:23
fuente

3 respuestas

26

Los hashes de propósito general han quedado obsoletos para las contraseñas durante más de una década. El problema es que son rápidos, y las contraseñas tienen poca entropía, lo que significa que la fuerza bruta es muy fácil con cualquier hash de propósito general. Debe utilizar una función que sea deliberadamente lenta, como PBKDF2, bcrypt o scrypt. Crackstation realmente explica esto si lees toda la página. Por otro lado, MD5 y SHA-1 no son más débiles que SHA-2 en el contexto del hashing de contraseñas; Su debilidad no es relevante para las contraseñas.

    
respondido por el cpast 25.05.2015 - 20:48
fuente
19

Como dice @cpast, el principal problema de un solo SHA-256 es que es demasiado rápido. Un atacante con una GPU de juegos fuera de la plataforma puede probar las contraseñas a una velocidad que se cuenta en billones por segundo (billones estadounidenses, pero eso es mucho).

Otro problema es que existe la posibilidad de combinar cosas de manera incorrecta. SHA-256 es una función hash: toma una entrada y produce una salida. Si alimenta SHA-256 con una contraseña y un salt, entonces realmente está definiendo sus propios protocolos criptográficos, basados en SHA-256 con algunas cosas adicionales, las cosas adicionales que indican cómo la contraseña y el salt Se combinan para hacer la entrada SHA-256. Se sabe que diseñar protocolos criptográficos es difícil, especialmente porque no existe una prueba confiable para la seguridad. No puedes saber si hiciste lo correcto. (Bueno, cuando su servidor se ha convertido en el host de un grupo completo de piratas informáticos que se conectan desde una docena de países diferentes de los que nunca había oído hablar, entonces sabe que hizo mal , pero es demasiado tarde. ..)

El hashing de contraseña adecuado tiene una teoría. Lea esta respuesta como una introducción al tema.

    
respondido por el Thomas Pornin 25.05.2015 - 21:43
fuente
10

sha256 no está diseñado para hash de contraseñas. Para las contraseñas de hash, debería preferir utilizar funciones de hash creadas para este uso. Encontrará toda la información requerida a continuación en otra pregunta que aborde una solicitud similar: El algoritmo hash de contraseña más seguro (s)? .

En la pregunta anterior, aprenderá por qué las funciones hash de propósito general como sha256 no tienen las propiedades correctas para garantizar un almacenamiento seguro de contraseñas (incluso cuando se aplican una gran cantidad de veces) y también encontrará una clasificación de las funciones hash más recomendadas dedicadas para el manejo seguro de contraseñas:

  1. scrypt : que todavía es bastante nuevo (publicado en 2012), pero está diseñado para garantizar una mejor seguridad que su predecesor bcrypt,
  2. bcrypt : fue diseñado específicamente para el almacenamiento de contraseñas y fue la opción recomendada durante mucho tiempo,
  3. PBKDF2 : en realidad está diseñado como una función clave de estiramiento, es decir. una forma segura de derivar una clave criptográfica a partir de una contraseña determinada, pero sus propiedades también lo hacen adecuado para el almacenamiento de contraseñas.

En su pregunta mencionó la función PHP password_hash () . Esta función no es un algoritmo hash per se. De hecho, esta función se usa para permitir que PHP seleccione el algoritmo hash de contraseña más confiable disponible sin tener que modificar su código.

Como se indica en la documentación, según PHP 5.5.0, bcrypt se selecciona de forma predeterminada.

    
respondido por el WhiteWinterWolf 25.05.2015 - 21:14
fuente

Lea otras preguntas en las etiquetas