- La diferència fonamental d'entrada: L'HOTP calcula els valors resum a partir d'un comptador C que s'incrementa de manera monòtona, mentre que el TOTP substitueix C per un pas de temps d'època T (TempsUnixActual / 30).
- Herència directa: El TOTP és matemàticament una especialització de l'HOTP:
TOTP(K, Temps) = HOTP(K, T). Ambdós algorismes utilitzen exactament la mateixa funció de truncament dinàmic. - Factor arquitectònic decisiu: L'HOTP té estat (els servidors han de bloquejar i persistir els comptadors al disc en cada validació). El TOTP no té estat (stateless), cosa que permet als microserveis al núvol moderns validar testimonis en clústers distribuïts i amb balanceig de càrrega sense necessitat d'operacions d'escriptura centralitzades en bases de dades.
Orígens històrics: Dels testimonis de maquinari propietaris als estàndards web oberts
A principis de la dècada del 2000, l'autenticació corporativa en dos passos estava dominada per dispositius de maquinari propietaris com RSA SecurID. Aquests dispositius tancats i cars contenien vidres de quars interns sincronitzats amb servidors empresarials propietaris. Si una organització volia oferir seguretat multifactor a milers d'empleats, l'adquisició de maquinari i els costos de llicències propietàries eren exorbitants.
Per emancipar l'autenticació dels proveïdors propietaris, líders de la indústria van formar el consorci OATH (Initiative for Open Authentication) per oferir estàndards oberts i lliures de drets d'IETF que qualsevol enginyer de programari pogués inspeccionar, implementar i auditar lliurement:
Algorisme de contrasenya d'un sol ús basat en HMAC. Dissenyat per a microcontroladors de baix consum amb botons físics. En prémer el botó s'incrementa un comptador intern i es mostra un testimoni de 6 dígits en una pantalla LCD.
Algorisme de contrasenya d'un sol ús basat en el temps. Dissenyat amb l'auge dels telèfons intel·ligents. Aprofitant la sincronització horària de xarxa per NTP de la xarxa cel·lular, el TOTP va eliminar completament els desajustos d'estat dels botons físics.
Arquitectura de l'HOTP (RFC 4226) i mecànica de bytes del truncament dinàmic
La definició matemàtica bàsica de l'HOTP és enganyosament concisa:
Desglossament de paràmetres:
K: Clau secreta simètrica compartida (normalment una seqüència binària de 160 bits / 20 bytes descodificada de Base32).C: Enter de 8 bytes (64 bits) en format big-endian que actua com a comptador.HMAC-SHA-1: Codi d'autenticació de missatges basat en hash amb clau que produeix un resum criptogràfic de 20 bytes (160 bits).
🔍 Com converteix el truncament dinàmic (DT) 20 bytes en 6 dígits:
Un resum HMAC-SHA1 conté 160 bits (20 bytes). Extreure 6 dígits decimals uniformes requereix un mecanisme de selecció determinista i resistent a col·lisions definit a la secció 5.3 de l'RFC 4226:
Suposem que la clau secreta és la cadena ASCII "12345678901234567890" i el comptador C = 0. El resum HMAC-SHA1 resultant en hexadecimal és:
1. L'últim byte és 0x71. 0x71 & 0x0F = 0x01, de manera que Offset = 1.
2. Els bytes de l'1 al 4 són: 93 cf 18 50. Posar a zero el bit més significatiu (MSB) dóna 0x13cf1850, que en decimal equival a 332.339.280.
3. 332339280 mod 1000000 = 339280. L'OTP de 6 dígits resultant és 339280!
Evolució del TOTP (RFC 6238): La màgia dels passos de temps
L'HOTP requeria mantenir sincronitzat el comptador del client amb el del servidor. En dispositius de programari, comptar polsacions o clics introdueix un error humà constant.
L'RFC 6238 va substituir el comptador C per un pas de temps discret T derivat directament del rellotge de l'època Unix:
- TempsUnixActual: Segons transcorreguts des de 1970-01-01 00:00:00 UTC.
- T0: Referència d'inicialització de l'època (per defecte 0 en totes les implementacions modernes).
- X (Finestra temporal de pas): Durada recomanada estàndard de 30 segons.
- Funció d'arrodoniment cap avall ⌊ ⌋: Per a qualsevol marca de temps dins d'una finestra de 30 segons, T es manté invariant. Per exemple, entre els segons d'època 1728211200 i 1728211229, T s'avalua exactament com el mateix enter de 64 bits.
Serialització binària: Un cop calculat T, s'empaqueta en un búfer binari de 8 bytes en format big-endian (idèntic en estructura de memòria al comptador C de l'HOTP). Per tant, la fórmula unificada se simplifica a:
TOTP(K, Temps) = HOTP(K, T)
Aquesta elegància matemàtica explica per què les aplicacions d'autenticació renoven els testimonis de forma sincrònica cada 30 segons sense requerir una sincronització d'estat persistent.
HS[31] & 0x0F); a SHA-512 (resum de 64 bytes), s'obté del byte 63 (HS[63] & 0x0F). Tanmateix, en el 99,9% dels llocs web comercials (Google, Microsoft, GitHub, AWS), SHA-1 continua sent el valor predeterminat omnipresent per motius de compatibilitat amb clients mòbils heretats.
Matriu comparativa exhaustiva (HOTP vs. TOTP)
| Dimensió | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Variable d'entrada | Comptador d'esdeveniments C (increment monòton) | Pas de temps T (finestra d'època Unix de 30 segons) |
| Temps de vida del testimoni | Indefinit (vàlid fins que es consumeix en el següent inici de sessió) | Estrictament 30 segons (s'invalida automàticament) |
| Arquitectura del servidor | Amb estat / Stateful (requereix escriptures atòmiques en base de dades per inici de sessió) | Sense estat / Stateless (verificació independent amb NTP) |
| Exposició a atacs de reproducció | Moderada (el testimoni interceptat continua sent vàlid fins que s'utilitza) | Mínima (restringida als segons restants de la finestra actual) |
| Modalitat principal de fallada | Desincronització del comptador (polsacions accidentals de tecles) | Desviació del rellotge (desfasament horari al telèfon del client) |
| Funcions de resum admeses | Exclusivament HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Adopció al sector | Claus físiques bancàries heretades, controls d'accés físic especialitzats | 99,9% dels autenticadors web moderns |
Desincronització vs. desviació temporal: Mitigacions tècniques
En entorns de producció distribuïts, els clients i els servidors pateixen desviacions de manera inevitable. Els criptògrafs van dissenyar finestres de compensació explícites per mantenir la fiabilitat:
Si un usuari prem el botó del testimoni 5 vegades sense enviar el formulari, el comptador del client arriba a C+5 mentre que el servidor es queda a C.
L'RFC 4226 especifica que, en autenticar-se, el servidor calcula una finestra de cerca anticipada (look-ahead) que abasta [C+1, C+s] (habitualment s=20). Si es troba una coincidència, el servidor salta endavant i sincronitza el comptador C immediatament.
A causa de la latència de la xarxa o de la desviació del rellotge del dispositiu client (p. ex., un telèfon amb 10 segons de retard), els testimonis poden arribar en passos de temps adjacents.
Els servidors de producció avaluen una matriu de 3 finestres: [T-1, T, T+1], ampliant eficaçment la finestra d'acceptació a 90 segons.
Quan els servidors verifiquen si el codi enviat per l'usuari coincideix amb el codi calculat, les comprovacions ingènues d'igualtat de cadenes (com ara userOtp === serverOtp) s'aturen en el primer caràcter no coincident. Un atacant que mesuri diferències microscòpiques en els temps de resposta de la xarxa pot reconstruir els dígits de manera iterativa. Els sistemes empresarials apliquen comparacions d'igualtat en temps constant (p. ex., crypto.timingSafeEqual a Node.js) per neutralitzar l'anàlisi de canals laterals de temporització.
Per què el TOTP ha conquerit la internet moderna
El triomf decisiu del TOTP sobre l'HOTP a la web va estar impulsat per tres imperatius arquitectònics:
En microserveis distribuïts en múltiples regions, qualsevol instància de servidor amb un rellotge sincronitzat per NTP pot validar testimonis TOTP sense consultar ni bloquejar un registre centralitzat a la base de dades.
Els telèfons intel·ligents calibren contínuament els seus rellotges del sistema mitjançant antenes de telefonia mòbil i GPS, eliminant la desviació del rellotge sense requerir cap manteniment de maquinari físic.
Els testimonis HOTP continuen sent vàlids indefinidament fins que s'utilitzen. Els testimonis TOTP caduquen en 30 segons, neutralitzant registres compromesos i captures passives de paquets automàticament.
Experimenteu el càlcul de TOTP en temps real a 2FA-Tool
Comproveu com la vostra cadena secreta Base32 es transforma en codis dinàmics de 6 dígits mitjançant el truncament dinàmic HMAC-SHA1. 100% fora de línia al vostre navegador.
📚 Guies de seguretat relacionades
Com transferir comptes de 2FA entre telèfons intel·ligents mitjançant codis QR fora de línia i sincronització al núvol.
Normes de compliment, desat de codis de recuperació, interacció amb claus SSH i fluxos de rescat.
Com recuperar l'accés a Google, Microsoft, Steam, Binance, Apple i Discord.