SMS Two factor auth — Альтернативы ч1
Cтараюсь придерживаться принципа «Критикуешь — предлагай», поэтому вот продолжение поста
«
SMS Two factor auth — плохая практика»
Для справки, факторы аутентификации:
1. Something you
know (например, пароль или пин)
2. Something you
have (например, симка, на которую приходит смс с кодом)
3. Something you
are (например, биометрия / FaceID)
Альтернативы — не обязательно прямая замена второму фактору. Но все они призваны решить проблему «подтвердить, что пользователь легитимный».
В один пост упаковать не получилось, поэтому разбил на три и запосчу по одному в пн, вт и ср.
О чем будут посты:
1.
TOTP приложения типа Google Authenticator, упомянутые в комментах к прошлому посту. Здесь же расскажу про
Yubikey, — физическое устройство для генерации ТOTP. Торчит у меня в ноутбуке, кстати.
2. «
Вход по QR-коду» Whatsapp / Яндекс,
«Да, это я» Google и другие реализации с помощью приложения на мобиле, где пользователь уже залогинен
3.
WebAuthN — Стандарт W3C, будущее аутентификации в вебе. Passkey как частная имплементация WebAuthN для биометрического passwordless. Чтобы рассказать про WebAuthN, я затевал эту серию постов)
========================
Time-
based OneTime
Password
(TOTP) — это способ генерировать на клиенте коды для 2fa
Это
приложения — например
Google Authenticator, Duo Mobile, …
Или устройство
Yubikey, которое вставляется в USB и имеет одну кнопку.
📲
С приложением процесс выглядит так:
- Пользователь открывает Google Authenticator на мобиле
- Для первичной привязки приложения к сервису сайт показывает пользователю QR-код с секретным токеном
В QR кодируется строка вида otpauth://totp/Your
label?secret=123&issuer=Yourservice
- Пользователь сканирует этот QR-код приложением
- Теперь приложение может генерировать OTP с помощью этого токена и метки временного диапазона
- На странице сайте с 2fa пользователь вводит сгенерированный OTP
- Сайт генерирует OTP с помощью этого же токена и временной метки на своей стороне, сравнивает с введенным пользователем.
В данном случае второй фактор (what you have) — подтверждение владения устройством, на котором установлено и настроено приложение TOTP.
Плюсы — это отсутствие минусов смс:
- 100% «доставляемость», т.к. в отличие от смс они генерируются на клиенте. Работает даже в оффлайне!
- Безопасность. Нельзя «восстановить» как симку. Нельзя перехватить как смску.
- Бесплатность.
Минусы:
— Пользователь должен
очень хотеть воспользоваться вашим сервисом, чтобы ради этого устанавливать и настраивать новое приложение
— Нужно открывать приложение — это лишнее действие, в то время как код из смс можно взять из пуша
—————————
🤏
Yubikey — тоже генерирует TOTP, но процесс чуть отличается.
- Сервер сохраняет себе
публичный ключ Yubikey, ассоциирует его с пользователем
- Yubikey генерирует и подписывает OTP код с помощью секретного ключа, хранимого на устройстве. Генерируемый текст — шифротекст до 64 символов, не предназначен для ручного ввода
- Через драйвер «USB-клавиатуры» Yubikey сам заполняет TOTP в поле ввода, в котором фокус
- Сервер проверяет подпись с помощью публичного ключа.
Так же как и в случае с приложением, второй фактор здесь заключается в подтверждении владения устройством с таким публичным ключом, сохраненным на сервере.
Плюсы:
— еще бóльшая безопасность. Можно сказать, максимальная
— код генерируется одним нажатием, если юбик уже торчит в ноуте
Минусы — еще бóльшая сложность для пользователя:
— Тратить 30-60 баксов на девайс, ждать доставку, а потом его с собой везде таскать
— если юбик не торчит в ноуте, то его надо будет найти и вставить в usb
— можно потерять
Мое мнение: способ безопасный, но не удобный. Массового пользователя не заставить им пользоваться. Можно вкручивать насильно, когда нужно защитить самые ценные аккаунты, а пользователь от вас точно никуда не уйдёт. Но если дать возможность альтернативно пройти 2fa через смс – то все бенефиты безопасности исчезают.
Завтра расскажу про гораздо более user-friendly способы подтверждения.