Մեկանգամյա կոդերը կարող են լիովին ճիշտ լինել ձեր հեռախոսում և միևնույն վայրկյանին մերժվել սերվերի կողմից։ Երկու կողմերն էլ հաշվարկում են նույն ֆունկցիան ընդհանուր գաղտնիքից և ընթացիկ ժամային քայլից, ուստի ժամանակի շուրջ տարաձայնությունը տարաձայնություն է առաջացնում կոդի շուրջ։ Դա ժամացույցի շեղումը դարձնում է անվտանգության տեսանկյունից նշանակալի խնդիր, ոչ թե պարզապես անհանգստություն։

Այստեղ կարևոր են երկու ժամացույց, և տեսանելին ուղղելը այն մասն է, որ մարդիկ առաջինն են անում։ Այն ժամացույցը, որ սովորաբար ուշադրություն է պահանջում, մյուսն է։

Կոդը ժամանակի ֆունկցիա է, ոչ գաղտնաբառ

TOTP-ն վերցնում է ընդհանուր գաղտնիքը և ընթացիկ ժամանակից ստացված հաշվիչը, երկուսն էլ անցկացնում բանալիով հեշի միջով և արդյունքը կտրում կարճ տասնորդական տողի, ինչպես սահմանված է RFC 6238-ում։ Հաշվիչը առաջ է շարժվում յուրաքանչյուր ժամային քայլում, սովորաբար երեսուն վայրկյան, ուստի նույն գաղտնիքը նոր արժեք է ստեղծում, երբ քայլը փոխվում է։ Ստուգիչը վերահաշվարկում է ընթացիկ քայլի սպասվող արժեքը և համեմատում, ինչը պահանջում է նույն գաղտնիքը և նույն պատկերացումը հիմա պահի մասին։ Գաղտնաբառը մնում է կրկնակի օգտագործելի, քանի դեռ այն չի փոխվել, մինչդեռ այս արժեքը լրանում է մի սահմանի վրա, որը հաճախորդը չի տեսնում։

Այդ պատճառով մի կոդ աշխատում է, իսկ հաջորդը ձախողվում է մի քանի պահ անց։ Սա նաև բացատրում է, թե ինչու զրույցի հաղորդագրությունից կոդ պատճենելը այդքան անվստահելի սովորություն է։

Երկու ժամացույց պետք է համընկնեն, ոչ թե մեկը

Գրանցման նյութը առաջին ընդհանուր բանն է, իսկ ժամանակը՝ երկրորդը։ Եթե գաղտնիքը ճիշտ է, մինչ ժամացույցները տարբերվում են թույլատրելի պատուհանից ավելի, ապա յուրաքանչյուր ստեղծված արժեք ընկնում է սխալ քայլի մեջ և մերժվում։ Եթե ժամացույցները համընկնում են, մինչ գաղտնիքը սխալ է, յուրաքանչյուր արժեք նույնպես մերժվում է, և երկու ձախողումներն էլ մուտքի էկրանից նույնն են երևում։ Դրանք բաժանելը նշանակում է ստուգել հաշվի գրառումը և ժամանակը առանձին, այդ հերթականությամբ։

Ստուգիչի ժամացույցը նույն ստուգմանն է արժանի, ինչ սարքի ժամացույցը։ Սերվերը, որի ժամանակի աղբյուրը խափանված է, միանգամից մերժում է բոլոր օգտվողների ճիշտ կոդերը, և հաշվետվությունները կնկարագրեն հանկարծակի ընդհատում, ոչ թե շեղում։ Այդ օրինաչափությունը արժե ճանաչել, որովհետև դրա ուղղումը սերվերին է պատկանում, ոչ թե հարյուր հեռախոսի։

Ինչ արժե պատուհանի լայնացումը

Իրականացումները կարող են ընդունել կոդ հարակից քայլից՝ փոքր տարբերությունները կլանելու համար, և այդ հանդուրժողականությունը դիզայնի որոշում է, ոչ անվճար կարգավորում։ Յուրաքանչյուր լրացուցիչ քայլ բազմապատկում է ցանկացած պահի վավեր արժեքների քանակը, ինչը հենց այն է, ինչ նախընտրում է գուշակող հարձակվողը։ Կրկնության դեմ կանոնը կարևոր է նույն պատճառով, քանի որ երկու անգամ ընդունված կոդը օգտակար ձևով արտահոսած կոդ է։ Ադմինիստրատորը, որը լայնացնում է պատուհանը բողոքները լռեցնելու համար, իրական հատկությունը փոխանակում է կոսմետիկ բարելավման հետ։

Ժամացույցի ուղղումը վերանորոգումն է, մինչդեռ պատուհանի լայնացումը հանգստացնող է։ Առաջինը վերացնում է պատճառը, երկրորդը՝ թաքցնում այն։

Ստուգեք երկու ժամացույցներն էլ՝ նորից փորձելուց առաջ

Կարդացեք ժամանակը սարքում և սերվերում, և համեմատեք շեղումները, ոչ թե ցուցադրված տեղական ժամերը։ Ստորև բերված հրամանները ցույց են տալիս համաժամացման վիճակը և չմշակված UTC պահը Linux հոսթում կամ սերվերում։ Գործարկեք դրանք երկու ծայրերում՝ նախքան որևէ նույնականացման կարգավորում փոխելը։

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

Վայրկյաններով չափված շեղումը անվնաս է, րոպեներով չափվածը բացատրում է մերժումը, իսկ համակարգը, որը չի հաղորդում համաժամացման ոչ մի աղբյուր, թեկնածու է երկուսի համար։ Համեմատեք երկու UTC ժամադրոշմերը ուղղակիորեն, քանի որ տեղական ժամանակը ներառում է ժամային գոտի, որը ալգորիթմը երբեք չի տեսնում։ Եթե շեղումները փոքր են, իսկ կոդերը դեռ ձախողվում են, դադարեցրեք ժամացույցների կարգավորումը և փոխարենը ստուգեք գրանցման գրառումը։ Կողպված հաշվի դեմ կրկնվող փորձերը դժվարացնում են սկզբնական խնդրի դիտարկումը։

Գրանցեք մերժման ժամանակը, շեղումը և սխալի տեքստը, և ընդհանուր գաղտնիքը թողեք դրանից դուրս։ Աջակցությունը կարող է աշխատել առաջին երեքի հետ և երբեք չպետք է տեսնի չորրորդը։

Առնչվող հոդվածներ