Глоссарий
Двухфакторная аутентификация (2FA)
Двухфакторная аутентификация это вход, где кроме пароля просят второе доказательство, и одного пароля мало.
Как идёт второй шаг
Пароль больше не заканчивает вход. Он заканчивает только первую его половину.
- 1
Проверяется пароль
В ответ приходит не пропуск, а недолгий билет на вторую половину. Он подписан своим отдельным ключом, чтобы его нельзя было принять за пропуск и войти с одним лишь паролем.
- 2
Проверяется число
Приложение на телефоне и сервер считают одни и те же отрезки от общих часов и приходят к одним и тем же шести цифрам, ни разу друг с другом не поговорив по сети.
- 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, поэтому все распространённые приложения дают на том же секрете то же самое число.
- Где лежит секрет?
- Секрет аккаунта лежит в базе закрытым и после настройки второй раз не показывается. Ключ, положенный внутрь профиля, живёт на вашей машине и до сервера не доходит.
Держите код там, где форма входа
Профиль умеет хранить ключ того аккаунта, в который входит, и показывать текущее число в том же окне.