bcrypt: hash seguro de contraseñas en Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción

Proteger las contraseñas de los usuarios es una tarea fundamental en el desarrollo de software moderno. En una era de ciberamenazas en constante aumento, el uso de funciones hash simples u obsoletas como MD5 o SHA-1 genera graves riesgos de seguridad. Estos algoritmos son vulnerables a ataques de tablas rainbow y tienen una alta velocidad de cómputo, lo que los hace susceptibles a los métodos de descifrado actuales.

Bcrypt es una función hash criptográfica adaptativa, diseñada específicamente para el almacenamiento seguro de contraseñas. Creado en 1999 por Niels Provos y David Mazières, este algoritmo se basa en el cifrado Blowfish e incluye un sistema de sal incorporado, lo que lo hace extremadamente resistente a varios tipos de ataques.

En el ecosistema de Python, bcrypt está disponible a través de la biblioteca del mismo nombre, que es un envoltorio de Python para la implementación original de OpenBSD. Esta biblioteca es utilizada por millones de desarrolladores en todo el mundo y se considera el estándar de oro para el hash de contraseñas en aplicaciones Python.

¿Qué es la biblioteca bcrypt?

La biblioteca bcrypt para Python es una herramienta robusta y probada para el hash criptográfico de contraseñas. Es un envoltorio de Python sobre la implementación original en C de bcrypt, lo que garantiza un alto rendimiento y fiabilidad.

Características clave de bcrypt

Adaptabilidad: La principal fortaleza de bcrypt radica en su naturaleza adaptativa. El parámetro "cost factor" permite aumentar la complejidad del cálculo a medida que crece la potencia de cómputo de los ordenadores, asegurando una protección a largo plazo.

Sal incorporada: Cada hash incluye automáticamente una sal única, lo que elimina la posibilidad de usar tablas rainbow para descifrar contraseñas.

Robustez criptográfica: El uso del algoritmo Blowfish con múltiples rondas de cifrado proporciona un alto nivel de protección criptográfica.

Estandarización: Bcrypt sigue un formato estandarizado, lo que garantiza la compatibilidad entre diferentes implementaciones y plataformas.

Instalación y configuración

Instalación con pip

La instalación de la biblioteca bcrypt se realiza de forma estándar a través del gestor de paquetes pip:

pip install bcrypt

Requisitos del sistema

La biblioteca bcrypt tiene requisitos mínimos del sistema:

  • Python 3.6 o superior
  • Sistemas operativos compatibles: Windows, macOS, Linux
  • Compilación automática de extensiones C (requiere un compilador)

Verificación de la instalación

Después de la instalación, puedes verificar que la biblioteca funciona correctamente:

import bcrypt
print(bcrypt.__version__)

Fundamentos de bcrypt

Principio de funcionamiento del algoritmo

Bcrypt utiliza el siguiente esquema de trabajo:

  1. Generación de una sal aleatoria
  2. Aplicación del algoritmo Blowfish con un número determinado de rondas
  3. Creación del hash final, que incluye la sal y los parámetros

Formato del hash de salida

El hash resultante de bcrypt tiene la siguiente estructura:

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW

Donde:

  • $2b$ — identificador de la versión del algoritmo
  • 12 — parámetro cost (número de rondas)
  • R9h/cIPz0gi.URNNX3kh2O — sal (22 caracteres)
  • PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW — el hash propiamente dicho (31 caracteres)

Inicio rápido

Ejemplo básico de uso de bcrypt:

import bcrypt

# La contraseña debe estar en formato de bytes
password = b"supersecret123"

# Generación del hash
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
print(f"Hash: {hashed}")

# Verificación de la contraseña
if bcrypt.ch                    

Recommendations