Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
app:vauth [2024/10/10 15:45] – creado thejuanvisu | app:vauth [2024/10/17 15:20] (actual) – thejuanvisu | ||
---|---|---|---|
Línea 11: | Línea 11: | ||
* Validar que la contraseña no esté incluida dentro de una lista de contraseñas conocidas como poco seguras. | * Validar que la contraseña no esté incluida dentro de una lista de contraseñas conocidas como poco seguras. | ||
- | También es buena práctica no desvelar que parte de la autenticación es incorrecta. No se recomienda mostrar un mensaje diciendo que el usuario no existe o la contraseña no es correcta. | + | También es buena práctica no desvelar que parte de la autenticación es incorrecta. No se recomienda mostrar un mensaje diciendo que el usuario no existe o la contraseña no es correcta. |
+ | |||
+ | Por otro lado, las contraseñas NUNCA se deberían de almacenar en texto plano ya que si un atacante puede acceder a las bases de datos internas puede hacerse fácilmente con las contraseñas como fue el caso del hackeo a playstation network. Facebook fue multada con 91 Millones de euros por almacenar las contraseñas en texto plano. | ||
+ | |||
+ | ===== Hash ===== | ||
+ | Para no almacenar las contraseñas en claro, una tecnica muy típica es la de Hash and Salt. Un hash es un algoritmo matemático que transforma un bloque arbitrario de datos en una nueva serie de caracteres de longitud fija. Este tipo de funciones son unidireccionales y no reversibles, | ||
+ | * Asegurar que un fichero no se ha modificado durante una transmisión | ||
+ | * Firmar digitalmente un documento | ||
+ | * Hacer ilegibles las contraseñas | ||
+ | |||
+ | Los algoritmos de cifrado son revesibles, lo que implica que si un atacante obtiene la clave de cifrado y la base de datos de usuarios, puede obtener las claves. Como las funciones hash no son reversibles, | ||
+ | |||
+ | Las funciones hash son vulnerables a la técnica de rainbow tables que consiste en usar diccionarios de hash para hacer un ataque. Para mitigar estos ataques se combinan los hash con fragmentos aleatorios (Salt) que se concatenan a la contraseña para generar siempre un hash difícil de predecir: | ||
+ | - Antes de almacenar la contraseña se concatena con un fragmento aleatorio | ||
+ | - La concatenación resultante se procesa con la función hash | ||
+ | - Se almacenan tanto el hash como el salt. | ||
+ | |||
+ | Durante el proceso de verificación de contraseña se hace lo siguiente: | ||
+ | - Se obtiene el salt usado | ||
+ | - Se concatena la contraseña y el salt y se les aplica la función hash | ||
+ | - Se compara el hash con el valor almacenado en la base de datos. | ||
+ | |||
+ | ==== PBKDF2 ==== | ||
+ | Permite especificar un salt y también el número de iteraciones que se realizan para calcular el hash final. | ||
+ | ==== Bcrypt ==== | ||
+ | Diseñado para ralentizar los ataques de fuerza bruta. Incluye un valor de trabajo configurable (round) que cuanto mayor sea, mayor tiempo tardará el algoritmo en calcular el hash. En la mayoría de sus implementaciones añade un salt aleatorio de forma automática. | ||
+ | |||
+ | |||
+ | |||
+ |