Saltar al contenido

¿Cómo uso el algoritmo Argon2 con password_hash?

Nuestro grupo de especialistas pasados muchos días de trabajo y de recopilar de datos, han obtenido la solución, deseamos que todo este artículo sea de utilidad en tu plan.

Solución:

¿Qué es Argón2? ¿Bcrypt es malo ahora?

Antes de PHP 7.2, el único algoritmo hash password_hash utilizado fue bcrypt. Al momento de escribir este artículo, bcrypt todavía se considera un hash fuerte, especialmente en comparación con sus predecesores, md5 y sha1 (ambos son inseguros porque son rápidos). Argon2 es simplemente un algoritmo más costoso para la fuerza bruta

Argon2i utiliza el acceso a la memoria independiente de los datos. Es más lento porque realiza más pasadas por la memoria para protegerse de los ataques de compensación. Es muy recomendable para hash de contraseñas y basado en contraseñas. key derivación.

Bcrypt sigue siendo un hash aceptable para contraseñas. No es necesario cambiar si no lo desea (a partir de la versión 7.2.0). También, PASSWORD_DEFAULT solo debe cambiar (según la política interna de PHP) en la próxima versión completa (7.3.0 o superior). Si desea asegurarse de continuar solo con bcrypt, puede usar PASSWORD_BCRYPT en lugar de. Sin embargo, esto es innecesario, como veremos más adelante.

¿Cómo se usa Argon2?

Primero, cambiaremos el segundo argumento de password_hash a uno de estos a constantes

  • PASSWORD_ARGON2I -PHP 7.2.0+
  • PASSWORD_ARGON2ID – PHP 7.3.0+ (preferido si está disponible, consulte las notas a continuación)

y luego tendremos que cambiar nuestras opciones. usos bcrypt cost como el parámetro de cuántas veces itera sobre la contraseña (mayor costo = mayor tiempo de hash). Sin embargo, hay diferentes factores de costo

password_hash('somepassword', PASSWORD_ARGON2I, ['memory_cost' => 2048, 'time_cost' => 4, 'threads' => 3]);

Desde el manual vemos lo que hacen estas opciones

  • memory_cost – Memoria máxima (en bytes) que se puede usar para calcular el hash Argon2 (predeterminado 1024)
  • time_cost – Cantidad máxima de tiempo que puede llevar calcular el hash Argon2 (predeterminado 2)
  • threads – Número de subprocesos a usar para calcular el hash Argon2 (predeterminado 2)

Entienda, antes de ir a cambiar estos, que un costo más alto aquí ralentizará su script. Querrá ejecutar una prueba en su servidor para encontrar una configuración que funcione mejor para usted. Por lo general, esto se realiza mediante un bucle en varias iteraciones de un costo determinado. El manual de PHP da un ejemplo de esto si lo necesita.

También tenga en cuenta que, mientras que bcrypt almacena 60 caracteres, Argon2 puede requerir más que eso. Idealmente, debe hacer que su campo de contraseña almacene 255 caracteres.

en que cambiamos password_verify?

La respuesta aquí es… nada. Entiende eso password_verify es lo suficientemente inteligente como para descubrir qué algoritmo se usó y manejarlo apropiadamente. Como se mencionó anteriormente, esto significa que si está utilizando PASSWORD_DEFAULTel valor predeterminado puede cambiar y no afectarlo negativamente (aunque es posible que deba ajustar los parámetros de costo). password_verify simplemente requiere un algoritmo que admita. Si cambia de bcrypt a Argon2, ambos verificarán de la misma manera, ya que todos los datos necesarios (sal, hash y costo) se almacenan para usted.

//Works for both bcrypt and Argon2
if(password_verify($user_password, $stored_hash)) 
    // password validated

Si desea actualizar los hash de bcrypt, puede hacerlo cuando un usuario inicie sesión correctamente (y, por lo tanto, le proporcione la contraseña sin hash). Simplemente verifica si tu hash comienza con $2y$ (el marcador bcrypt). Si es así, pase la contraseña proporcionada a password_hash nuevamente, pero con los argumentos de Argon2, y guárdelo en el campo de contraseña del usuario que inició sesión.

¿Qué es Argon2ID?

Introducido en PHP 7.3, Argon2ID realiza algunas mejoras sobre Argon2I como se indica en esta pregunta de Crypto.SE

El mejor ataque de compensación en Argon2id de 1 paso es el ataque combinado de almacenamiento bajo (para la primera mitad de la memoria) y el ataque de clasificación (para la segunda mitad), que reúnen el factor de aproximadamente 2,1.

Argon2ID funciona con los mismos argumentos con los que trabaja Argon2I.

Eres capaz de corroborar nuestra labor fijando un comentario o dejando una valoración te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *