Перейти к содержимому

Глоссарий

Двухфакторная аутентификация (2FA)

Пароли утекают пачками и повторяются на разных сайтах. Второй шаг превращает утёкший пароль в тупик, и это единственный переключатель, который стоит перед всеми профилями аккаунта разом.

Двухфакторная аутентификация это вход, где кроме пароля просят второе доказательство, и одного пароля мало.

Как идёт второй шаг

Пароль больше не заканчивает вход. Он заканчивает только первую его половину.

  1. 1

    Проверяется пароль

    В ответ приходит не пропуск, а недолгий билет на вторую половину. Он подписан своим отдельным ключом, чтобы его нельзя было принять за пропуск и войти с одним лишь паролем.

  2. 2

    Проверяется число

    Приложение на телефоне и сервер считают одни и те же отрезки от общих часов и приходят к одним и тем же шести цифрам, ни разу друг с другом не поговорив по сети.

  3. 3

    Выдаётся пропуск

    Настоящий пропуск рождается только во второй половине входа, а промахи по числу считаются и закрывают дверь на время так же, как промахи по паролю.

Одно число и один раз

Отрезок живёт тридцать секунд, и только что использованный отрезок запоминается на стороне сервера. Поэтому число, подсмотренное через плечо, уже потрачено.

Соседний отрезок принимается в обе стороны: это прощает разошедшиеся часы телефона и не растягивает жизнь одного числа на минуты.

Коды на случай потери телефона

При включении второго шага выдаётся набор запасных кодов, и на экране аккаунта видно, сколько их у вас осталось.

Каждый код годится один раз. Без них разбитый телефон означает потерянный аккаунт, и закрыть такое обращение будет нечем.

Та же арифметика внутри профиля

У аккаунтов, с которыми вы работаете, второй шаг тоже свой, и тянуться за телефоном на каждом входе это самая долгая часть дня.

Профиль умеет держать такой ключ у себя и показывать текущее число в том же окне, поэтому код и форма входа перестают жить на двух разных устройствах.

Ваши часы прямо сейчас

Значения прочитаны в вашем браузере прямо на этой странице и никуда не уходят. В расчёт числа часовой пояс не входит вовсе, а входит только точность самих часов.

Ваша машина прямо сейчас

Часовой пояс
измеряем на вашей машине
Сдвиг в часах
измеряем на вашей машине

Прочитано в вашем браузере и показано здесь. Никуда не отправляется.

С чем это путают

  • Код в сообщении

    Сообщение можно увести на новую карточку в салоне связи, и владелец номера об этом не узнает. У числа, посчитанного на вашем собственном устройстве, перехватывать по дороге нечего.

  • Ключ для программ

    Ключ это отдельная дверь, которая отвечает без всякого второго шага, поэтому утёкший ключ отзывают, а не пережидают.

  • Права доступа

    Второй шаг доказывает, кто именно пришёл к двери. Что пришедшему потом разрешено менять внутри, это отдельный вопрос про его ступень.

Чего это не делает

  • Это не включает второй шаг где-то ещё. Здесь он стоит перед аккаунтом ARMANOS, а на каждой площадке, с которой вы работаете, его включают отдельно.
  • Это нельзя сделать обязательным для команды. Каждый включает второй шаг себе сам, и у владельца нет настройки, которая потребует его со всех.
  • Это не закрывает ключ для программ. Ключ входит по своим правилам и второго шага не проходит, поэтому дверь ему закрывают отзывом самого ключа.
  • Это не спасёт ключ, лежащий внутри профиля. Тот остаётся на вашей машине, до сервера он не доходит, и восстановить его по уже выданным числам нечем.

Проверить

И сама арифметика, и её границы это файлы, которые можно открыть.

Числа сходятся с образцами RFC 6238, а использованный отрезок не проходит
apps/server/src/auth/2fa/totp.ts · apps/server/test/two-factor.js
Билет между половинами подписан своим ключом, а секрет лежит закрытым
apps/server/src/auth/2fa/two-factor.service.ts
Ключ профиля даёт те же числа на этой машине, дальше предела в 32 бита
apps/desktop/src/lib/totp.js · apps/desktop/test/totp.js
Включение и снятие второго шага оставляют строку в записи
apps/server/src/common/audit/audit.service.ts

Вопросы

Что делать, если телефон потерян?
Возьмите запасной код из набора, выданного при включении второго шага. Каждый такой код годится ровно один раз, а остаток видно на экране аккаунта.
Ломают ли дело неверные часы?
Один отрезок в каждую сторону прощается, так что мелкий разбег часов не мешает. Дальше числа перестают сходиться, и лечится это тем, что устройство берёт время из сети.
Можно ли повторить подсмотренное число?
Нет. Использованный отрезок записан, поэтому то же число не пройдёт до конца своих тридцати секунд.
Какое приложение подойдёт?
Любое. Ссылка обычная, otpauth, а арифметика это RFC 6238, поэтому все распространённые приложения дают на том же секрете то же самое число.
Где лежит секрет?
Секрет аккаунта лежит в базе закрытым и после настройки второй раз не показывается. Ключ, положенный внутрь профиля, живёт на вашей машине и до сервера не доходит.

Держите код там, где форма входа

Профиль умеет хранить ключ того аккаунта, в который входит, и показывать текущее число в том же окне.