telkittelkit
Bruksområde

Tofaktor med SMS: engangskoder som kommer fram

Du har et innloggingsskjema og trenger en andrefaktor brukerne dine faktisk klarer. SMS er den de allerede kan. Her er flyten, og her er grunnene til at den ikke bør stå alene.

Sist gjennomgått

telkit sender engangskoder på SMS med leveringsrapport per melding, så du ser om koden nådde mobilen eller stoppet hos operatøren. Koden genererer og verifiserer du selv, i din egen database. Leveringstid betyr mer enn pris her: en kode som kommer etter to minutter, er en pålogging som feilet.

Slik ser flyten ut

Fire trinn, og telkit er bare inne i det andre. Resten hører hjemme i din egen backend, der hemmeligheten hører til.

  1. Generer koden på serveren. Seks siffer fra en kryptografisk tilfeldig kilde, lagret sammen med bruker-ID, tidspunkt og en teller for antall forsøk. Aldri i klienten, aldri utledet av brukernavnet.
  2. Send. Ett kall med koden, avsendernavnet ditt og en idempotencyKey. Leveringsrapporten forteller om meldingen nådde mobilen, så du kan vise brukeren «koden er sendt» og mene det.
  3. Verifiser. Sammenlign i konstant tid, tell forsøkene, og lås koden etter tre bom. En kode som kan gjettes 10 000 ganger, er ingen faktor.
  4. La den dø. Fem minutter er nok. Koden skal være ubrukelig etter første vellykkede bruk, og etter utløpstiden uansett om den ble brukt.

Hva du må passe på

Engangskoder på SMS har to problemer: ett du løser i koden, og ett du bare kan begrense.

  • En engangskode skal ikke inneholde lenke. Operatørenes filtre reagerer på lenker i kodemeldinger, og en bruker som er vant til å trykke på lenker i slike meldinger, er allerede halvveis lurt neste gang noen sender en falsk.
  • SMS er den svakeste av de vanlige andrefaktorene. Et SIM-bytte flytter nummeret til angriperen, og en phishing-side kan spørre om koden i sanntid og bruke den selv innen utløpstiden. TOTP i en app og passkeys løser begge deler, fordi hemmeligheten aldri forlater enheten.
  • Behandler du penger eller sensitive persondata, bør SMS være reserven og ikke hovedveien. Tilby passkeys eller en autentiseringsapp først, og la SMS ta brukerne som ikke kommer i mål med det.
  • Skriv tjenestenavnet i meldingen, og skriv koden først. Da ser brukeren hvilken pålogging koden hører til, og mobilen kan fylle den inn automatisk. Detaljene står i Avsender-ID på SMS i Norge.
  • Sett en grense per nummer og per IP. Uten den betaler du for hver kode en angriper ber om, og brukeren får meldinger hun ikke har bedt om.

For deg som skal koble det opp

Koden lever i din egen database. telkit gjør bare turen ut til mobilen, og forteller deg om den gikk.

engangskode.tsts
import { randomInt } from "node:crypto";import { Telkit } from "@telkit/sdk"; const telkit = new Telkit({ apiKey: process.env.TELKIT_API_KEY }); const kode = String(randomInt(0, 1_000_000)).padStart(6, "0");await lagreKode({  brukerId: bruker.id,  kode,  utloper: Date.now() + 5 * 60_000,  forsok: 0,}); await telkit.messages.create({  from: "Telkit",  to: bruker.mobil,  body: `${kode} er koden din til Telkit. Den varer i 5 minutter.`,  idempotencyKey: `otp-${bruker.id}-${kode}`,});

Spørsmål om tofaktor med SMS

Send den første koden

Få en API-nøkkel og mål leveringstiden til ditt eget nummer før du bestemmer deg.