Урок 3. Двухфакторная аутентификация
Пароль может утечь, его могут подсмотреть или выманить. Двухфакторная аутентификация (2FA, двухэтапная проверка) добавляет к паролю второй шаг: после пароля сайт просит доказать, что вход выполняете вы, — кодом с телефона, нажатием на телефоне или ключом безопасности. Тогда одного пароля злоумышленнику мало.
Три вида факторов
Фактор — способ доказать, что вы — это вы. Их три вида:
- знание — то, что вы знаете: пароль, PIN-код;
- владение — то, что у вас есть: телефон с приложением, SIM-карта, ключ безопасности;
- свойство — то, чем вы являетесь: отпечаток пальца, лицо.
Двухфакторная защита — это два фактора разных видов. Два пароля подряд — по-прежнему один вид: их можно украсть одним и тем же способом.
Какие бывают вторые шаги
| Способ | Как работает | Надёжность |
|---|---|---|
| Код в SMS или звонке | Сайт присылает код на номер телефона | Слабее остальных, но лучше, чем ничего |
| Приложение-генератор | Приложение показывает код, который меняется каждые 30 секунд | Хорошая |
| Подтверждение в приложении | На телефон приходит запрос «Это вы входите?» | Хорошая, если не подтверждать всё подряд |
| Ключ безопасности | Маленькое USB- или NFC-устройство, касание подтверждает вход | Самая высокая, защищает от фишинга |
| Ключ доступа (passkey) | Вход по отпечатку или PIN-коду телефона, ключ хранится в устройстве | Очень высокая, защищает от фишинга |
Почему SMS — самый слабый способ
- Перевыпуск SIM-карты. Мошенник может по поддельным документам или обманом получить у оператора дубликат вашей SIM-карты — и все коды придут ему.
- Вредоносное приложение в телефоне может читать SMS.
- Код выманивают. Чаще всего код из SMS человек называет сам — звонящему «из банка».
И всё же SMS гораздо лучше, чем один пароль. Если сайт не умеет ничего другого — включайте SMS.
Приложение-генератор
Приложение-генератор (его ещё называют аутентификатором) показывает шестизначные одноразовые коды — по английской аббревиатуре TOTP. Код живёт 30 секунд, потом появляется новый. Интернет приложению не нужен: код вычисляется из секрета и текущего времени.
Подойдут, например:
- Aegis Authenticator — для Android, бесплатное, с открытым кодом;
- FreeOTP — для Android и iPhone, бесплатное, с открытым кодом;
- Google Authenticator и Microsoft Authenticator — бесплатные, для Android и iPhone.
Как подключить приложение к аккаунту:
- В настройках безопасности аккаунта выберите приложение-аутентификатор.
- Сайт покажет QR-код. Отсканируйте его приложением — в нём появится строка с кодом.
- Введите текущий код на сайте, чтобы подтвердить, что всё работает.
- Сохраните резервные коды, которые выдаст сайт (о них ниже).
Время на телефоне должно быть точным: включите в настройках даты и времени автоматическую установку по сети. Если часы ушли на минуту-другую, коды перестают подходить.
Для любопытных: как получается код
QR-код содержит секрет — случайный набор байтов, который знают только сайт и приложение. Обе стороны делят текущее время на отрезки по 30 секунд, берут номер отрезка и вычисляют из него и секрета код по стандарту RFC 6238. Поэтому коды совпадают без всякой связи между телефоном и сайтом. Программа ниже считает коды для тестового секрета из самого стандарта:
import hashlib
import hmac
import struct
def totp(secret, unix_time, digits=6, step=30):
counter = unix_time // step
message = struct.pack(">Q", counter)
digest = hmac.new(secret, message, hashlib.sha1).digest()
offset = digest[-1] & 0x0F
number = struct.unpack(">I", digest[offset:offset + 4])[0] & 0x7FFFFFFF
return str(number % 10 ** digits).zfill(digits)
secret = b"12345678901234567890"
for moment in (59, 1111111109, 1234567890, 2000000000):
print(moment, totp(secret, moment))59 287082
1111111109 081804
1234567890 005924
2000000000 279037Число слева — время в секундах от 1 января 1970 года, справа — код, который показало бы приложение в эту секунду. Отсюда главный вывод: кто знает секрет, тот получает те же коды. Поэтому QR-код при настройке никому не показывают и не отправляют.
Подтверждение в приложении
Некоторые сервисы присылают на телефон запрос «Это вы пытаетесь войти?» с кнопками «Да» и «Нет». Удобно, но есть ловушка: злоумышленник, знающий пароль, может слать такие запросы раз за разом, пока человек не нажмёт «Да» по ошибке или от раздражения.
Если пришёл запрос на вход, а вы сейчас никуда не входили, — нажмите «Нет» и сразу смените пароль этого аккаунта. Неожиданный запрос значит, что пароль уже кто-то знает.
Ключи безопасности и ключи доступа
Ключ безопасности — небольшое устройство с USB-разъёмом или NFC, работающее по стандарту FIDO2 или U2F. При входе его вставляют в компьютер или подносят к телефону и касаются кнопки. Ключ проверяет адрес сайта сам, поэтому на поддельном сайте он просто не сработает: выманить такой вход фишингом нельзя.
Ключ доступа (passkey) работает по тому же принципу, но хранится в самом телефоне или компьютере, а вход подтверждается отпечатком, лицом или PIN-кодом устройства. Подробно — справка Что такое ключи доступа.
Резервные коды и смена телефона
Главный риск двухфакторной защиты — потерять второй фактор самому: телефон украли, разбили, сбросили.
- Резервные коды. Почти все сайты при включении 2FA выдают набор одноразовых кодов на такой случай. Распечатайте или запишите их и храните вместе с главным паролем менеджера — дома, отдельно от телефона.
- Второй способ. Добавьте в аккаунт запасной вариант: второй ключ, резервный номер телефона.
- Перенос перед сменой телефона. Перед сбросом или продажей старого телефона перенесите коды в новое приложение: у многих генераторов есть экспорт или резервная копия. Проверьте вход с нового телефона и только потом стирайте старый.
Код — это ключ от аккаунта
Ни банк, ни почтовая служба, ни милиция, ни «служба поддержки» никогда не просят назвать код из SMS или из приложения. Код подтверждает вход или платёж: назвав его, вы сами открываете дверь. Тот, кто просит код, — мошенник, кем бы он ни представлялся.
Где включить второй шаг в первую очередь: почта, учётные записи Google, Apple и Майкрософт, банк, мессенджеры, соцсети, менеджер паролей, а у администратора — хостинг, регистратор доменов и панели серверов. Общие шаги — справка Как включить двухфакторную защиту.
Коротко
- Второй шаг входа нужен, чтобы утёкшего пароля было мало.
- SMS — слабее всего, приложение-генератор — хорошо, ключ безопасности и ключ доступа — лучше всего.
- Коды генератора считаются из секрета и времени; QR-код с секретом никому не показывают.
- Неожиданный запрос «Это вы входите?» — нажать «Нет» и сменить пароль.
- Резервные коды — записать и хранить дома; перед сменой телефона — перенести генератор.
- Код никому не называют: его просят только мошенники.