Једнократни кодови могу бити потпуно исправни на вашем телефону и ипак их сервер одбије у истој секунди. Обе стране рачунају исту функцију из заједничке тајне и тренутног временског корака, па неслагање око времена даје неслагање око кода. Зато је одступање сата квар значајан за безбедност, а не само сметња.

Овде су важна два сата, а поправљање видљивог је део који људи прво раде. Онај који обично тражи пажњу је други.

Код је функција времена, а не лозинка

TOTP узима заједничку тајну и бројач изведен из тренутног времена, пропушта обоје кроз хеш са кључем и скраћује резултат на кратак децимални низ, како је прописано у RFC 6238. Бројач напредује са сваким временским кораком, обично тридесет секунди, па иста тајна даје нову вредност када се корак промени. Верификатор поново израчунава очекивану вредност за тренутни корак и упоређује, што захтева исту тајну и исту представу о садашњем тренутку. Лозинка остаје за вишекратну употребу док се не промени, док ова вредност истиче на граници коју клијент не види.

Зато један код ради, а следећи не успева неколико тренутака касније. То такође објашњава зашто је копирање кода из чат поруке тако непоуздана навика.

Два сата морају да се слажу, не један

Материјал за упис је прва заједничка ствар, а време друга. Ако је тајна исправна док се сатови разликују више од дозвољеног прозора, свака генерисана вредност пада у погрешан корак и бива одбијена. Ако се сатови слажу док је тајна погрешна, свака вредност такође бива одбијена, и оба квара изгледају идентично на екрану за пријаву. Њихово раздвајање значи проверу уноса налога и времена независно, тим редом.

Сат верификатора заслужује исто прегледање као и сат уређаја. Сервер чији је извор времена покварен одбија исправне кодове свих корисника одједном, а извештаји ће описивати нагли прекид рада, а не одступање. Тај образац вреди препознати, јер његова поправка припада серверу, а не стотини телефона.

Шта кошта проширење прозора

Имплементације могу прихватити код из суседног корака да апсорбују мале разлике, а та толеранција је дизајнерска одлука, а не бесплатно подешавање. Сваки додатни корак множи број вредности важећих у сваком тренутку, што је управо оно што нападач који погађа преферира. Правило против понављања је важно из истог разлога, јер код прихваћен двапут је код који је корисно процурио. Администратор који проширује прозор да утиша жалбе размењује стварну особину за козметичко побољшање.

Исправљање сата је поправка, док је проширење прозора седатив. Прво уклања узрок, а друго га скрива.

Проверите оба сата пре него што покушате поново

Прочитајте време на уређају и на серверу и упоредите помаке, а не приказана локална времена. Команде испод приказују стање синхронизације и сирови UTC тренутак на Linux домаћину или серверу. Покрените их на оба краја пре него што промените било које подешавање аутентификације.

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

Помак измерен у секундама је безопасан, онај у минутима објашњава одбијање, а систем који не пријављује ниједан извор синхронизације кандидат је за обоје. Упоредите две UTC временске ознаке директно, јер локално време укључује временску зону коју алгоритам никада не види. Ако су помаци мали а кодови још не раде, престаните да подешавате сатове и уместо тога прегледајте унос за упис. Поновљени покушаји против закључаног налога чине оригинални квар теже уочљивим.

Забележите време одбијања, помак и текст грешке, а заједничку тајну оставите изван тога. Подршка може радити са прва три и никада не би требало да види четврто.

Повезани чланци