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

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

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

TOTP ја зема заедничката тајна и бројач изведен од тековното време, ги поминува двете низ хеш со клуч и го скратува резултатот на кратка децимална низа, како што е определено во RFC 6238. Бројачот напредува со секој временски чекор, обично триесет секунди, па истата тајна создава нова вредност кога чекорот се менува. Проверувачот повторно ја пресметува очекуваната вредност за тековниот чекор и споредува, што бара истата тајна и истата претстава за сегашноста. Лозинката останува за повеќекратна употреба додека не се смени, додека оваа вредност истекува на граница што клиентот не ја гледа.

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

Два часовници мора да се согласат, не еден

Материјалот за регистрација е првото заедничко нешто, а времето е второто. Ако тајната е точна додека часовниците се разликуваат повеќе од дозволениот прозорец, секоја генерирана вредност паѓа во погрешниот чекор и се одбива. Ако часовниците се согласуваат додека тајната е погрешна, секоја вредност исто така се одбива, и двата неуспеха изгледаат идентично од екранот за најава. Нивното раздвојување значи проверка на записот на сметката и времето одделно, по тој редослед.

Часовникот на проверувачот заслужува исто внимание како часовникот на уредот. Серверот чиј извор на време е расипан ги одбива точните кодови на сите корисници одеднаш, а извештаите ќе опишуваат ненадеен прекин, а не отстапување. Овој образец вреди да се препознае, зашто неговата поправка и припаѓа на серверот, а не на сто телефони.

Колку чини проширувањето на прозорецот

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

Поправањето на часовникот е поправка, додека проширувањето на прозорецот е смирувачко средство. Првото ја отстранува причината, второто ја крие.

Проверете ги двата часовници пред да се обидете повторно

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

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

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

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

Поврзани статии