Verify

Wat betekent OTP? Eenmalige wachtwoorden uitgelegd

OTP staat voor one-time password (ook wel one-time passcode). Het is een korte code, meestal vier tot acht cijfers, die geldig is voor één login of één transactie en daarna verloopt. Omdat elke code maar één keer werkt en maar kort geldig is, heeft een aanvaller niets aan een code die lekt nadat hij is gebruikt. Die wegwerpbaarheid is precies de reden dat OTP's bestaan.

Je hebt er vrijwel zeker ooit een ingetypt: de zes cijfers die je bank je sms't vóór een overboeking, de code die een authenticator-app toont als je inlogt, het nummer dat een website je mailt om te bevestigen dat jij het bent. Dat zijn allemaal OTP's, die vooral verschillen in hoe de code wordt gegenereerd en hoe hij bij je komt.

Hoe werkt een OTP?

De dienst en de gebruiker hebben een manier nodig om het eens te worden over wat de geldige code op dit moment is, zonder het wachtwoord zelf op een raadbare manier rond te sturen. Er zijn twee standaardmethoden, en het verschil zit in wat de code laat veranderen.

  • HOTP (op HMAC gebaseerd eenmalig wachtwoord). De code wordt afgeleid van een gedeeld geheim en een teller. Het token van de gebruiker verhoogt een teller wanneer het een code genereert. De verificator van de dienst verhoogt zijn bijbehorende status na het accepteren van de verwachte code. Een HOTP-code verloopt niet alleen doordat er tijd verstrijkt.
  • TOTP (tijdgebaseerd eenmalig wachtwoord). De code wordt afgeleid van een gedeeld geheim en de huidige tijd, afgerond op een venster (meestal 30 seconden). De code verandert vanzelf naarmate de tijd verstrijkt, of iemand hem nu heeft gebruikt of niet. Dit is wat authenticator-apps genereren.

TOTP is de meestgebruikte van de twee, omdat de automatische verlooptijd beperkt hoe lang een gestolen code bruikbaar is. HOTP komt nog voor in hardwaretokens en in flows waar een tijdgesynchroniseerde klok lastig te garanderen is.

Hoe wordt een OTP bezorgd?

De generatiemethode en het bezorgkanaal zijn aparte keuzes. Een code kan op het eigen apparaat van de gebruiker worden berekend, of op de server worden gegenereerd en naar de gebruiker worden gestuurd.

  • SMS. De server genereert een code en sms't die naar het telefoonnummer van de gebruiker. Universeel bereik, geen app nodig. Het is ook het makkelijkst te onderscheppen kanaal, via SIM-swap of netwerkaanvallen.
  • E-mail. De code komt in de inbox van de gebruiker. Handig en zonder app, maar slechts zo veilig als het e-mailaccount zelf.
  • Spraakoproep. Een geautomatiseerde oproep leest de code voor, wat helpt voor gebruikers die geen SMS kunnen ontvangen of een toegankelijke optie nodig hebben.
  • Authenticator-app. De code wordt lokaal berekend met TOTP. Er wordt niets over het netwerk verstuurd, dus er valt onderweg niets te onderscheppen.

Elk kanaal weegt bereik af tegen hoe moeilijk het is om aan te vallen. SMS en e-mail bereiken vrijwel iedereen; app-gebaseerde codes zijn moeilijker te stelen, maar vereisen dat de gebruiker vooraf een app heeft ingesteld.

Waar worden OTP's gebruikt?

Het bekendste gebruik is als tweede factor bij tweefactorauthenticatie, waarbij de OTP het bezit van een telefoon of apparaat bewijst bovenop een wachtwoord. Maar OTP's duiken ver buiten inloggen op.

  • Loginverificatie: een aanmelding bevestigen, vooral vanaf een nieuw apparaat of een nieuwe locatie.
  • Transactiebevestiging: een betaling, een overboeking of een wijziging van uitbetalingsgegevens goedkeuren.
  • Accountherstel: controle over een telefoonnummer of e-mailadres bevestigen voordat een wachtwoord wordt gereset.
  • Step-up-controles: om een nieuwe code vragen vóór een gevoelige actie, zelfs midden in een sessie.

Als je je afvraagt of een OTP een login echt "two-factor" maakt, hangt dat af van de rest van de flow. Het verschil wordt behandeld in tweefactorauthenticatie vs. tweestapsverificatie.

Beveiligingsoverwegingen en best practices

OTP's zijn eenvoudig, en juist daarom doen de details ertoe. Een paar gewoonten houden ze effectief.

  • Korte verlooptijd. Begrens codes strak in de tijd. Een paar minuten voor SMS en e-mail, het standaardvenster van 30 seconden voor TOTP. Hoe korter het venster, hoe kleiner de kans dat een code wordt hergebruikt.
  • Beperking van het aantal verzoeken. Begrens zowel het aantal codes dat een gebruiker kan aanvragen als het aantal pogingen dat mag worden gedaan. Een zescijferige code heeft een miljoen mogelijkheden, die een onbeperkte aanvaller kan bruteforcen; een paar pogingen per code sluit die deur.
  • Eenmalig gebruik, afgedwongen aan serverzijde. Maak een code ongeldig zodra hij is geaccepteerd, en ook na te veel mislukte pogingen. Vertrouw niet op de client om hergebruik te voorkomen.
  • Log de code nooit. Houd OTP's uit applicatielogs, analytics en foutrapporten. Een code die in een logbestand staat, is een code die een insider of een loglek kan lezen.
  • Koppel de code aan context. Bind een code aan de specifieke gebruiker en actie waarvoor hij is uitgegeven, zodat een code voor het ene doel niet kan worden hergespeeld voor een ander doel.

Een korte kanttekening over phishing: een gebruiker kan worden misleid om een SMS- of app-code voor te lezen aan een aanvaller op een nepsite, dus OTP's zijn niet phishingbestendig zoals hardwaresleutels dat zijn. Ze blokkeren nog steeds de veel vaker voorkomende aanval: iemand die inlogt met alleen een gestolen wachtwoord.

OTP's verzenden en verifiëren

Je kunt een OTP-flow zelf uitvoeren: genereer een code, sla hem op met een verlooptijd, verstuur hem en controleer de invoer van de gebruiker binnen het venster. Als je de bezorging en verificatie uit handen wilt geven (inclusief de beperking van het aantal verzoeken en verlooptijd), verstuurt en valideert het Verifications-product van Bird codes via SMS, spraak en e-mail. Als je alleen het transport nodig hebt en de verificatielogica zelf wilt beheren, dekt het SMS-product de bezorging van codes naar telefoons.

FAQ

Wat is het verschil tussen HOTP en TOTP?

HOTP verhoogt de teller van het token van de gebruiker wanneer het een code genereert. De verificator van de dienst verhoogt zijn status na het accepteren van de verwachte code. TOTP leidt zijn code af van de huidige tijd, zodat hij op een vast schema verandert (meestal elke 30 seconden). TOTP wordt vaker gebruikt omdat de automatische verlooptijd de bruikbaarheid van een gestolen code beperkt.

Zijn SMS-OTP's veilig?

Ze zijn veilig genoeg voor de meeste accounts en blokkeren het gros van aanvallen met alleen een wachtwoord, maar SMS kan worden onderschept via SIM-swapfraude of netwerkaanvallen. Gebruik voor accounts met hoge waarde liever een authenticator-app of een hardwaresleutel.

Hoe lang moet een OTP geldig blijven?

Lang genoeg om de code te lezen en in te typen, en niet langer. Een paar minuten voor SMS of e-mail, en het standaardvenster van 30 seconden voor TOTP. Kortere vensters verkleinen de kans dat een gelekte code nog bruikbaar is.

Kan dezelfde OTP twee keer worden gebruikt?

Dat hoort niet. Een correct geïmplementeerd systeem maakt een code ongeldig zodra hij is geaccepteerd, en ook na te veel mislukte pogingen. Dwing eenmalig gebruik af op de server, nooit op de client.

Eenmalige wachtwoorden zijn een klein idee dat veel gewicht draagt in accountbeveiliging. Lees wat tweefactorauthenticatie is om te zien hoe ze passen in een volledige inlogverdediging, of bekijk hoe Bird codes genereert, bezorgt en controleert in het Verifications-product.

Bouw op hetzelfde netwerk.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra u een betaalmethode toevoegt en een afzender verifieert.

Jouw volgende idee.
Klaar om te verbinden.