Conociendo BCRYPT el protector de las contraseñas en php

El uso de bcrypt para el hash de contraseñas proporciona una sólida protección contra ataques de diccionario y de fuerza bruta. Aquí te explico por qué bcrypt es eficaz contra estos ataques y qué tan difícil sería comprometer una contraseña hasheada con bcrypt, específicamente con un costo de $2y$10.

Ya no se usa md5 ni SHA256 se usa Bcrypt como password_default en nuestro amado PHP.

¿Por qué bcrypt es efectivo?

  1. Costo de Cálculo (Work Factor):
    • El parámetro $2y$10 en bcrypt indica un costo de 10. Este parámetro especifica la cantidad de iteraciones que bcrypt realiza al generar el hash. A mayor número de iteraciones, más tiempo y recursos computacionales se necesitan para generar un hash.
    • El costo aumenta exponencialmente con cada incremento en el valor. Por ejemplo, aumentar el costo de 10 a 12 aumenta el tiempo de cálculo del hash en aproximadamente 4 veces. Esto hace que los ataques de diccionario y fuerza bruta sean mucho más lentos y costosos.
  2. Sal Aleatoria:
    • bcrypt utiliza una sal (salt) aleatoria única para cada contraseña. Esto significa que incluso si dos usuarios tienen la misma contraseña, sus hashes serán diferentes. La sal impide ataques de tablas de arco iris (rainbow tables), ya que cada hash es único.
  3. Lentitud Intencionada:
    • bcrypt está diseñado para ser intencionalmente lento, lo que ralentiza los ataques de fuerza bruta. Esto es parte de su fortaleza; incluso con hardware potente, el tiempo necesario para verificar cada intento de contraseña se vuelve prohibitivo.

¿Qué tan difícil es atacar un hash bcrypt con un diccionario?

1. Ataques de Diccionario:

  • En un ataque de diccionario, el atacante prueba contraseñas comunes o previamente comprometidas. Debido al costo de cálculo elevado de bcrypt, el atacante tiene que realizar muchas iteraciones para cada intento de contraseña.
  • A un costo de $2y$10, aunque se pueda manejar en términos de tiempo en hardware moderno, el número de intentos posibles sigue siendo extremadamente alto, lo que hace que un ataque de diccionario sea lento y poco práctico para contraseñas fuertes.

2. Ataques de Fuerza Bruta:

  • Los ataques de fuerza bruta implican probar todas las posibles combinaciones de contraseñas. La naturaleza exponencial de la complejidad del bcrypt hace que este tipo de ataques sean prácticamente inviables.
  • Con un costo de $2y$10(valor predeterminado en PHP), incluso un sistema potente tendría dificultades para realizar un ataque de fuerza bruta en un tiempo razonable.

3. Hardware y Tiempo:

  • La eficiencia de un ataque depende en gran medida del hardware utilizado. Un atacante con hardware especializado (como GPUs o ASICs) podría intentar ataques más rápidos, pero aún así, el costo elevado de bcrypt juega un papel crucial en la defensa.

Ejemplo de Tiempo Estimado

A modo de ejemplo, supongamos que un hash bcrypt con $2y$10 toma aproximadamente 0.1 segundos para calcular en un sistema moderno. Si un atacante puede intentar 1,000 contraseñas por segundo (una tasa optimista), aún necesitaría mucho tiempo para probar millones de contraseñas.

Conclusión

bcrypt con un costo de $2y$10 ofrece una robusta protección contra ataques de diccionario y de fuerza bruta. La combinación de sal aleatoria y un alto costo computacional hace que la tarea de descifrar contraseñas hasheadas sea muy difícil, especialmente cuando las contraseñas son lo suficientemente largas y complejas.

Para mejorar la seguridad, siempre es recomendable usar contraseñas largas y complejas, y ajustar el costo de bcrypt según el hardware disponible y el nivel de seguridad requerido.

Deja una respuesta

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