
Algoritmos OCRA, HOTP y TOTP
Pequeño resumen explicativo de los principales algoritmos de generación de OTP.
DIVULGACIÓNSEGURIDADAUTENTICACIÓNTIPS
JLJuarez
2/1/20254 min read
Sigo con tema relacionados con la autenticación, si ya se que soy un poco espeso, pero no en vano me he dedicado a ello muchos años de mi vida profesional y aunque estoy haciendo un gran esfuerzo por cambiar de rumbo, no puedo evitar tocar estos temas. Espero que no os resulten aburridos y por lo menos os resulten algo útiles los temas que comparto, bueno al lío.
Introducción
Hoy le toca a los algoritmos OCRA, HOTP y TOTP, los cuales usamos a diario y en muchos casos sin saberlo y cuya principal utilidad es la generación de contraseñas de un solo uso, que son fundamentales para proveer autenticación sólida en sistemas críticos. Cada uno de estos algoritmos dispone de características y casos de uso específicos:
HOTP (HMAC-based One-Time Password)
TOTP (Time-based One-Time Password)
OCRA (OATH Challenge-Response Algorithm)
Estos métodos se basan en las especificaciones de la Initiative for Open Authentication (OATH), que busca definir y promover estándares abiertos para la autenticación fuerte.
Descripción
HOTP (HMAC-based One-Time Password)
El HOTP se define en el RFC 4226. Su principio básico consiste en generar un código de un solo uso basándose en un contador que se incrementa cada vez que se solicita un token.
Funcionamiento:
Se tiene un contador (inicializado generalmente en 0) que se incrementa con cada nuevo token generado.
Se aplica una función HMAC-SHA1 usando una clave secreta compartida y el valor actual del contador.
Se realiza una reducción del resultado HMAC a un número entero con la longitud de dígitos deseada (por ejemplo, 6, 7 u 8 dígitos).
Ventaja principal: El código generado no expira en un tiempo determinado, sino que queda atado al valor del contador. Esto es útil en sistemas donde se controla exactamente la frecuencia de generación y validación de códigos.
Desventaja: Al estar basado en un contador, puede darse el problema de desincronización entre servidor y cliente si uno incrementa el contador y el otro no.
Conclusiones finales
HOTP: es una buena solución en casos donde el número de usos es el factor más importante (contador), pero se debe tener cuidado con la desincronización.
TOTP: se ha convertido en el estándar de facto para la mayoría de aplicaciones de autenticación de dos factores, principalmente por su simplicidad de uso y el amplio soporte que existe en aplicativos y dispositivos.
OCRA: lleva el factor de seguridad un paso más allá al implementar un mecanismo de desafío-respuesta, permitiendo una verificación contextual que puede mitigar ataques más sofisticados que se aprovechan de la falta de autenticación mutua de los participantes.
Cada sistema tiene su espacio y caso de uso ideal. La elección adecuada dependerá de la naturaleza de la aplicación, el nivel de seguridad requerido y la facilidad de implementación deseada, como de costumbre corre de nuestra cuenta realizar un análisis que permita seleccionar el mas adecuado.


TOTP (Time-based One-Time Password)
El TOTP se define en el RFC 6238. Se basa en el mismo principio de la función HMAC que HOTP, pero, en lugar de usar un contador, utiliza el tiempo como variable para generar la contraseña de un solo uso.


Funcionamiento:
Se define un intervalo de tiempo, típicamente 30 segundos (aunque puede variar).
En cada intervalo, se calcula el token usando una función HMAC (generalmente HMAC-SHA1, HMAC-SHA256, etc.), la clave secreta compartida y el timestamp truncado al intervalo de tiempo correspondiente.
Al igual que en HOTP, se formatea el resultado HMAC para generar la cantidad de dígitos requerida.
Ventaja principal: No requiere manejar un contador que pueda perder sincronización. Mientras el reloj del cliente y el del servidor estén razonablemente sincronizados, la validación funciona.
Desventaja: Requiere una sincronización del tiempo precisa. Si el dispositivo del usuario y el servidor tienen una desviación horaria considerable, es posible que el código TOTP falle.
Funcionamiento:
El servidor genera un challenge (un reto), que puede ser un valor numérico, alfanumérico o un mensaje estructurado.
El usuario o dispositivo cliente aplica una función de tipo HMAC usando la clave secreta compartida, el challenge y posiblemente otros parámetros (contador, tiempo, PIN, etc.).
El resultado es un código de respuesta que el servidor valida, en este caso no es explícitamente necesario formatear el resultado como ocurre con HOTP y TOTP.
Ventaja principal: Permite un escenario más flexible, ya que el reto puede ser personalizado, incluyendo datos contextuales como el monto de una transacción, la hora, el identificador de la sesión, etc.
Desventaja: Requiere un mecanismo adicional para transportar el challenge y la response, lo que puede hacer la implementación algo más compleja que HOTP o TOTP.


OCRA (OATH Challenge-Response Algorithm)
El OCRA se define en el RFC 6287. A diferencia de HOTP y TOTP, OCRA se basa en el concepto de Challenge-Response, es decir, el servidor envía un desafío (challenge) al cliente, y el cliente responde con un código único basado en diferentes parámetros.
Diferencias
Base de Cálculo:
HOTP: Se basa en un contador que se incrementa por cada nueva generación de token.
TOTP: Se basa en intervalos de tiempo (generalmente 30 segundos).
OCRA: Se basa en el challenge proporcionado por el servidor, junto con otros factores configurables (contador, tiempo, etc.).
Mecanismo de Sincronización:
HOTP: Maneja sincronización mediante comparación del contador (posible desajuste).
TOTP: Depende de la sincronización horaria entre servidor y cliente.
OCRA: Depende de la correcta entrega y gestión del challenge y la response en el flujo de comunicación.
Complejidad de Implementación:
HOTP/TOTP: Simples de integrar. Muchas bibliotecas y servicios populares brindan soporte inmediato.
OCRA: Puede requerir más trabajo, pues hay que intercambiar y validar retos y respuestas de manera confiable.
Historias de un Tech Lead
Reflexiones sobre arquitectura, desarrollo de software y otras cosas.
© 2025. All rights reserved.
NOTA:
Si, ya lo se, casi todas las imágenes contenidas en este blog, han sido y posiblemente serán generadas por IA, por desgracia no dispongo de capacidades artísticas adecuadas y mucho menos de tiempo para buscar imágenes adecuadas en la red. Por lo que muy pocas serán creadas por mi directamente.