Gå til indhold
atlas

Engangskode (OTP)

Også kendt som: OTP, sms-kode, engangskodeord

En kort kode, der virker til ét enkelt login og derefter udløber, sendt som sms eller vist i en app.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

En kode, der gælder til én brug eller et kort tidsrum, beregnet af en app eller et token ud fra en delt hemmelighed og uret eller en tæller, eller sendt som sms - brugt som "noget man har"-faktoren i MFA.

Forklaret enkelt

Som en billet, der bliver revet over ved indgangen - den lukker én ind én gang, og en kopi er intet værd bagefter.

I praksis

En advokat i et dansk advokatfirma logger ind i sagssystemet hjemmefra; efter adgangskoden taster hun de seks cifre, som en app på telefonen viser, og som skifter hvert 30. sekund.

Hvorfor det betyder noget

En stjålet adgangskode alene er ikke længere nok, men en kode kan stadig lokkes ud af folk på en falsk side, så phishing-sikre metoder er stærkere.

Sådan kommer du i gang

De typiske trin i rækkefølge. Tilpas dem til jeres organisation.

  1. Vælg variant, normalt TOTP (RFC 6238) i en autentifikator-app, HOTP (RFC 4226) til hardwaretokens og kun sms-koder som dokumenteret undtagelse.
  2. Generér en tilfældig hemmelighed pr. bruger på serveren, mindst 128 bit og helst 160, som RFC 4226 anbefaler, og vis den kun én gang ved tilmelding som QR-kode med tekstnøglen ved siden af.
  3. Slå først OTP til på kontoen, når brugeren har tastet én gyldig kode, så det er bevist, at app og server er enige.
  4. Gem hemmelighederne krypteret med en nøgle, der ligger uden for databasen, fx i et HSM eller en key vault, fordi serveren skal kunne læse dem for at tjekke koder.
  5. Acceptér kun en kode inden for et snævert vindue, normalt det aktuelle 30-sekunders skridt plus højst ét skridt til hver side for urforskydning og forsinkelse.
  6. Afvis enhver kode, der allerede er accepteret, og begræns antallet af fejlede forsøg pr. konto med spærring eller stigende ventetid.
  7. Udsted gendannelseskoder til engangsbrug ved tilmelding, og kræv ny autentificering og giv brugeren besked, hver gang OTP nulstilles eller en ny enhed tilføjes.
  8. Planlæg overgangen til passkeys eller sikkerhedsnøgler for administratorer og andre brugere med høj risiko, da phishingværktøjer kan videresende en engangskode i realtid.

Typiske faldgruber

  • Ikke at begrænse fejlede forsøg, så en angriber kan gennemgå de en million mulige sekscifrede koder.
  • At lade samme kode blive brugt to gange inden for vinduet.
  • At gemme OTP-hemmeligheder ukrypteret i samme database som adgangskode-hashene.
  • At sidestille sms-koder med app-koder trods SIM-swap og aflytning.

Gode vejledninger

Teknisk uddybning

To åbne algoritmer dominerer. HOTP (RFC 4226, 2005) beregner HMAC-SHA-1 over en 8-byte tæller med en delt hemmelighed K og anvender derefter dynamisk trunkering: de fire laveste bit i den sidste byte af den 20 byte lange HMAC udpeger et offset, fire bytes fra det offset læses som et 31-bit heltal, og resultatet modulo 10^d giver en kode på d cifre (som standard seks). TOTP (RFC 6238, 2011) erstatter tælleren med T = floor((Unix-tid − T0) / X), hvor T0 = 0 og tidsskridtet X som standard er 30 sekunder, og tillader HMAC-SHA-256 og HMAC-SHA-512 ud over SHA-1. De fleste autentifikator-apps bruger stadig SHA-1, seks cifre og 30 sekunder, hvilket er forsvarligt her, fordi HMAC's sikkerhed ikke afhænger af SHA-1's kollisionsresistens.

Verifikationen kræver tolerance. HOTP-servere bruger et look-ahead-vindue til at gensynkronisere, når brugeren har trykket på tokenet uden at logge ind; TOTP-servere accepterer typisk ét tidsskridt til hver side for at tage højde for urforskydning og netværksforsinkelse, og RFC 6238 anbefaler højst ét skridt bagud. Begge kræver begrænsning af forsøg: en sekscifret kode har kun 10^6 værdier, så uden rate limiting kan en angriber gætte inden for et gyldighedsvindue, og NIST SP 800-63B kræver, at verifikatoren begrænser antallet af fejlede forsøg i træk. En verifikator skal også afvise genbrug af en kode, der allerede er accepteret inden for vinduet, ellers kan en aflurt eller opsnappet kode afspilles igen.

Tilmelding sker som regel via en QR-kode med en otpauth://-URI (et de facto-format, der stammer fra Google Authenticator, ikke en IETF-standard), som indeholder den Base32-kodede hemmelighed, udsteder, konto og parametre. Fordi verifikatoren skal beregne samme HMAC, gemmer den hemmeligheden i genskabelig form frem for som et envejshash; et brud på seed-databasen kompromitterer alle tokens, som angrebet på RSA's SecurID-seeds i 2011 viste. Ældre ordninger omfatter S/KEY (Lamports hashkæde, RFC 1760) og proprietære hardwaretokens.

Sms-engangskoder er en anden mekanisme: serveren genererer en tilfældig kode og sender den out-of-band over telefonnettet. Den arver nettets svagheder - SIM-swap-svindel, nummerflytning, SS7-aflytning og malware, der læser sms'er på enheden - og derfor klassificerer NIST levering via PSTN som en "restricted" autentifikator. Alle OTP-varianter deler en strukturel begrænsning: koden er en ihændehaverværdi, som et menneske taster, og den er ikke bundet til sitets origin, så en adversary-in-the-middle-phishingside kan videresende den inden for gyldighedsvinduet. OTP gør derfor credential stuffing og genbrug af adgangskoder dyrere for angriberen, men er ikke phishing-resistent i NIST's forstand, i modsætning til FIDO2/WebAuthn-passkeys.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Digital identitet
  2. →Loginoplysning (credential)
  3. →Autentificering
  4. →Engangskode (OTP)

Relationer

Forudsætter
Autentificering
Forveksl ikke med
Passkey

Kilder og videre læsning

Standarder og officielle tekster

  • RFC 6238 - TOTP, Time-Based One-Time Password Algorithm
  • NIST SP 800-63B - Digital Identity Guidelines, Authentication and Lifecycle Management

Kursusmateriale

  • Cyber Security Fast Track - Kursuskompendium, Ordliste (MFA - SMS-kode eller app-godkendelse)

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Nævnt i

Test dig selv

Indlæser…

Atlas er i beta.