Nederlands
  • wachtwoordloos
  • eenmalig wachtwoord
  • otp
  • tijdsgebonden otp
  • hash-gebaseerde otp

Hoe werkt een eenmalig wachtwoord (OTP)?

In dit artikel introduceren we twee verschillende methoden voor eenmalige wachtwoorden: e-mail/telefoon + verificatiecode en dynamische code.

Darcy Ye
Darcy Ye
Developer

Naarmate het internet zich heeft ontwikkeld, gebruiken we een breed scala aan online diensten om aan bijna al onze behoeften te voldoen. De eerste stap bij het gebruik van deze diensten is vaak registratie en inloggen. Als het gaat om registratie en aanmelden, worden gebruikers-ID en wachtwoordauthenticatie nog steeds veel gebruikt, ook al zijn er meer dan drie decennia verstreken sinds de tijd van het gebruik van zelfstandige desktopcomputers die niet met het internet konden verbinden.

Vroeger hoefden we misschien alleen het wachtwoord voor ons e-mailaccount te onthouden, maar nu gebruiken we vaak tientallen of zelfs honderden online diensten, en we kunnen niet hetzelfde wachtwoord voor allemaal gebruiken (als het wachtwoord van één account is gecompromitteerd, lopen alle accounts met hetzelfde wachtwoord risico). Als gevolg hiervan wordt wachtwoordloos inloggen steeds populairder en is het geleidelijk de gangbare aanpak aan het worden.

Er zijn veel verschillende methoden voor wachtwoordloze authenticatie, waaronder maar niet beperkt tot sociale aanmelding, e-mail/telefoon + verificatiecode en het gebruik van authenticator-apps met dynamische wachtwoorden. De laatste twee methoden kunnen worden geclassificeerd als eenmalige wachtwoorden (OTP's).

Wat is een eenmalig wachtwoord (OTP)?

Een OTP is een automatisch gegenereerde reeks tekens die slechts geldig is voor een enkele inlogsessie of een korte periode. Omdat een OTP slechts één keer gebruikt kan worden, kan het het risico op inloggegevenslekkage voorkomen, zoals een verloren of gestolen wachtwoord.

In theorie kan een OTP een willekeurige reeks tekens van een bepaalde lengte zijn, inclusief hoofdletters, kleine letters en zelfs speciale symbolen. Maar voor het gebruikersgemak gebruiken de meeste diensten pure cijfers bij het gebruik van OTP's.

E-mail / telefoon + verificatiecode

Veel websites vereisen dat je je identiteit verifieert door een verificatiecode (of toegangscode) te sturen naar het e-mailadres of telefoonnummer dat je hebt geregistreerd.

Stel je voor dat Jack en Joe een raadspel spelen, waarbij Jack een getal tussen 0 en 999 bedenkt, en Joe drie kansen geeft om het getal binnen één minuut te raden. Afgezien van het weten van het bereik van het getal, heeft Joe geen andere informatie.

We weten allemaal dat het bijna onmogelijk is voor Joe om het getal binnen één minuut correct te raden met slechts drie pogingen.

E-mail / telefoon + verificatiecode werkt volgens hetzelfde principe: de verificatiecode is over het algemeen slechts voor een zeer korte tijd geldig, meestal niet langer dan 10 minuten (vergelijkbaar met Jack die Joe "één minuut" geeft om het getal te raden). Bovendien heeft de API of methode voor het verifiëren van de verificatiecode meestal een snelheidslimiet om brute-force-aanvallen op de toegangscode te voorkomen (zoals Jack die Joe slechts "drie kansen" geeft).

Voor potentiële aanvallers is het bijna onmogelijk om deze methode te kraken. Echter, het systeem vertelt de gebruiker de verificatiecode via een vertrouwd kanaal (e-mail of telefoon), waardoor de gebruiker deze direct kan verifiëren.

Dynamische code

Dynamische code, ook bekend als tijdsgebonden OTP (TOTP), is "dynamisch" in die zin dat het in de loop van de tijd verandert. Over het algemeen, als een webapp TOTP gebruikt, volgt het RFC6238 - TOTP: Time-Based One-Time Password Algorithm.

Hash-gebaseerd eenmalig wachtwoord

Voordat TOTP wordt geïntroduceerd, moeten we kort uitleggen RFC4226 - HOTP: An HMAC-Based One-Time Password Algorithm (HMAC is een hash-algoritme). Het HOTP-algoritme werkt als volgt:

  1. Geheim: HOTP vereist een gedeelde geheime sleutel K, die hetzelfde is tussen de server en de client.

  2. Teller: De kern van HOTP is een teller C, die wordt verhoogd telkens wanneer een nieuw wachtwoord wordt gegenereerd.

  3. HMAC-berekening:

    • Gebruik HMAC-SHA-1 (of andere hashfuncties) om de authenticatiecode te berekenen:

      hmac-berekening
    • Hier is H een 160-bits hashwaarde.

  4. Afkapping: Extraheer een deel van de hashwaarde H om de OTP te genereren. Aangenomen dat we een 6-cijferige OTP willen, verloopt het proces als volgt:

    • Extraheer de laatste byte van H als de afkappositie O.
    • Extraheer de 4 bytes vanaf O, converteer ze naar een geheel getal T.
    • Neem de laatste d cijfers van T, dwz OTP = T mod 10^d.

Samengevat is de HOTP-formule:

hash-gebaseerde otp-berekening

waarbij d de gewenste OTP-lengte is (meestal 6-8 cijfers).

Tijdsgebonden eenmalig wachtwoord

TOTP is een uitbreiding van HOTP, waarbij de teller wordt vervangen door een tijdstip. Het gebruikt de huidige tijd om een dynamische verificatiecode te genereren, waardoor de OTP automatisch verloopt na verloop van tijd. Het werkingsprincipe is als volgt:

  1. Tijdsinterval: TOTP gebruikt de huidige tijd T in plaats van de HOTP-teller C. Het tijdsinterval is een vaste tijdsperiode (meestal 30 seconden).

    • Bijvoorbeeld, aangenomen dat het tijdsinterval 30 seconden is, en de huidige Unix-tijdstempel is T. De TOTP-teller wordt berekend als: T' = T / tijdsinterval
    • Waar T′ de tijdstapteller is, in eenheden van 30 seconden.
  2. Genereren van OTP: Vervang T′ in het HOTP-algoritme om de OTP te genereren:

    genereren van totp
  3. Dynamische update: Omdat TOTP is gebaseerd op het tijdsinterval, verandert de OTP in de loop van de tijd, zodat de server de geldigheid ervan kan verifiëren zolang de OTP binnen het geldige tijdsvenster ligt.

Samengevat is de TOTP-formule:

totp-berekening

Op basis van onze ervaring met gebruik van authenticator-apps kunnen we de geheime waarde tussen het apparaat en de server synchroniseren door het scannen van een QR-code of direct kopiëren en plakken, en moeten we vervolgens de huidige dynamische code één keer invoeren om ervoor te zorgen dat de geheime waarde hetzelfde is.

In de vroege dagen van het gebruik van mobiele apparaten zouden we merken dat de tijd op verschillende apparaten niet hetzelfde was, en zouden we handmatig de tijd op de apparaten periodiek moeten aanpassen. In de afgelopen jaren gebruiken bijna alle apparaten de netwerk tijdendienst (NTP) om regelmatig de apparaatklok te synchroniseren en bij te werken. Zelfs als de klok van het apparaat niet helemaal nauwkeurig is, kunnen de frequente updates ervoor zorgen dat de tijd redelijk consistent is over verschillende apparaten. Op basis van deze aanname kan de dynamische code nog steeds worden gebruikt, zelfs als het apparaat offline is, terwijl het moeilijk zou zijn om een verificatiecode te ontvangen in een offline toestand.

Slotopmerkingen

In dit artikel hebben we twee verschillende methoden voor eenmalige wachtwoorden geïntroduceerd: e-mail/telefoon + verificatiecode en dynamische code.

E-mail/telefoon + verificatiecode is afhankelijk van communicatiestructuren en e-mail- of sms-diensten van derden om te implementeren; dynamische code is niet afhankelijk van externe diensten en communicatiefaciliteiten, en kan offline worden gebruikt.

Logto, als een populaire, krachtige en zeer uitbreidbare IAM (Identity and Access Management) dienst, ondersteunt beide OTP-methoden, waardoor gebruikers de oplossing kunnen kiezen die het beste past bij hun behoeften vanuit een zakelijk perspectief.