Jednokratni kodovi mogu biti potpuno ispravni na vašem telefonu i odbijeni od servera u istoj sekundi. Obje strane računaju istu funkciju iz zajedničke tajne i trenutnog vremenskog koraka, pa neslaganje o vremenu daje neslaganje o kodu. Zato je odstupanje sata kvar značajan za sigurnost, a ne samo smetnja.

Ovdje su važna dva sata, a popravljanje vidljivog je dio koji ljudi prvo rade. Onaj koji obično traži pažnju je drugi.

Kod je funkcija vremena, a ne lozinka

TOTP uzima zajedničku tajnu i brojač izveden iz trenutnog vremena, propušta oboje kroz heš s ključem i skraćuje rezultat na kratak decimalni niz; to je propisano u RFC 6238. Brojač napreduje sa svakim vremenskim korakom, uobičajeno trideset sekundi, pa ista tajna daje novu vrijednost kada se korak promijeni. Verifikator ponovo izračunava očekivanu vrijednost za trenutni korak i upoređuje, što zahtijeva istu tajnu i istu predstavu o sadašnjem trenutku. Lozinka ostaje za višekratnu upotrebu dok se ne promijeni, dok ova vrijednost istječe na granici koju klijent ne vidi.

Zato jedan kod radi, a sljedeći ne uspije nekoliko trenutaka kasnije. To također objašnjava zašto je kopiranje koda iz chat poruke tako nepouzdana navika.

Dva sata se moraju slagati, a ne jedan

Materijal za upis je prva zajednička stvar, a vrijeme druga. Ako je tajna ispravna dok se satovi razlikuju više od dozvoljenog prozora, svaka generisana vrijednost pada u pogrešan korak i biva odbijena. Ako se satovi slažu dok je tajna pogrešna, svaka vrijednost također biva odbijena, i oba kvara izgledaju identično na ekranu za prijavu. Njihovo razdvajanje znači provjeru unosa računa i vremena nezavisno, tim redom.

Verifikatorov sat zaslužuje istu pažnju kao i sat uređaja. Server čiji je izvor vremena pokvaren odbija ispravne kodove svih korisnika odjednom, a izvještaji će opisivati nagli prekid rada, a ne odstupanje. Taj obrazac vrijedi prepoznati, jer njegova popravka pripada serveru, a ne stotini telefona.

Šta košta proširenje prozora

Implementacije mogu prihvatiti kod iz susjednog koraka da apsorbuju male razlike, a ta tolerancija je dizajnerska odluka, a ne besplatno podešavanje. Svaki dodatni korak množi broj vrijednosti važećih u svakom trenutku, što je upravo ono što napadač koji pogađa preferira. Pravilo ponovne upotrebe je važno iz istog razloga, jer kod prihvaćen dvaput je kod koji je korisno procurio. Administrator koji proširuje prozor da ušutka žalbe razmjenjuje stvarnu osobinu za kozmetičko poboljšanje.

Ispravljanje sata je popravka, dok je proširenje prozora sedativ. Prvo uklanja uzrok, a drugo ga skriva.

Provjerite oba sata prije nego što pokušate ponovo

Pročitajte vrijeme na uređaju i na serveru i uporedite pomake, a ne prikazana lokalna vremena. Naredbe u nastavku pokazuju stanje sinhronizacije i sirovi UTC trenutak na Linux hostu ili serveru. Pokrenite ih na oba kraja prije nego što promijenite bilo koju postavku autentifikacije.

timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status

Pomak izmjeren u sekundama je bezopasan, onaj u minutama objašnjava odbijanje, a sistem koji ne prijavljuje nijedan izvor sinhronizacije kandidat je za oboje. Uporedite dvije UTC vremenske oznake direktno, jer lokalno vrijeme uključuje vremensku zonu koju algoritam nikada ne vidi. Ako su pomaci mali a kodovi još ne rade, prestanite podešavati satove i umjesto toga pregledajte unos za upis. Ponovljeni pokušaji protiv zaključanog računa čine originalni kvar teže uočljivim.

Zabilježite vrijeme odbijanja, pomak i tekst greške, a zajedničku tajnu ostavite izvan toga. Podrška može raditi s prva tri i nikada ne bi trebala vidjeti četvrto.

Povezani članci