Введение
2014 год можно смело назвать годом взломанных аккаунтов. Согласно Identity Theft Resource Center, данные были похищены чаще, чем когда-либо с 2005 года.
Также согласно ресурсу Have I been pwned? было похищено более 175 млн. аккаунтов. И одно дело, когда утекли абсолютно все данные и совершенно другое, когда утекли только учётные записи пользователей. Именно последнее будет обсуждаться в данной публикации.
Двухфакторная аутентификация
Двухфакторная аутентификация по сути является стандартом индустрии, позволяющем предотвратить использование утечек учётных записей, так как злоумышленник не сможет авторизоваться под украденным пользователем без второй аутентификации. Также это сводит на нет перебор паролей, убирает необходимость использования капчи и делает некоторые другие вещи приятнее в зависимости от приложения.
Известных способов реализовать двухфакторную аутентификацию несколько:
- Физический токен.
- SMS гейтвей.
- Приложение-аутентификатор.
Физический токен
Плюсы:
- Очень безопасно. Если аутентификатор скомпрометирован — мы узнаем об этом мгновенно, ведь его надо украсть.
Минусы:
- Стоит денег.
- Нужно иметь с собой при необходимости аутентифицироваться.
- Если у вас B2C, вы стопроцентно не сможете раздать токен каждому.
SMS гейтвей
Плюсы:
- Безопасно.
Минусы:
- Мы не контролируем его. Абсолютно. Нам неизвестно, что происходит внутри, нам неизвестно, что происходит с нашей базой номеров, нам неизвестно, действительное ли смс была отправлена. Что будет, когда сервис упадёт?
- Стоимость. Я брал цены с Clickatell. В среднем отправить одну смс стоит 0.03 доллара. Если вы отправляете 100 тысяч сообщений в месяц, это будет стоить вам 3000 долларов в месяц (~180 тысяч рублей) или 36 тысяч долларов в год (~2 млн. рублей). А что если вы немного больше по размерам? И отправляется 1 млн сообщений в месяц? Это будет стоить вам 30 тысяч долларов в месяц (360 тысяч в год). А что, если вы доросли до размеров ого-го? И отправляется 10 млн. сообщений в месяц? Тогда будьте добры выложить 300 тысяч долларов в месяц или 3 600 000 долларов в год (~216 млн. рублей). Это плохо. Если вы выкладываете деньги из своего кармана, вы могли бы купить на них что-нибудь интересное. Если это деньги инвестора, то вы могли бы пустить их на развитие проекта, новые сервера, увеличение зарплаты и прочие полезные вещи.
- Ваш пользователь всегда должен иметь при себе телефон с авторизованной SIM картой. Отсюда вытекают всякие неприятности, если пользователь меняет SIM карту или теряет телефон, или батарейка на нём садится.
Приложение-аутентификатор
Плюсы:
- Безопасно.
- Мы полностью контролируем его.
Минусы:
- Иногда суммарная стоимость разработки и поддержки такого приложения обходится дороже, чем использование SMS гейтвея.
- Вашему пользователю всегда нужно иметь с собой авторизованное устройство.
Стороннее приложение-аутентификатор
Например Google Authenticator или Microsoft Authenticator.
Плюсы:
- Безопасно.
Минусы:
- Мы не контролируем его и не знаем, что происходит внутри.
- Что будет с этим приложением завтра? Не убьют ли его, как ненужное?
- Вашему пользователю всегда нужно иметь с собой авторизованное устройство. При этом оно должно поддерживать сторонний аутентификатор.
Ещё одна аутентификация (the Sign)
Я назвал её the Sign. Пользователю не нужно вообще ничего, кроме его эмейла и доступа в почту с ним.
Выглядит это так:
- Пользователь вводит email в нашем сервисе.
- Мы добавляем его в базу, если его там не было.
- Отправляем пользователю письмо со сгенерированный авторизационной ссылкой и кодом, если авторизация будет в приложении.
- Пользователь авторизуется по ссылке или с помощью кода.
- ...
- Профит!
Диаграмма процесса:
Плюсы:
- Безопасно.
- Пользователю не нужно думать над паролем или давать нам или нет доступ в его профиль социальной сети. Если мы сначала сделали лендинг, чтобы проверить популярность идеи, то потом нам не составит никакого труда разослать пользователем авторизационные ссылки и не морочить их авторизацией.
- Мы полностью контролируем и ведём мониторинг всего процесса.
- Стоимость решения крайне невысока.
- Работает на любом устройстве.
- Пользователю вообще не нужно авторизованное устройство, только доступ к почте.
- Разработай один раз и забудь. Занимайся только поддержкой. Но вы ведь уже поддерживаете сервис отправки почтовых сообщений в своём проекте, не так ли?
- Для того, чтобы ввести код в приложении, нужно приложить ровно столько же усилий, сколько с SMS.
Минусы:
- Пользователю нужен доступ к email аккаунту.
Заключение
Данный процесс пока является концептом и не применяется в живых приложениях. Он не проверен временем. Так как его придумала ровно одна голова. Он не проверен критикой. Но я не нашёл возможных атак и вообще существенных минусов. Поэтому и вынес на публичное обсуждение. Хочется понять, ограничивает ли применение такой авторизации что-либо кроме того, что он не применяется широко.