Eenmalige codes kunnen op je telefoon volkomen correct zijn en toch in dezelfde seconde door de server worden geweigerd. Beide kanten berekenen dezelfde functie uit een gedeeld geheim en de huidige tijdstap, dus onenigheid over de tijd levert onenigheid over de code op. Dat maakt klokdrift een storing die relevant is voor de beveiliging, en niet alleen een ergernis.

Twee klokken zijn hier van belang, en het repareren van de zichtbare is het deel dat mensen als eerste doen. Degene die meestal aandacht nodig heeft, is de andere.

De code is een functie van tijd, geen wachtwoord

TOTP neemt het gedeelde geheim en een teller die van de huidige tijd is afgeleid, haalt beide door een hash met sleutel en kort het resultaat in tot een korte decimale reeks, zoals gespecificeerd in RFC 6238. De teller gaat bij elke tijdstap vooruit, gewoonlijk dertig seconden, zodat hetzelfde geheim een nieuwe waarde oplevert wanneer de stap verandert. De verificateur herberekent de verwachte waarde voor de huidige stap en vergelijkt, wat hetzelfde geheim en hetzelfde idee van nu vereist. Een wachtwoord blijft herbruikbaar tot het wordt gewijzigd, terwijl deze waarde verloopt op een grens die de client niet kan zien.

Daarom werkt de ene code en mislukt de volgende enkele ogenblikken later. Het verklaart ook waarom het kopiëren van een code uit een chatbericht zo'n onbetrouwbare gewoonte is.

Twee klokken moeten overeenkomen, niet één

Het registratiemateriaal is het eerste gedeelde ding, en de tijd is het tweede. Als het geheim klopt terwijl de klokken meer verschillen dan het getolereerde venster, belandt elke gegenereerde waarde in de verkeerde stap en wordt geweigerd. Als de klokken overeenkomen terwijl het geheim onjuist is, wordt elke waarde ook geweigerd, en beide fouten zien er op het inlogscherm identiek uit. Ze scheiden betekent de accountinvoer en de tijd afzonderlijk controleren, in die volgorde.

De klok van de verificateur verdient hetzelfde onderzoek als die van het apparaat. Een server met een kapotte tijdbron weigert de juiste codes van alle gebruikers tegelijk, en de rapporten zullen een plotselinge storing beschrijven in plaats van een drift. Dat patroon is de moeite waard te herkennen, want de oplossing hoort op de server en niet op honderd telefoons.

Wat het verbreden van het venster kost

Implementaties kunnen een code uit een aangrenzende stap accepteren om kleine verschillen op te vangen, en die tolerantie is een ontwerpbeslissing, geen gratis aanpassing. Elke extra stap vermenigvuldigt het aantal waarden dat op enig moment geldig is, en dat is precies wat een gissende aanvaller verkiest. De hergebruikregel is om dezelfde reden belangrijk, omdat een code die twee keer wordt geaccepteerd een code is die nuttig is gelekt. Een beheerder die het venster verbreedt om klachten te smoren, ruilt een echte eigenschap voor een cosmetische verbetering.

De klok repareren is de oplossing, terwijl het venster verbreden een kalmerend middel is. Het eerste neemt de oorzaak weg en het tweede verbergt die.

Controleer beide klokken voordat je het opnieuw probeert

Lees de tijd op het apparaat en op de server, en vergelijk de afwijkingen in plaats van de getoonde lokale tijden. De opdrachten hieronder tonen de synchronisatiestatus en het ruwe UTC-moment op een Linux-host of -server. Voer ze aan beide kanten uit voordat je een verificatie-instelling wijzigt.

timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status

Een afwijking gemeten in seconden is onschadelijk, een gemeten in minuten verklaart een weigering, en een systeem dat geen synchronisatiebron meldt is kandidaat voor beide. Vergelijk de twee UTC-tijdstempels rechtstreeks, omdat lokale tijd een tijdzone bevat die het algoritme nooit ziet. Als de afwijkingen klein zijn en de codes nog steeds mislukken, stop dan met het aanpassen van klokken en onderzoek in plaats daarvan de registratie-invoer. Herhaalde pogingen tegen een vergrendeld account maken de oorspronkelijke fout moeilijker waar te nemen.

Noteer de weigeringstijd, de afwijking en de fouttekst, en laat het gedeelde geheim erbuiten. Ondersteuning kan met de eerste drie werken en zou de vierde nooit moeten zien.

Gerelateerde artikelen