Vienkartiniai kodai gali būti visiškai teisingi jūsų telefone, o serveris juos atmesti tą pačią sekundę. Abi pusės apskaičiuoja tą pačią funkciją iš bendros paslapties ir dabartinio laiko žingsnio, todėl nesutarimas dėl laiko sukelia nesutarimą dėl kodo. Todėl laikrodžio nukrypimas tampa saugumui svarbiu defektu, o ne tik nepatogumu.

Čia svarbūs du laikrodžiai, o matomojo taisymas yra ta dalis, kurią žmonės daro pirmiausia. Tas, kuriam paprastai reikia dėmesio, yra kitas.

Kodas yra laiko funkcija, o ne slaptažodis

TOTP paima bendrą paslaptį ir skaitiklį, išvestą iš dabartinio laiko, abu praleidžia per maišą su raktu ir sutrumpina rezultatą iki trumpos dešimtainės eilutės, kaip nurodyta RFC 6238. Skaitiklis juda į priekį kiekviename laiko žingsnyje, paprastai trisdešimt sekundžių, todėl ta pati paslaptis sukuria naują reikšmę, kai žingsnis pasikeičia. Tikrintojas perskaičiuoja dabartinio žingsnio laukiamą reikšmę ir palygina, o tam reikia tos pačios paslapties ir to paties dabarties suvokimo. Slaptažodis lieka daugkartinis, kol jis pakeičiamas, o ši reikšmė baigiasi ties riba, kurios klientas nemato.

Štai kodėl vienas kodas veikia, o kitas nepavyksta po kelių akimirkų. Tai taip pat paaiškina, kodėl kodo kopijavimas iš pokalbio žinutės yra toks nepatikimas įprotis.

Du laikrodžiai turi sutapti, o ne vienas

Registracijos medžiaga yra pirmasis bendras dalykas, o laikas yra antrasis. Jei paslaptis teisinga, o laikrodžiai skiriasi labiau nei toleruojamas langas, kiekviena sugeneruota reikšmė patenka į netinkamą žingsnį ir yra atmetama. Jei laikrodžiai sutampa, o paslaptis neteisinga, kiekviena reikšmė taip pat atmetama, ir abi klaidos prisijungimo ekrane atrodo vienodai. Jų atskyrimas reiškia paskyros įrašo ir laiko patikrinimą atskirai, būtent tokia tvarka.

Tikrintojo laikrodis nusipelno tokio pat dėmesio kaip prietaiso. Serveris, kurio laiko šaltinis sugedęs, atmeta visų naudotojų teisingus kodus vienu metu, o ataskaitose bus aprašomas staigus sutrikimas, o ne nukrypimas. Šį modelį verta atpažinti, nes jo taisymas priklauso serveriui, o ne šimtui telefonų.

Kiek kainuoja lango plėtimas

Įgyvendinimai gali priimti kodą iš gretimo žingsnio, kad absorbuotų mažus skirtumus, ir ši tolerancija yra dizaino sprendimas, o ne nemokamas reguliavimas. Kiekvienas papildomas žingsnis padaugina bet kuriuo metu galiojančių reikšmių skaičių, o būtent to ir nori spėjantis užpuolikas. Pakartojimo taisyklė svarbi dėl tos pačios priežasties, nes du kartus priimtas kodas yra kodas, kuris naudingai nutekėjo. Administratorius, kuris plečia langą, kad nutildytų skundus, maino tikrą savybę į kosmetinį pagerinimą.

Laikrodžio taisymas yra remontas, o lango plėtimas yra raminamasis. Pirmasis pašalina priežastį, antrasis ją paslepia.

Patikrinkite abu laikrodžius prieš bandydami dar kartą

Nuskaitykite laiką prietaise ir serveryje bei palyginkite poslinkius, o ne rodomus vietinius laikus. Toliau pateiktos komandos rodo sinchronizavimo būseną ir neapdorotą UTC momentą Linux hoste ar serveryje. Vykdykite jas abiejuose galuose prieš keisdami bet kokį autentifikavimo nustatymą.

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

Sekundėmis matuojamas poslinkis yra nekenksmingas, minutėmis matuojamas paaiškina atmetimą, o sistema, kuri nepraneša jokio sinchronizavimo šaltinio, yra abiejų kandidatė. Palyginkite dvi UTC laiko žymas tiesiogiai, nes vietinis laikas apima laiko juostą, kurios algoritmas niekada nemato. Jei poslinkiai maži, o kodai vis dar nepavyksta, nustokite reguliuoti laikrodžius ir vietoj to patikrinkite registracijos įrašą. Pakartotiniai bandymai su užrakinta paskyra apsunkina pradinio defekto stebėjimą.

Užrašykite atmetimo laiką, poslinkį ir klaidos tekstą, o bendrą paslaptį palikite už to. Pagalba gali dirbti su pirmaisiais trimis ir niekada neturėtų matyti ketvirtojo.

Susiję straipsniai