Ft_otp

Description

Ft_otp: generador seguro de contraseñas TOTP

Después de proyectos como get_next_line, Ft_otp representa un paso más avanzado dentro del cursus de 42Madrid. Aquí no se trata solo de manipular archivos o memoria, sino de adentrarte en seguridad y autenticación: implementar un sistema TOTP (Time-based One-Time Password) capaz de generar contraseñas efímeras basadas en una clave maestra.


🌐¿Qué es Ft_otp?

Ft_otp es una herramienta que genera contraseñas temporales siguiendo el estándar TOTP. Estas contraseñas son útiles para autenticación de dos factores, y se crean a partir de una clave maestra que tú defines y proteges con cifrado.

El proyecto permite:

  • Implementar el algoritmo TOTP siguiendo la RFC 6238.

  • Generar y cifrar una clave maestra (ft_otp.key).

  • Producir contraseñas temporales verificables desde otro cliente que comparta la clave secreta.

  • Explorar conceptos de seguridad como HMAC y cifrado Base64.


🧩 Objetivo del proyecto

Crear un generador TOTP que cumpla con lo siguiente:

  • Recibir una clave maestra como semilla.

  • Generar códigos temporales de 6 dígitos basados en el tiempo actual.

  • Permitir verificación desde otra aplicación cliente que tenga la misma clave y temporizador.

  • Garantizar seguridad mediante cifrado de la clave y opciones de contraseña protegida.

Parte Bonus

Opciones avanzadas del proyecto incluyen:

  • Elegir y proteger con contraseña la clave maestra ft_otp.key, solicitándola cada vez que se genere un nuevo código temporal.

  • Desarrollar un cliente gráfico que genere y valide contraseñas maestras.

  • Añadir cualquier funcionalidad adicional útil para mejorar la seguridad o la usabilidad.


📚Conceptos clave

Para implementar Ft_otp correctamente, es necesario comprender:

  • TOTP (Time-based One-Time Password): Contraseñas de un solo uso basadas en el tiempo.

  • HOTP (HMAC-based One-Time Password): Algoritmo base de TOTP que se adapta reemplazando el contador con la hora actual.

  • HMAC: Función de hash con clave, usada para asegurar integridad y autenticidad de los datos.

La fórmula TOTP se define como:

TOTP value(K) = trunc(HOTP value(K, CT))

donde K es la clave secreta y CT es un contador derivado del tiempo actual. El resultado es un PIN de 6 dígitos que puede ser validado desde otro cliente que comparta la misma clave secreta y temporizador.

🔐 Seguridad y cifrado

La clave TOTP se puede cifrar con Base64, y se añadieron opciones útiles como las indicadas en la parte bonus para proteger la clave maestra y controlar su uso.


💻 Ejecución y uso

En el repositorio:

  • La carpeta src contiene el código fuente en Python, que permite modificar los parámetros del algoritmo.

  • El archivo ft_otp(debian).zip en out incluye un script con dependencias para Linux que funciona sin necesidad de instalar Python 3.

Opciones de uso del script:

# Generar nueva clave/pin TOTP
./ft_otp -k ft_otp.key
# Guardar una nueva clave hexadecimal de 64 caracteres
./ft_otp -g key.hex
# Cambiar la contraseña de cifrado de ft_otp.key
./ft_otp -p P_l1F4g7hC5o3UWD273fcCmVJrfeCDVEG3D4aDCXaCI=
# Modo interactivo TOTP
./ft_otp -k ft_otp.key -i SECONDS
# Generar clave aleatoria hexadecimal de 64 caracteres
./ft_otp -rk
# Generar contraseña aleatoria Base64
./ft_otp -rp
# Mostrar ayuda
./ft_otp -h

🐳 Prueba con Docker

Se configuró un Dockerfile que crea un contenedor con todas las dependencias:

  • Clonar el repositorio: git clone https://github.com/goldcod3/Ft_otp.git
  • Instalar Docker Desktop
  • Usar el Makefile para construir y ejecutar el contenedor: make && make exec

Dentro del contenedor, se sincronizan los directorios src y out con tu carpeta /home para editar y ejecutar el código cómodamente.


🚀 Conclusión

Ft_otp no solo enseña sobre TOTP y HMAC, sino que combina:

  • Seguridad y cifrado

  • Gestión de claves secretas

  • Desarrollo de scripts interactivos y automatización

  • Contenedores Docker para despliegue rápido

Es un proyecto perfecto para consolidar conocimientos en seguridad, Python y buenas prácticas de programación antes de abordar sistemas más complejos en 42Madrid.

💻 Código fuente: GitHub

Details