Miért hibáznak a TOTP-kódok, amikor az eszköz órája elcsúszik
A kód a titok és az aktuális időlépés hash-e. Hasonlítsa össze az eltéréseket mindkét oldalon, majd javítsa az órát az ablak szélesítése helyett.
Az egyszeri kódok tökéletesen helyesek lehetnek a telefonján, és a kiszolgáló ugyanabban a másodpercben elutasíthatja őket. Mindkét fél ugyanazt a függvényt számolja ki egy közös titokból és az aktuális időlépésből, ezért az időről való nézeteltérés a kódról való nézeteltérést eredményezi. Ez az óra elcsúszását biztonsági szempontból jelentős hibává teszi, nem csupán bosszúsággá.
Itt két óra számít, és a látható megjavítása az a rész, amit az emberek először tesznek. Amelyik általában figyelmet igényel, az a másik.
A kód az idő függvénye, nem jelszó
A TOTP veszi a közös titkot és az aktuális időből származtatott számlálót, mindkettőt kulcsos hash-en vezeti át, és az eredményt rövid tizedes karakterláncra vágja, ahogy az RFC 6238 szabvány előírja. A számláló minden időlépésben előrehalad, általában harminc másodpercet, így ugyanaz a titok új értéket ad, amikor a lépés megváltozik. Az ellenőrző újraszámítja az aktuális lépés várt értékét és összehasonlítja, ami ugyanazt a titkot és ugyanazt az elképzelést igényli a mostani pillanatról. A jelszó újrafelhasználható marad, amíg meg nem változtatják, míg ez az érték egy olyan határon jár le, amelyet a kliens nem lát.
Ezért működik az egyik kód, és a következő pillanatokkal később elbukik. Ez azt is megmagyarázza, miért olyan megbízhatatlan szokás a kódot chat-üzenetből kimásolni.
Két órának egyeznie kell, nem egynek
A regisztrációs anyag az első közös dolog, az idő pedig a második. Ha a titok helyes, miközben az órák jobban eltérnek, mint a tolerált ablak, minden generált érték a rossz lépésbe esik és elutasításra kerül. Ha az órák egyeznek, miközben a titok helytelen, minden érték szintén elutasításra kerül, és mindkét hiba ugyanúgy néz ki a bejelentkező képernyőn. Kettéválasztásukhoz a fiókbejegyzést és az időt külön kell ellenőrizni, ebben a sorrendben.
Az ellenőrző órája ugyanolyan vizsgálatot érdemel, mint az eszközé. Egy kiszolgáló, amelynek időforrása tönkrement, egyszerre utasítja el minden felhasználó helyes kódját, és a jelentések hirtelen kiesésről fognak beszélni, nem elcsúszásról. Ezt a mintát érdemes felismerni, mert a javítás a kiszolgálóra tartozik, nem száz telefonra.
Mennyibe kerül az ablak szélesítése
A megvalósítások elfogadhatnak kódot a szomszédos lépésből a kis eltérések felszívására, és ez a tolerancia tervezési döntés, nem ingyenes beállítás. Minden további lépés megsokszorozza a bármely pillanatban érvényes értékek számát, ami pontosan az, amit a találgató támadó előnyben részesít. A visszajátszás elleni szabály ugyanezen okból fontos, mert a kétszer elfogadott kód olyan kód, amely hasznosan kiszivárgott. A rendszergazda, aki az ablak szélesítésével csendesíti el a panaszokat, valódi tulajdonságot cserél kozmetikai javulásra.
Az óra javítása a javítás, míg az ablak szélesítése nyugtató. Az első megszünteti az okot, a második elrejti.
Ellenőrizze mindkét órát, mielőtt újra próbálkozik
Olvassa le az időt az eszközön és a kiszolgálón, és hasonlítsa össze az eltéréseket a megjelenített helyi idők helyett. Az alábbi parancsok a szinkronizáció állapotát és a nyers UTC-pillanatot mutatják egy Linux-gazdagépen vagy -kiszolgálón. Futtassa őket mindkét oldalon, mielőtt bármilyen hitelesítési beállítást módosít.
timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status
A másodpercben mért eltérés ártalmatlan, a percben mért eltérés elutasítást magyaráz, és egy rendszer, amely semmilyen szinkronizációs forrást nem jelent, mindkettőre jelölt. Hasonlítsa össze a két UTC-időbélyeget közvetlenül, mert a helyi idő olyan időzónát tartalmaz, amelyet az algoritmus soha nem lát. Ha az eltérések kicsik, és a kódok továbbra is elbuknak, hagyja abba az órák állítását, és inkább vizsgálja meg a regisztrációs bejegyzést. A zárolt fiók elleni ismételt kísérletek nehezebbé teszik az eredeti hiba megfigyelését.
Jegyezze fel az elutasítás idejét, az eltérést és a hiba szövegét, és hagyja ki ebből a közös titkot. A támogatás az első hárommal tud dolgozni, és soha nem szabad látnia a negyediket.