Kertakäyttöiset koodit voivat olla puhelimessasi täysin oikein ja palvelin hylkää ne samalla sekunnilla. Molemmat osapuolet laskevat saman funktion jaetusta salaisuudesta ja nykyisestä aika-askeleesta, joten erimielisyys ajasta tuottaa erimielisyyden koodista. Tämä tekee kellon ajautumisesta turvallisuuden kannalta merkittävän vian eikä pelkän harmin.

Tässä on merkitystä kahdella kellolla, ja näkyvän korjaaminen on se osa, jonka ihmiset tekevät ensin. Se, joka yleensä tarvitsee huomiota, on toinen.

Koodi on ajan funktio, ei salasana

TOTP ottaa jaetun salaisuuden ja nykyisestä ajasta johdetun laskurin, ajaa molemmat avaimellisen tiivisteen läpi ja katkaisee tuloksen lyhyeksi desimaalijonoksi, kuten määritetään kohdassa RFC 6238. Laskuri etenee jokaisella aika-askeleella, tavallisesti kolmekymmentä sekuntia, joten sama salaisuus tuottaa uuden arvon, kun askel vaihtuu. Todentaja laskee nykyisen askeleen odotetun arvon uudelleen ja vertaa, mikä vaatii saman salaisuuden ja saman käsityksen nykyhetkestä. Salasana pysyy uudelleenkäytettävänä, kunnes se vaihdetaan, kun taas tämä arvo vanhenee rajalla, jota asiakasohjelma ei näe.

Siksi yksi koodi toimii ja seuraava epäonnistuu hetkiä myöhemmin. Se selittää myös, miksi koodin kopioiminen chat-viestistä on niin epäluotettava tapa.

Kahden kellon on täsmättävä, ei yhden

Rekisteröintimateriaali on ensimmäinen jaettu asia ja aika on toinen. Jos salaisuus on oikein, kun kellot eroavat enemmän kuin sallittu ikkuna, jokainen luotu arvo osuu väärään askeleeseen ja hylätään. Jos kellot täsmäävät, kun salaisuus on väärä, myös jokainen arvo hylätään, ja molemmat viat näyttävät samalta kirjautumisnäytöllä. Niiden erottaminen tarkoittaa tilimerkinnän ja ajan tarkistamista erikseen, juuri tässä järjestyksessä.

Todentajan kello ansaitsee saman tarkastelun kuin laitteen kello. Palvelin, jonka aikalahde on rikki, hylkää kaikkien käyttäjien oikeat koodit kerralla, ja raportit kuvaavat äkillistä katkosta eivätkä ajautumista. Tämä kuvio kannattaa tunnistaa, koska sen korjaus kuuluu palvelimelle eikä sadalle puhelimelle.

Mitä ikkunan levennys maksaa

Toteutukset voivat hyväksyä koodin viereisestä askeleesta pienten erojen nielemiseksi, ja tuo toleranssi on suunnittelupäätös, ei ilmainen säätö. Jokainen lisäaskel moninkertaistaa milloin tahansa voimassa olevien arvojen määrän, mikä on juuri se, mitä arvaava hyökkääjä suosii. Toistokielto on tärkeä samasta syystä, koska kahdesti hyväksytty koodi on koodi, joka vuoti hyödyllisesti. Järjestelmänvalvoja, joka leventää ikkunaa valitusten vaientamiseksi, vaihtaa todellisen ominaisuuden kosmeettiseen parannukseen.

Kellon korjaaminen on korjaus, kun taas ikkunan levennys on rauhoittava lääke. Ensimmäinen poistaa syyn ja toinen kätkee sen.

Tarkista molemmat kellot ennen kuin yrität uudelleen

Lue aika laitteesta ja palvelimesta ja vertaa siirtymiä näytettyjen paikallisten aikojen sijaan. Alla olevat komennot näyttävät synkronointitilan ja raa'an UTC-hetken Linux-isäntä- tai palvelinkoneella. Aja ne molemmissa päissä ennen kuin muutat mitään todennusasetusta.

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

Sekunteina mitattu siirtymä on vaaraton, minuutteina mitattu selittää hylkäyksen, ja järjestelmä, joka ei ilmoita mitään synkronointilähdettä, on ehdokas molempiin. Vertaa kahta UTC-aikaleimaa suoraan, koska paikallinen aika sisältää aikavyöhykkeen, jota algoritmi ei koskaan näe. Jos siirtymät ovat pieniä ja koodit epäonnistuvat edelleen, lopeta kellojen säätäminen ja tutki sen sijaan rekisteröintimerkintä. Toistuvat yritykset lukittua tiliä vastaan tekevät alkuperäisen vian vaikeammaksi havaita.

Kirjaa hylkäyksen aika, siirtymä ja virheteksti, ja jätä jaettu salaisuus sen ulkopuolelle. Tuki pärjää kolmella ensimmäisellä, eikä neljättä pitäisi koskaan näyttää.

Aiheeseen liittyvät artikkelit