Svenska
  • passwordless
  • one-time password
  • otp
  • time-based otp
  • hash-based otp

Hur fungerar engångslösenord (OTP)?

I denna artikel kommer vi att introducera två olika metoder för engångslösenord: e-post/telefon + verifieringskod och dynamisk kod.

Darcy Ye
Darcy Ye
Developer

När internet har utvecklats har vi använt en mängd olika onlinetjänster för att möta nästan alla våra behov. Det första steget i att använda dessa tjänster är ofta registrering och inloggning. När det gäller registrering och inloggning används användar-ID och lösenordsautentisering fortfarande i stor utsträckning, trots att mer än tre decennier har passerat sedan dagarna med fristående stationära datorer som inte kunde ansluta till internet.

Förr kanske vi bara behövde komma ihåg lösenordet till vårt e-postkonto, men nu använder vi ofta dussintals eller till och med hundratals onlinetjänster, och vi kan inte använda samma lösenord för alla (om lösenordet för ett konto är komprometterat, kommer alla konton som använder samma lösenord att vara i riskzonen). Som ett resultat blir lösenordlös inloggning alltmer populär och blir gradvis det huvudsakliga tillvägagångssättet.

Det finns många olika metoder för lösenordslös autentisering, inklusive men inte begränsat till social inloggning, e-post/telefon + verifieringskod, och användningen av autentiseringsappar med dynamiska lösenord. De två sistnämnda metoderna kan klassificeras som engångslösenord (OTPs).

Vad är engångslösenord (OTP)?

Ett OTP är en automatiskt genererad sekvens av tecken som endast är giltig för en enda inloggningssession eller en kort tidsperiod. Eftersom ett OTP bara kan användas en gång, kan det förhindra risken för att autentiseringsuppgifter läcker, till exempel ett förlorat eller stulet lösenord.

I teorin kan ett OTP vara en slumpmässig sträng av tecken av en viss längd, inklusive versaler och gemener, och till och med speciella symboler. Men för användarupplevelsens skull använder de flesta tjänster rena siffror när de använder OTPs.

E-post / telefon + verifieringskod

Många webbplatser kräver att du verifierar din identitet genom att skicka en verifieringskod (eller passkod) till den e-postadress eller telefonnummer du registrerat.

Föreställ dig att Jack och Joe spelar ett gissningsspel, där Jack tänker på ett tal mellan 0 och 999, och ger Joe tre chanser att gissa numret inom en minut. Förutom att känna till talets intervall har Joe ingen annan information.

Vi vet alla att det är nästan omöjligt för Joe att gissa numret korrekt inom en minut med bara tre försök.

E-post / telefon + verifieringskod fungerar på samma princip: verifieringskoden är generellt giltig för en mycket kort period, vanligtvis inte mer än 10 minuter (liknande som Jack ger Joe "en minut" att gissa numret). Dessutom har API:et eller metoden för att verifiera verifieringskoden vanligtvis en gräns för antalet försök för att förhindra brytstyrkeattacker på passkoden (som att Jack bara ger Joe "tre chanser").

För potentiella angripare är det nästan omöjligt att knäcka denna metod. Systemet talar dock om för användaren verifieringskoden genom en pålitlig kanal (e-post eller telefon), så att användaren kan verifiera den direkt.

Dynamisk kod

Dynamisk kod, även känd som tidsbaserad OTP (TOTP), är "dynamisk" i betydelsen att den ändras över tiden. Generellt, om en webbapp använder TOTP, kommer den att följa RFC6238 - TOTP: Time-Based One-Time Password Algorithm.

Hash-baserat engångslösenord

Innan vi introducerar TOTP, behöver vi kort förklara RFC4226 - HOTP: An HMAC-Based One-Time Password Algorithm (HMAC är en hash-algoritm). HOTP-algoritmen fungerar på följande sätt:

  1. Hemlig nyckel: HOTP kräver en delad hemlig nyckel K, som är densamma mellan servern och klienten.

  2. Räknare: Kärnan i HOTP är en räknare C, som ökas varje gång ett nytt lösenord genereras.

  3. HMAC-beräkning:

    • Använd HMAC-SHA-1 (eller andra hash-funktioner) för att beräkna autentiseringskoden:

      hmac-beräkning
    • Här är H ett 160-bitars hashvärde.

  4. Trunkering: Extrahera en del av hashvärdet H för att generera OTP. Anta att vi vill ha ett 6-siffrigt OTP, processen är som följer:

    • Extrahera den sista byten av H som trunkeringsoffset O.
    • Extrahera de 4 byten som börjar från O, konvertera dem till ett heltal T.
    • Ta de sista d-siffrorna av T, dvs OTP = T mod 10^d.

Sammanfattningsvis är HOTP-formeln:

hash-baserad otp-beräkning

Där d är den önskade OTP-längden (vanligtvis 6-8 siffror).

Tidsbaserat engångslösenord

TOTP är en förlängning av HOTP, där räknaren ersätts med ett tidssteg. Det använder den aktuella tiden för att generera en dynamisk verifieringskod, så OTP löper automatiskt ut över tid. Arbetsprincipen är som följer:

  1. Tidssteg: TOTP använder den aktuella tiden T istället för HOTP-räknaren C. Tidssteget är ett fastställt tidsintervall (vanligtvis 30 sekunder).

    • Till exempel, anta att tidssteget är 30 sekunder, och den aktuella Unix-tidsstämpeln är T. TOTP-räknaren beräknas som: T' = T / tidssteg.
    • Där T′ är tidsstegräknaren, i enheter om 30 sekunder.
  2. Generera OTP: Sätt in T′ i HOTP-algoritmen för att generera OTP:

    generera totp
  3. Dynamisk uppdatering: Eftersom TOTP baseras på tidssteget ändras OTP över tid, så servern kan verifiera dess giltighet så länge OTP är inom det giltiga tidsfönstret.

Sammanfattningsvis är TOTP-formeln:

totp-beräkning

Baserat på vår erfarenhet av att använda autentiseringsappar, kan vi synkronisera den hemliga värdet mellan enheten och servern genom att skanna en QR-kod eller direkt kopiera och klistra in, och sedan behöver vi ange den aktuella dynamiska koden en gång för att säkerställa att det hemliga värdet är detsamma.

I de tidiga dagarna av att använda mobila enheter, kunde vi upptäcka att tiden på olika enheter inte var densamma, och vi skulle behöva manuellt justera tiden på enheterna regelbundet. Under de senaste åren använder nästan alla enheter nätverks tidsservice (NTP) för att regelbundet synkronisera och uppdatera enhetens tid. Även om enhetens klocka inte är helt exakt, kan de frekventa uppdateringarna säkerställa att tiden är rimligt konsekvent över olika enheter. Baserat på detta antagande kan den dynamiska koden fortfarande användas även om enheten är offline, medan det skulle vara svårt att ta emot en verifieringskod i ett offline-tillstånd.

Avslutande anteckningar

I denna artikel har vi introducerat två olika metoder för engångslösenord: e-post/telefon + verifieringskod och dynamisk kod.

E-post/telefon + verifieringskod förlitar sig på kommunikationsinfrastruktur och tredjepartstjänster för e-post eller kortmeddelanden (SMS) för att implementeras; dynamisk kod är inte beroende av externa tjänster och kommunikationsanläggningar och kan användas offline.

Logto, som en populär, kraftfull och mycket utbyggbar IAM (Identity and Access Management) tjänst, stöder båda OTP-metoderna, så att användarna kan välja den lösning som bäst passar deras behov ur ett affärsperspektiv.