TOTP-generator

Resultaten

Elke keer dat Google Authenticator of Authy een zescijferige code toont die elke 30 seconden verandert, is dat TOTP: een HMAC van een gedeelde geheime sleutel en de huidige Unix-tijd, gestandaardiseerd in RFC 6238. Deze generator berekent dezelfde codes uit elke willekeurige Base32-sleutel. Dat is handig om een nieuwe koppeling met tweestapsverificatie (2FA) te debuggen, uit te zoeken waarom een dienst uw codes afwijst, of te bekijken hoe het algoritme op andere parameters reageert. Gebruik hier testsleutels: de code wordt op onze server berekend, dus de echte sleutels die uw accounts beschermen horen in een authenticator-app en niet op een webpagina.

Zo werkt deze TOTP-generator

  1. 1

    Plak een Base32-sleutel

    Letters A-Z en cijfers 2-7, het formaat in otpauth://-QR-codes. Spaties en kleine letters zijn geen probleem; al het andere wordt gemeld als ongeldige Base32.

  2. 2

    Kies het hash-algoritme

    SHA-1 wordt door vrijwel elke dienst gebruikt; stap alleen over op SHA-256 of SHA-512 als de dienst dat uitdrukkelijk vereist.

  3. 3

    Stel cijfers en periode in

    Kies 6, 7 of 8 cijfers en een venster van 30 of 60 seconden. De standaardcombinatie is 6 cijfers per 30 seconden.

  4. 4

    Lees de huidige code af

    De code wordt elke seconde ververst en het aftellen laat zien hoeveel seconden het huidige venster nog heeft.

  5. 5

    Vergelijk de otpauth-URI

    De tool toont de otpauth://-URI voor uw parameters, zodat u die kunt vergelijken met wat de instel-QR-code van een dienst codeert.

Het algoritme in gewone taal

TOTP is HOTP (eenmalig wachtwoord op basis van HMAC, RFC 4226) waarbij de teller is vervangen door de huidige Unix-tijd gedeeld door de tijdstap (meestal 30 seconden):

counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits

Uw apparaat en de server doen dezelfde berekening met dezelfde sleutel en dezelfde klok, en komen dus op dezelfde code uit zonder dat die code ooit wordt verstuurd. Een 6-cijferige code is simpelweg de afgekapte HMAC modulo 10^6. Geen magie, alleen hashing.

Gangbare parameters

Dienst Algoritme Cijfers Periode
De meeste websites en apps SHA-1 6 30 s
GitHub SHA-1 6 30 s
Cloudflare SHA-1 6 30 s
Microsoft-accounts SHA-1 6 30 s
Sommige banken en zakelijke VPN’s SHA-256 of SHA-512 8 60 s

Wijst een dienst uw codes af, controleer dan eerst het aantal cijfers en de periode, en daarna het algoritme. Weet ook dat sommige authenticator-apps afwijkende parameters stilzwijgend negeren (Google Authenticator behandelde vroeger alles als SHA-1, 6 cijfers, 30 seconden). Test dus altijd met precies de app die uw gebruikers zullen gebruiken.

Sleutels veilig bewaren

  • Stuur een 2FA-sleutel nooit per e-mail of bericht. Zodra die in een postvak staat, blijft hij voorgoed in de logs en back-ups van de provider.
  • Stel 2FA in door de QR-code te scannen. De QR-code bevat een otpauth://totp/...-URI die sleutel, algoritme, cijfers en periode in één ondubbelzinnig pakket bundelt.
  • Maak een back-up bij het instellen. Bewaar de herstelcodes, of de sleutel zelf, in een wachtwoordmanager; zonder die staat u buiten als u uw telefoon kwijtraakt.
  • Eén sleutel per dienst. Elke dienst geeft bij het instellen een eigen sleutel uit; lekt er een uit, stel 2FA daar dan opnieuw in zodat de oude sleutel stopt met werken.

Klokafwijking

TOTP werkt alleen zolang beide klokken gelijk lopen. Deze pagina berekent de codes met de klok van de server. Wijkt de code hier af van uw authenticator-app, dan is de klok van het apparaat de eerste verdachte. De meeste validators accepteren één venster afwijking naar beide kanten (30 tot 60 seconden); daarbuiten synchroniseert u de apparaatklok via NTP voordat u de sleutel de schuld geeft.

Gebruik hier testsleutels

Deze tool berekent de code op onze server: de sleutel die u invoert wordt bij elke update via HTTPS verzonden en verschijnt ook in de pagina-URL wanneer u tussen de stappen van de tool navigeert. Voor ontwikkeling, demo’s en debuggen met wegwerpsleutels is dat prima. Het is niet de plek voor de echte sleutel die uw e-mail of bankrekening beschermt; die hoort in een speciale authenticator-app op uw telefoon. Hebt u al een echte sleutel buiten uw authenticator geplakt, stel 2FA bij die dienst dan opnieuw in zodat de sleutel wordt vervangen.

Veelgestelde vragen

Beschouw deze pagina als een ontwikkel- en testhulpmiddel, niet als een kluis. De code wordt op de server berekend, dus de sleutel gaat via HTTPS naar onze server en kan tussen de stappen in de pagina-URL verschijnen. Gebruik gerust demo- of ontwikkelsleutels; plak nooit de echte sleutel van een account dat u belangrijk vindt. Is dat al gebeurd, stel 2FA bij die dienst dan opnieuw in om de sleutel te vervangen.

Controleer eerst de parameters: algoritme, aantal cijfers en periode moeten exact overeenkomen met wat de dienst heeft uitgegeven. Controleer daarna de klokken: deze pagina gebruikt de klok van de server, dus een verschil wijst meestal naar het andere apparaat. Bedenk tot slot dat sommige apps afwijkende parameters negeren; Google Authenticator is het klassieke voorbeeld.

Alleen Base32: letters A tot Z en cijfers 2 tot 7, met optionele =-opvulling. Spaties worden verwijderd en kleine letters automatisch omgezet. Sleutels in hex of ruwe bytes moeten eerst naar Base32 worden omgezet, anders meldt de tool een ongeldige Base32-sleutel.

Dan staat u buiten de 2FA van dat account. Gebruik de herstelprocedure van de dienst (herstelcodes, identiteitscontrole, sms als terugvaloptie). Bewaar bij het instellen altijd de herstelcodes of de oorspronkelijke QR-code op een veilige plek.

Ja. Genereer op de server een willekeurige sleutel van minstens 128 bits (RFC 4226 raadt 160 aan), toon die eenmalig als QR-code en valideer ingestuurde codes door dezelfde HMAC te berekenen, doorgaans met één venster tolerantie naar beide kanten. Er zijn volwassen bibliotheken voor elke stack: pyotp (Python), otplib (JavaScript), rotp (Ruby).

Gerelateerde tools

Tool beschikbaar in andere talen