Vienreizējās lietošanas kodi var būt pilnīgi pareizi jūsu tālrunī, un tomēr serveris tos noraida tajā pašā sekundē. Abas puses aprēķina vienu un to pašu funkciju no koplietota noslēpuma un pašreizējā laika soļa, tāpēc nesaskaņa par laiku rada nesaskaņu par kodu. Tas padara pulksteņa nobīdi par drošībai nozīmīgu defektu, nevis vienkārši traucēkli.

Šeit svarīgi ir divi pulksteņi, un redzamā labošana ir tā daļa, ko cilvēki dara vispirms. Tas, kuram parasti nepieciešama uzmanība, ir otrs.

Kods ir laika funkcija, nevis parole

TOTP ņem koplietoto noslēpumu un skaitītāju, kas atvasināts no pašreizējā laika, laiž abus caur jaucējfunkciju ar atslēgu un saīsina rezultātu līdz īsai decimāldaļu virknei, kā noteikts RFC 6238. Skaitītājs virzās uz priekšu katrā laika solī, parasti trīsdesmit sekundes, tāpēc viens un tas pats noslēpums rada jaunu vērtību, kad solis mainās. Pārbaudītājs pārrēķina pašreizējā soļa paredzamo vērtību un salīdzina, kas prasa to pašu noslēpumu un to pašu priekšstatu par tagadni. Parole paliek atkārtoti lietojama, līdz tā tiek nomainīta, savukārt šī vērtība beidzas pie robežas, kuru klients neredz.

Tāpēc viens kods darbojas, bet nākamais neizdodas dažus mirkļus vēlāk. Tas arī izskaidro, kāpēc koda kopēšana no tērzēšanas ziņas ir tik neuzticams ieradums.

Diviem pulksteņiem jāsakrīt, nevis vienam

Reģistrācijas materiāls ir pirmā koplietotā lieta, un laiks ir otrā. Ja noslēpums ir pareizs, kamēr pulksteņi atšķiras vairāk par pieļaujamo logu, katra ģenerētā vērtība nonāk nepareizajā solī un tiek noraidīta. Ja pulksteņi sakrīt, kamēr noslēpums ir nepareizs, katra vērtība arī tiek noraidīta, un abas kļūdas pieteikšanās ekrānā izskatās vienādi. To nošķiršana nozīmē konta ieraksta un laika pārbaudi atsevišķi, tieši tādā secībā.

Pārbaudītāja pulkstenis ir pelnījis tādu pašu pārbaudi kā ierīces pulkstenis. Serveris, kura laika avots ir bojāts, noraida visu lietotāju pareizos kodus uzreiz, un ziņojumos tiks aprakstīts pēkšņs pārtraukums, nevis nobīde. Šo modeli ir vērts atpazīt, jo tā labojums pieder serverim, nevis simts tālruņiem.

Cik maksā loga paplašināšana

Implementācijas var pieņemt kodu no blakus soļa, lai absorbētu nelielas atšķirības, un šī tolerance ir dizaina lēmums, nevis bezmaksas pielāgojums. Katrs papildu solis reizina jebkurā brīdī derīgo vērtību skaitu, un tas ir tieši tas, ko dod priekšroku minētājam uzbrucējam. Atkārtošanas noteikums ir svarīgs tā paša iemesla dēļ, jo divreiz pieņemts kods ir kods, kas ir noderīgi noplūdis. Administrators, kurš paplašina logu, lai apklusinātu sūdzības, apmaina reālu īpašību pret kosmētisku uzlabojumu.

Pulksteņa labošana ir remonts, bet loga paplašināšana ir nomierinošs līdzeklis. Pirmais novērš cēloni, otrais to slēpj.

Pārbaudiet abus pulksteņus pirms mēģināt vēlreiz

Nolasiet laiku ierīcē un serverī un salīdziniet nobīdes, nevis parādītos vietējos laikus. Tālāk norādītās komandas parāda sinhronizācijas stāvokli un neapstrādāto UTC momentu Linux resursdatorā vai serverī. Palaidiet tās abos galos pirms jebkura autentifikācijas iestatījuma maiņas.

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

Sekundēs mērīta nobīde ir nekaitīga, minūtēs mērīta izskaidro noraidījumu, un sistēma, kas neziņo par nevienu sinhronizācijas avotu, ir kandidāte uz abiem. Salīdziniet abas UTC laika zīmes tieši, jo vietējais laiks ietver laika joslu, kuru algoritms nekad neredz. Ja nobīdes ir mazas un kodi joprojām neizdodas, pārtrauciet pulksteņu regulēšanu un tā vietā pārbaudiet reģistrācijas ierakstu. Atkārtoti mēģinājumi pret bloķētu kontu padara sākotnējo defektu grūtāk novērojamu.

Pierakstiet noraidījuma laiku, nobīdi un kļūdas tekstu, un atstājiet koplietoto noslēpumu ārpus tā. Atbalsts var strādāt ar pirmajiem trim un nekad nedrīkstētu redzēt ceturto.

Saistītie raksti