11 лучших аутентификаторов для Android, iOS, Windows и macOS | Блог Касперского

Введение

Двухфакторная аутентификация сегодня повсюду. Благодаря ей, чтобы украсть аккаунт, недостаточно одного лишь пароля. И хотя ее наличие не гарантирует, что ваш аккаунт не уведут, чтобы ее обойти, потребуется более сложная и многоуровневая атака. Как известно, чем сложнее что-либо в этом мире, тем больше вероятность, что работать оно не будет.

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

Но для начала, можете взглянуть на демо того, чем мы сегодня займемся.

Основы

Первое, что стоит упомянуть про одноразовые пароли, — это то, что они бывают двух типов: HOTP и TOTP. А именно, HMAC-based One Time Password и Time-based OTP. TOTP — это лишь надстройка над HOTP, поэтому сначала поговорим о более простом алгоритме.

HOTP описан спецификацией RFC4226. Она небольшая, всего 35 страниц, и содержит все необходимое: формальное описание, пример реализации и тестовые данные. Давайте рассмотрим основные понятия.

Прежде всего, что такое HMAC? HMAC расшифровывается как Hash-based Message Authentication Code, или по-русски “код аутентификации сообщений, использующий хэш-функции”. MAC — это механизм, позволяющий верифицировать отправителя сообщения.

Алгоритм MAC генерирует MAC-тэг, используя секретный ключ, известный только отправителю и получателю. Получив сообщение, вы можете сгенерировать MAC-тэг самостоятельно и сравнить два тэга. Если они совпадают — все в порядке, вмешательства в процесс коммуникации не было.

Что же такое хэш? Хэш — это результат применения к сообщению Хэш-функции. Хэш-функции берут ваши данные и делают из него строку фиксированной длины. Хороший пример — всем известная функция MD5, которая широко использовалась для проверки целостности файлов.

Похожее:  Подборка плагинов 2020 для формы регистрации WordPress

Сам по себе MAC — это не конкретный алгоритм, а лишь общий термин. HMAC в свою очередь — уже конкретная реализация. Если точнее, то HMAC-X, где X — одна из криптографических хэш-функций. HMAC принимает два аргумента: секретный ключ и сообщение, смешивает их определенным образом, применяет выбранную хэш-функцию два раза и возвращает MAC-тэг.

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

Согласно спецификации, HOTP вычисляется на основе двух значений:

Счетчик — это 8-байтовое значение, синхронизированное между клиентом и сервером. Оно обновляется, по мере того как вы генерируете новые пароли. В схеме HOTP счетчик на стороне клиента инкрементируется каждый раз, когда вы генерируете новый пароль. На стороне сервера — каждый раз, когда пароль успешно проходит валидацию.

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

Итак. Как вы, наверное, заметили, HMAC тоже принимает два аргумента. RFC4226 определяет функцию генерации HOTP следующим образом:

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))

Вполне ожидаемо, K используется в качестве секретного ключа. Счетчик, в свою очередь, используется в качестве сообщения. После того, как HMAC функция сгенерирует MAC-тэг, загадочная функция Truncate вытаскивает из результата уже знакомый нам одноразовый пароль, который вы видите в своем приложении-генераторе или на токене.

Давайте начнем писать код и разберемся с остальным по ходу дела.

Google Authenticator

Операционные системы:Android, iOS

Если вы оказались в этом посте, то, скорее всего, вы уже знаете о Google Authenticator и ищете ему альтернативу. Однако не упомянуть об этом приложении было бы как минимум странно — все-таки оно до сих пор остается невероятно популярным. Кроме того, аутентификатор Google удобно рассматривать как базовый вариант, по сравнению с которым другие программы имеют те или иные достоинства и недостатки.

В целом Google Authenticator — вполне удобный аутентификатор для тех, кто не хочет связываться с синхронизацией токенов через облако. Вместо этого приложение позволяет легко экспортировать все заведенные в нем токены в одном гигантском QR-коде и так же легко импортировать их на новом устройстве.

Версия для iOS не так давно успела обзавестись поиском по тегам и защитой входа с помощью Touch ID / Face ID, а вот в Android-версии ни поиска, ни защиты нет. Скрывать сгенерированные коды от посторонних глаз Google Authenticator по-прежнему не умеет, что может быть не очень удобно, если вы пользуетесь им в людном месте.

Достоинства:

  • Не требует создания аккаунта
  • В iOS-версии вход в приложение защищен Face ID / Touch ID
  • Простой интерфейс и минимум настроек
  • Позволяет экспортировать и импортировать весь набор токенов в виде одного большого QR-кода
  • В iOS-версии есть поиск по токенам

Недостатки:

  • В Android-версии нет защиты входа в приложение
  • Не скрывает коды
  • Нет бэкапа/синхронизации через облако
  • Из-за легкости экспорта токенов больше рисков в случае, если разблокированное приложение попадет в чужие руки

Резюме: в Google Authenticator уже ощутимо не хватает полезных функций, но если не хотите связываться с хранением токенов в облаке — это все еще неплохой вариант.

. Встроенный аутентификатор iOS и macOS

Операционные системы: iOS (встроен в систему), macOS (встроен в браузер Safari)

Начиная с версии iOS 15, в операционной системе айфонов появился встроенный генератор одноразовых кодов двухфакторной аутентификации. Вот как его найти: войдите в Настройки → Пароли, выберите одну из уже запомненных учетных записей (или создайте новую) и под надписью Параметры учетной записи нажмите на кнопку Настроить код проверки.

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

Также встроенный аутентификатор теперь доступен и в macOS — а вернее, в браузере Safari 15 версии и новее. Чтобы его найти, откройте Safari, в меню вверху экрана перейдите в Safari → Настройки → Пароли. Далее выберите один из аккаунтов (или нажмите на для создания нового), нажмите кнопку Изменить и в открывшемся окне нажмите Ввести ключ настройки (опции с QR-кодом здесь не будет).

. Яндекс.Ключ

Операционные системы:Android, iOS

Яндекс.Ключ немного похож на Microsoft Authenticator. Это приложение также не требует обязательной регистрации — в «оффлайновом режиме» им можно пользоваться без всякого аккаунта. И в теории оно также упрощает вход в учетную запись компании-разработчика: для входа в аккаунт «Яндекса» больше не будет использоваться пароль, а надо будет либо сканировать в Яндекс.

Ключе QR-код подтверждения входа, либо вводить генерируемый аутентификатором одноразовый код. Этот код, кстати, отличается от кодов других сервисов — он состоит из восьми букв вместо обычных шести цифр (то есть возможных комбинаций в 200 000 раз больше — видимо, в «Яндексе» решили слегка перестраховаться).

Microsoft Authenticator

Операционные системы:Android, iOS

Microsoft Authenticator часто выбирают те, кто ищет альтернативу Google Authenticator — просто в силу известности компании-разработчика. Отчасти это может быть оправданно: приложение Microsoft добавляет к базовому набору функций пару полезных дополнений — например, оно умеет скрывать коды на экране, защищает вход в приложение и в iOS, и в Android-версии, а также позволяет сохранять токены в облаке.

Но есть и минусы. Во-первых, приложения для Android и iOS используют совершенно несовместимые системы бэкапа в облако, при этом переносить токены каким-то альтернативным способом вообще невозможно, так что если вы пользуетесь устройствами с разными ОС, будет очень неудобно.

Достоинства:

  • Вход в приложение защищен ПИН-кодом, отпечатком пальца или Face ID
  • Бэкап/синхронизация через облако
  • Скрывает коды
  • Может работать без аккаунта (если не включать бэкап в облако)
  • Существенно упрощает вход в учетную запись Microsoft
  • В iOS-версии есть поддержка Apple Watch

Недостатки:

  • В Android-версии для бэкапа/синхронизации нужно войти в аккаунт Microsoft
  • Системы бэкапа/синхронизации для iOS и Android несовместимы друг с другом
  • Нет экспорта/импорта токенов
  • Занимает неприлично много места в памяти — 150-200 Мбайт

Резюме: Microsoft Authenticator сильно упрощает вход в учетные записи Microsoft, но ему сложно простить несовместимость бэкапов для iOS и Android, а также чудовищный размер приложения.

Twilio Authy

Операционные системы:Android, iOS, Windows, macOS, Linux

Главное преимущество Twilio Authy — тотальная мультиплатформенность. И дело не только в том, что у Authy есть версии под все актуальные операционные системы, а еще и в том, что в приложении прекрасно организована синхронизация между ними. Правда, из этого вытекает одно не самое приятное следствие: для использования приложения необходимо завести аккаунт, привязанный к номеру телефона, — без него оно просто не будет работать.

Интерфейс у приложения заметно отличается от привычного по другим аутентификаторам. Вместо списка здесь использовано что-то вроде вкладок — в любой момент времени отображается только один выбранный токен, а все остальные представлены мелкими иконками в нижней части экрана, и между ними можно переключаться.

Достоинства:

  • Вход в приложение защищен ПИН-кодом, отпечатком пальца или Face ID
  • Бэкап/синхронизация через облако
  • Есть приложения для всех популярных ОС
  • В iOS-версии есть поддержка Apple Watch
  • Поиск по токенам

Недостатки:

  • Вообще не работает без аккаунта, привязанного к номеру телефона
  • На экране всегда показывается только один токен
  • Если токенов много, то искать нужный не очень удобно
  • Код активного в данный момент токена невозможно скрыть
  • Нет экспорта/импорта токенов

Резюме: Twilio Authy — ни шагу без регистрации и не самый удобный интерфейс на смартфонах, но зато есть приложения для любых операционных систем, и синхронизация между ними работает просто идеально.

Cisco Duo Mobile

Операционные системы:Android, iOS

Duo Mobile — одно из старейших приложений-аутентификаторов, которое в 2022 году было куплено компанией Cisco. Главное его достоинство — очень простой и удобный интерфейс. Также Duo Mobile умеет скрывать коды от посторонних взглядов и не требует регистрации.

Для облачного бэкапа Duo Mobile использует две разные системы: на платформе Android это Google Cloud, а на iOS — iCloud. Для этого используются аккаунты Google и Apple соответственно, которые в любом случае уже есть у пользователя смартфона. Так что новую учетную запись для работы с приложением заводить не придется.

Но у этого решения есть и минус: синхронизировать данные между версиями для Android и iOS не получится, а экспорта в файл в Duo Mobile не предусмотрено, равно как нет и возможности посмотреть секретный ключ или QR-код для уже сохраненных токенов (что могло бы помочь в случае ручной синхронизации).

Достоинства:

  • Простой и удобный интерфейс
  • Скрывает коды
  • Бэкап/синхронизация через облако
  • Не нужно заводить аккаунт
  • В iOS-версии есть поддержка Apple Watch

Недостатки:

  • Нет защиты входа в приложение
  • Нет экспорта/импорта токенов
  • Системы бэкапа/синхронизации для iOS и Android несовместимы друг с другом

Резюме: Cisco Duo Mobile может подойти, если вы пользуетесь только одной мобильной операционкой и совершенно точно не планируете переезжать.

FreeOTP

Операционные системы:Android, iOS

Опенсорсное приложение-аутентификатор, которое было создано после того, как исходный код Google Authenticator стал закрытым. Интерфейс FreeOTP крайне минималистичен, в нем вообще нет ничего лишнего. Особенно в iOS-версии — из нее убрали даже опцию создания токена на основе секретного ключа, оставив только сканирование QR-кода.

Из недостатков следует отметить, что приложение ни в каком виде не поддерживает ни экспорт/импорт токенов в виде файла, ни синхронизацию через облако. Также в FreeOTP нельзя установить ПИН-код или еще как-либо защитить вход в приложение (в iOS-версии можно защитить отдельные токены с помощью Touch ID или Face ID).

Зато приложение по умолчанию скрывает коды от взглядов из-за плеча, причем даже если вы отключите сокрытие, оно автоматически включится через 30 секунд бездействия. Наконец, есть и еще один плюс: FreeOTP занимает минимум памяти смартфона — около 2-3 Мбайт (для сравнения, Google Authenticator занимает 15-20 Мбайт, а Microsoft Authenticator — 150-200 Мбайт).

Достоинства:

  • Не требует создания аккаунта
  • Максимально простой интерфейс
  • Скрывает коды по умолчанию
  • Скрывает коды автоматически через 30 секунд бездействия
  • Приложение занимает минимум места в памяти, 2-3 Мбайт
  • В iOS-версии есть защита токенов с помощью Touch ID или Face ID
  • В iOS-версии есть поиск по токенам

Недостатки:

  • В iOS-версии нельзя завести токен по секретному ключу (только сканировать QR-код)
  • Нет экспорта/импорта токенов
  • Нет бэкапа/синхронизации
  • Нет защиты входа в приложение

Резюме: как и все опенсорсное, FreeOTP — слегка своеобразное приложение, которому можно многое простить за минимализм в интерфейсе и объеме занимаемого дискового пространства.

AndOTP

Операционные системы:Android

В аутентификаторе andOTP есть все, что только можно придумать для удобного и безопасного хранения токенов, и даже немного больше. Например, среди функций andOTP есть поддержка тегов и поиск токенов по названию. А также возможность подключения «тревожной кнопки», позволяющей в случае опасности стереть из приложения все токены и сбросить настройки.

Приложение позволяет посмотреть секретный ключ или QR-код для каждого токена по отдельности. Также можно сохранить сразу все токены в зашифрованный файл на Google Диск — то есть одновременно реализован и облачный бэкап, и нормальный экспорт в файл. Можно защитить вход в приложение паролем или отпечатком пальца, с помощью которых вы входите в Android.

Но если хочется большей безопасности, можно установить отдельный ПИН-код или даже длинный пароль на вход именно в andOTP, плюс автоблокировку после определенного периода бездействия, точную длительность которого вы выберете сами. И еще примерно три-четыре экрана разнообразных настроек — одним словом, мечта настоящего гика.

Достоинства:

Недостатки:

  • Существует только для Android
  • Без подготовки в настройках можно потеряться
  • Из-за легкости извлечения секретных ключей больше рисков в случае, если разблокированное приложение попадет в чужие руки

Резюме: andOTP — самый многофункциональный аутентификатор для Android, который явно понравится гикам: если вам когда-нибудь чего-нибудь не хватало в приложении-аутентификаторе, можете быть уверены, что в andOTP это есть.

OTP auth

Операционные системы:iOS, macOS (590 ₽)

Для тех пользователей айфонов, которые прочитали выше про andOTP и начали завидовать владельцам Android, у нас хорошая новость: для iOS тоже есть продвинутое приложение-аутентификатор. Создатели OTP auth явно понимают проблемы тех, кто использует 2FA в большом количестве сервисов, поэтому в приложении есть система папок, которые позволяют упорядочить хранение токенов.

Также OTP auth позволяет в любой момент посмотреть секретный ключ или QR-код для любого токена — или экспортировать их все сразу в файл на смартфоне. Дополнительно поддерживается синхронизация через iCloud. Вход в приложение можно защитить как с помощью Touch ID или Face ID, так и помощью отдельного пароля именно для OTP auth — что будет более разумно с учетом легкости экспорта токенов из этого приложения. Из полезных функций не хватает разве что скрытия кодов от чужого взгляда — этого в OTP auth почему-то не предусмотрели.

Достоинства:

  • Можно посмотреть секретный ключ или QR-код любого токена
  • Экспорт сразу всех токенов в файл
  • Бэкап/синхронизация через iCloud
  • Система папок для упорядоченного хранения токенов
  • Поддержка Apple Watch
  • Настройки формата отображения кода
  • Защита входа в приложение паролем или Touch ID / Face ID

Недостатки:

  • Существует только для iOS и macOS (причем для macOS — только платная версия)
  • Не скрывает коды
  • Кастомизация иконок только в платной версии
  • Из-за легкости извлечения секретных ключей больше рисков в случае, если разблокированное приложение попадет в чужие руки

Резюме: OTP auth — самый многофункциональный аутентификатор для iOS с очень простым и удобным экспортом токенов.

Step Two

Операционные системы:iOS, macOS

Если andOTP вам кажется явным перебором, Twilio Authy отпугивает необходимостью регистрации, но при этом у вас есть потребность в аутентификаторе одновременно для iOS и macOS, то логичным шагом будет присмотреться к Step Two.

Настроек и функций тут тоже самый-самый минимум, но есть опция синхронизации через iCloud. Кроме того, десктопное приложение поддерживает сканирование QR-кодов — делает оно это через захват экрана, на что нужно разрешение пользователя (функция довольно опасная, поскольку в теории позволяет программе подсматривать за всем, что делает человек).

Достоинства:

  • Ничего лишнего
  • Не требует создания аккаунта
  • Бэкап/синхронизация через iCloud
  • Версия для macOS умеет сканировать QR-коды
  • Поддержка Apple Watch
  • Поиск по токенам

Недостатки:

  • Нет защиты входа в приложение
  • Не скрывает коды
  • Нет экспорта/импорта токенов
  • Максимум 10 токенов в бесплатной версии
  • Для сканирования QR-кода в macOS необходимо разрешить приложению Step Two захват экрана

Резюме: Step Two — минималистичный аутентификатор для тех, у кого Mac и iPhone, а больше ничего не надо.

WinAuth

Операционные системы:Windows

WinAuth в первую очередь заточен под геймеров. Дело в том, что у него есть уникальная суперспособность: это приложение поддерживает нестандартные токены для аутентификации в Steam, Battle.net и играх производства Trion/Gamigo. Так что если вы ищете альтернативу Steam Guard, Battle.net Authenticator или Glyph Authenticator / RIFT Mobile Authenticator, то вот вы ее и нашли.

Не забудьте сделать резервную копию

Напоследок несколько советов. Во-первых, вовсе не обязательно использовать только одно приложение-аутентификатор. Для каких-то целей может больше подходить один вариант, а для каких-то других целей — другой. Их можно и нужно комбинировать в зависимости от ваших потребностей.

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

Google Authenticator, andOTP, OTP auth и WinAuth. C ними риски значительно выше, так как потенциальный злоумышленник может не просто подсмотреть одноразовый код, который действует 30 секунд, но полностью клонировать все токены.

В-третьих, не забудьте сделать резервную копию токенов — особенно если ваш выбор пал на одно из приложений, в которых нельзя ни посмотреть секретный ключ или QR-код, ни экспортировать токены в файл (а таких большинство). Резервная копия пригодится на случай, если вы потеряете смартфон или, например, приложение перестанет корректно работать после очередного обновления. В большинстве случаев восстановить аутентификатор без резервной копии будет значительно сложнее.

План реализации

Чтобы заполучить одноразовые пароли, нам понадобится выполнить следующие шаги.

Звучит не слишком сложно, правда? Начнем с генерации хэша.

Последние штрихи — поддержка qr-кодов

Обычно, когда мы настраиваем 2FA, мы сканируем начальные параметры с QR-кода. Он содержит всю необходимую информацию: выбранную схему, секретный ключ, имя аккаунта, имя провайдера, количество цифр в пароле.

В предыдущей статье я рассказывал, как можно сканировать QR-коды прямо с экрана, используя API getDisplayMedia. На основе того материала я сделал маленькую библиотеку, которой мы сейчас и воспользуемся. Библиотека называется stream-display, и в дополнение к ней мы используем замечательный пакет jsQR.

Закодированная в QR-код ссылка имеет следующий формат:

otpauth://TYPE/LABEL?PARAMETERS

Например:

otpauth://totp/label?secret=oyu55d4q5kllrwhy4euqh3ouw7hebnhm5qsflfcqggczoafxu75lsagt&algorithm=SHA1&digits=6&period=30

Я опущу код, который настраивает процесс запуска захвата экрана и распознавания, так как все это можно найти в документации. Вместо этого, вот как можно распарсить эту ссылку:

const setupFromQR = data => {
  const url = new URL(data);

  // drop the "//" and get TYPE and LABEL
  const [scheme, label] = url.pathname.slice(2).split('/');
  const params = new URLSearchParams(url.search);

  const secret = params.get('secret');
  let counter;

  if (scheme === 'hotp') {
    counter = params.get('counter');
  } else {
    stepWindow = parseInt(params.get('period'), 10) * 1000;
    counter = getTOTPCounter();
  }
}

В реальном мире секретный ключ будет закодированной в base-32 (!) строкой, поскольку некоторые байты могут быть непечатными. Но для простоты демонстрации мы опустим этот момент. К сожалению, я не смог найти информации, почему именно base-32 или именно такой формат.

Для генерации тестовых QR-кодов рекомендую воспользоваться FreeOTP.

Тестирование

Для того чтобы протестировать реализацию, воспользуемся примерами из RFC. Приложение D включает в себя тестовые значения для секретного ключа “12345678901234567890” и значений счетчика от 0 до 9. Также там есть подсчитанные хэши HMAC и промежуточные результаты функции Truncate. Довольно полезно для отладки всех шагов алгоритма. Вот небольшой пример этой таблицы (оставлены только счетчик и HOTP):

   Count    HOTP
   0        755224
   1        287082
   2        359152
   3        969429
   ...

Если вы еще не смотрели демо, сейчас самое время. Можете повбивать в нем значения из RFC. И возвращайтесь, потому что мы приступаем к TOTP.

Заключение

И на этом все! Еще раз, не забывайте посмотреть демо. Там же есть ссылка на репозиторий с кодом, который за этим всем стоит.

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

До новых встреч!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *