Expertus metuit
Про мультифакторную аутентификацию
2020-06-26 19:16

Аутентификация в информационной системе обычно происходит через логин и пароль. Логин служит для идентификации пользователя, а пароль — для подтверждения логина. Такая схема использовалась годами, однако со временем проблема кражи личности приобрела такие масштабы, что потребовался дополнительный уровень защиты — многофакторная аутентификация (multi-factor authentication, MFA).

Смысл MFA в том, что идентификация пользователя происходит по нескольким независимым каналам (факторам) и когда результат по всем положительный, система успешно завершает процесс аутентификации.

Факторы делятся на несколько классов и для MFA должны использовать как минимум два, причём все они должны быть из разных классов. Предполагается, что у злоумышленника не может быть доступа одновременно ко всем факторам.

Вот эти классы:

  • нечто, имеющееся у вас — некий физический объект в вашем распоряжении: смарт-карта, токен авторизации, ключ (от замка), пропуск и т.п.;
  • то, что вы знаете — пароль или пин-код;
  • то, чем вы являетесь — какие-нибудь физические характеристики вашего тела, биометрия (отпечаток пальца, сетчатки и т.п.);
  • то, где вы находитесь — ваше местоположение, либо географическое (например, определённое GPS/GLONASS/ec), либо сетевое (tcp/ip подсеть).

В простейшей схеме двухфакторной аутентификации (2FA) используется фактор то, что вы знаете в виде логина и пароля, фактор нечто, имеющееся у вас в виде одноразовых кодов, которые нужно вводить вместе с логином и паролем. Исторически использовался первый фактор нечто, имеющееся у вас в виде небольшого устройства с генератором кодов, при входе в систему нужно было ввести код с экрана устройства.

RSA SecureID

© Mateusz Adamowski, source

Самым популярным в обычном мире стала разновидность токена в виде SMS с кодом, отправлямым на мобильный телефон пользователя. Такой способ очень очень удобен, но очень небезопасен. Компромиссом между удобством (смартфон) и безопасностью (аппаратный токен) стали мобильные приложения на смартфоне, выполняющие роль генератора кодов.

Самым массовым таким приложением является Google Authenticator, реализующий простой и открытый алгоритм TOTP. Алгоритм этот очень простой и красивый, коротко его можно описать так:

  • сервис генерирует общий секретный ключ и каким-то образом передаёт его пользователю, эта операция делается всего один раз и больше никогда не повторяется, обычно секретный код можно прямо с экрана ввести в приложение в виде QR-кода, либо ввести непосредственно руками;
  • секретный ключ вставляется в TOTP-приложение и больше никогда не показывается пользователю;
  • для аутентификации сервер генерирует проверочный код на основе секретного ключа и текущего времени, округлённого до 30 секунд;
  • пользователь открывает приложение и вводит тот код, который показывается на экране, этот код по такому же алгоритму генерируется и обновляется каждые 30 секунд;
  • если коды совпадают, аутентификация успешно завершается.

Единственным «тонким» моментом в этой схеме является процесс изначальной синхронизации секретного ключа, лучше всего это делать каким-нибудь защищённым способом. Если этот ключ «утечёт», то злоумышленник получает контроль над этим «токеном». Впрочем, схема (как и многие другие с передачей кода) подвержена MITM-атаке.

❈ ❈ ❈

Почему 2FA SMS — это всегда плохая идея. SMS — это исключительно ненадёжный канал для передачи такого рода данных, ваш номер злоумышленники могут просто украсть через поддельный паспорт, сотрудники сотового оператора могут получить к ним доступ и так далее.

❈ ❈ ❈

Отдельно хочется отметить биометрию. Отпечаток пальца, отпечаток сетчатки и прочее потенциально можно подделать, можно воспользоваться уязвимостями оборудования. Поэтому хорошим тоном считается использование биометрии в качестве «логина», а не «пароля». Другими словами, вы предоставляете системе свою «биометрию», а потом через другие факторы её подтверждаете.

Комментарии

Текст комментария (разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com> ещё)
Имя (обязательно, 50 символов или меньше)
Опциональный email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2019 Sergey Stolyarov | Работает на Pyrone