Miks TOTP-koodid ebaõnnestuvad, kui seadme kell triivib
Kood on räsi saladusest ja praegusest ajaastmest. Võrrelge nihkeid mõlemas otsas ja parandage seejärel kella, selle asemel et akent laiendada.
Ühekordsed koodid võivad teie telefonis täiesti õiged olla ja server need samal sekundil tagasi lükata. Mõlemad pooled arvutavad sama funktsiooni jagatud saladusest ja praegusest ajaastmest, seega lahkarvamus aja osas tekitab lahkarvamuse koodi osas. See muudab kella triivi pigem turvalisuse seisukohalt oluliseks veaks kui tüütuks asjaks.
Siin on olulised kaks kella, ja nähtava kella parandamine on osa, mida inimesed esimesena teevad. Kella, mis tavaliselt tähelepanu vajab, on teine.
Kood on aja funktsioon, mitte parool
TOTP võtab jagatud saladuse ja praegusest ajast tuletatud loenduri, juhib mõlemad läbi võtmega räsi ja kärbib tulemuse lühikeseks kümnendkohaliseks stringiks, nagu on määratletud spetsifikatsioonis RFC 6238. Loendur liigub iga ajaastmega edasi, tavaliselt kolmkümmend sekundit, nii et sama saladus annab astme muutumisel uue väärtuse. Kontrollija arvutab praeguse astme oodatava väärtuse uuesti ja võrdleb, mis nõuab sama saladust ja sama arusaama praegusest hetkest. Parool jääb korduskasutatavaks, kuni seda muudetakse, samas kui see väärtus aegub piiril, mida klient ei näe.
Seetõttu üks kood töötab ja järgmine ebaõnnestub mõni hetk hiljem. See selgitab ka, miks koodi kopeerimine vestlussõnumist on nii ebausaldusväärne harjumus.
Kaks kella peavad ühtima, mitte üks
Registreerimismaterjal on esimene jagatud asi ja aeg on teine. Kui saladus on õige, samal ajal kui kellad erinevad rohkem kui lubatud aken, satub iga genereeritud väärtus valesse astmesse ja lükatakse tagasi. Kui kellad ühtivad, samal ajal kui saladus on vale, lükatakse iga väärtus samuti tagasi, ja mõlemad vead näevad sisselogimisekraanil ühesugused välja. Nende eraldamine tähendab konto kirje ja aja kontrollimist eraldi, just selles järjekorras.
Kontrollija kell väärib sama tähelepanu nagu seadme kell. Server, mille ajast allikas on katki, lükkab tagasi kõigi kasutajate õiged koodid korraga ja aruanded kirjeldavad äkilist katkestust, mitte triivi. See muster tasub ära tunda, sest selle parandus kuulub serverisse, mitte sajasse telefonidesse.
Mida akna laiendamine maksab
Rakendused võivad väikeste erinevuste neelamiseks vastu võtta koodi külgnevast astmest ja see tolerants on disainiotsus, mitte tasuta kohandus. Iga lisasamm korrutab igal hetkel kehtivate väärtuste arvu, mis on täpselt see, mida eelistab arvav ründaja. Korduskasutuse reegel on oluline samal põhjusel, sest kaks korda vastu võetud kood on kood, mis lekib kasulikult. Administraator, kes laiendab akent kaebuste vaigistamiseks, vahetab tõelise omaduse kosmeetilise paranduse vastu.
Kella parandamine on remont, samas kui akna laiendamine on rahusti. Esimene kõrvaldab põhjuse ja teine peidab selle.
Kontrollige mõlemat kella enne uuesti proovimist
Lugege aega seadmes ja serveris ning võrrelge nihkeid, mitte kuvatavaid kohalikke aegu. Allolevad käsud näitavad sünkroonimise olekut ja toorest UTC-hetke Linuxi hostis või serveris. Käivitage need mõlemas otsas enne mis tahes autentimissätte muutmist.
timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status
Sekundites mõõdetud nihe on kahjutu, minutites mõõdetud nihe selgitab tagasilükkamist ja süsteem, mis ei teata ühtegi sünkroonimisallikat, on mõlema kandidaat. Võrrelge kahte UTC-ajatemplit otse, sest kohalik aeg sisaldab ajavööndit, mida algoritm kunagi ei näe. Kui nihked on väikesed ja koodid ikka ebaõnnestuvad, lõpetage kellade reguleerimine ja uurige selle asemel registreerimiskirjet. Korduvad katsed lukustatud konto vastu muudavad algse vea raskemini jälgitavaks.
Kirjutage üles tagasilükkamise aeg, nihe ja veatekst ning jätke jagatud saladus sellest välja. Tugi saab töötada kolme esimesega ja ei peaks kunagi nägema neljandat.