DevToolPal
NL

TOTP-/HOTP-codegenerator

Genereer tweestapsverificatiecodes (TOTP en HOTP) uit een Base32-geheim of otpauth://-URI, met SHA-1/256/512, 6–8 cijfers en een live aftelling.

Draait lokaal, wordt nooit geüpload

Opties

Type
Cijfers
Tijdstap

Geheim (Base32) of otpauth://-URI

Codes

Het resultaat verschijnt hier

Wat het doet

Apps voor tweestapsverificatie zoals Google Authenticator, Microsoft Authenticator en 1Password tonen zescijferige codes die elke 30 seconden veranderen. Elke code is een eenmalig wachtwoord dat uit een gedeeld geheim wordt berekend: TOTP (RFC 6238) gebruikt de tijd en HOTP (RFC 4226) een teller. Deze tool berekent dezelfde codes uit het geheim, zodat je een 2FA-installatie kunt testen, een serverimplementatie kunt debuggen of kunt nagaan wat een code zou moeten zijn.

Je ziet de huidige code met een live aftelling, plus de vorige en volgende code, die servers vaak accepteren om kleine klokverschillen op te vangen.

Zo gebruik je het

  1. Plak het Base32-geheim (letters A–Z en cijfers 2–7; spaties en hoofdletters maken niet uit) of een volledige otpauth://-URI uit een QR-code. Klik op Voorbeeld om het te proberen.
  2. Kies TOTP of HOTP en stel het algoritme, de cijfers en de tijdstap in zoals bij het account. Instellingen in een otpauth-URI gaan voor.
  3. Vul bij HOTP de teller in en gebruik Teller +1 om door de codes te stappen.
  4. Kopieer de huidige code. De aftelling laat zien hoe lang hij geldig blijft.

Voorbeeld

Het demogeheim JBSWY3DPEHPK3PXP is de Base32-vorm van de bytes “Hello!” gevolgd door 0xDEADBEEF. De URI hieronder, zoals gecodeerd in een QR-code, beschrijft een account dat het met de standaardinstellingen gebruikt:

otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example&algorithm=SHA1&digits=6&period=30

Op Unix-tijd 1700000000 geeft dit geheim de code 324 550, en het venster heeft nog 10 seconden.

Hoe de code wordt berekend

Het geheim wordt van Base32 naar bytes gedecodeerd. Bij TOTP is de teller de Unix-tijd in seconden gedeeld door de tijdstap, naar beneden afgerond. De teller wordt als 8 bytes geschreven en met HMAC en het geheim ondertekend. Dynamische afkapping kiest op basis van de laatste nibble 4 bytes uit de HMAC-uitvoer, en het getal wordt teruggebracht tot het gevraagde aantal cijfers, met behoud van voorloopnullen.

Veelgestelde vragen

› Waarom komt mijn code niet overeen met die in mijn authenticator-app?

TOTP-codes hangen af van de klok, dus controleer eerst of de tijd van je apparaat automatisch wordt ingesteld. Controleer daarna of het algoritme, het aantal cijfers en de tijdstap bij het account passen. De meeste diensten gebruiken SHA-1, 6 cijfers en 30 seconden, en authenticator-apps negeren andere instellingen tenzij de QR-code ze noemt.

› Wat is het verschil tussen TOTP en HOTP?

TOTP (RFC 6238) gebruikt de huidige tijd gedeeld door de tijdstap als teller, dus de code verandert elke 30 seconden. HOTP (RFC 4226) gebruikt een teller die bij elke gebruikte code met één omhooggaat. Beide halen het geheim en de teller door HMAC en houden de laatste 6 tot 8 cijfers over.

› Wordt mijn geheim opgeslagen of ergens naartoe gestuurd?

Nee. De codes worden in je browser berekend met de Web Crypto API. Het geheim wordt niet opgeslagen, niet in de adresbalk gezet en niet in deellinks opgenomen; een gedeelde link bevat alleen de instellingen. Een 2FA-geheim geeft wel volledige toegang tot de tweede factor, dus plak alleen geheimen die van jou zijn.

› Kan ik dit gebruiken om tweestapsverificatie in mijn eigen app te bouwen?

Ja. Klik op Willekeurig geheim om een Base32-geheim van 160 bits te maken, zet het in een otpauth://-URI of QR-code voor je gebruikers en vergelijk de codes van je server met de codes hier. Servers accepteren meestal ook de vorige en de volgende code om klokverschillen op te vangen.