Серия Disclaimer'ов
Общий дисклеймер
- Публикация предназначена для просмотра с устройства под управлением клавиатуры. Настоятельно рекомендуется подключить мышь или использовать тачпад;
- Это одна из первых статей автора на подобных площадках, хотя он конкретно с Хабром официально связан с 2014 года, по факту - с 2012 г.;
- Стиль изложения автора состоит из:
- Академический, ввиду 10+ лет стажа в образовательно-научной академическо-РАНимой среде педагогическо-студенческих отношений;
- Двачёво-лурко-постиронично-стёбный, ввиду 10+ лет обитания в нижнем сегменте Рунета;
- Адекватный (редко, почти никогда).
- Официально подтвержденным уровнем интеллекта автора является IQ 38. Просьба учесть данный аспект при реакции на материал, прежде чем перейти к обвинениям или оскорблениям;
- Статья скорее всего является для вас бесполезной, так как по факту это результат графоманства автора.
О личности автора
- Ввиду крайней степени инфантильности автор отказывается от ответственности за содержимое статьи, вашу реакцию на неё, её отдельные части и словообразования, а также не является аффилированным лицом ни в какой степени к упоминаемым в статье терминам;
- Автор вежливо предлагает перестать читать статью при появлении первых признаков жжения в районе пятой точки у читателя;
- В случае с полным прочтением статьи и вызванными эффектами из пункта выше, автор чуть менее вежливо предлагает съездить по заданным координатам (https://goo.gl/maps/Q6PudQ3aBTfV9PuL7).
Соглашения по статье
Отказ от ответственности
Настоящим подтверждаю, что все материалы, опубликованные на сайте Habr.com, являются исключительно информационными и не являются рекламой, советом или предложением для принятия каких-либо финансовых решений. Материалы описаны в своеобразном стиле русского языка и могут содержать грамматические, орфорграфические, стилевые, речевые, фактические, генетические ошибки (включая автора).
Автор не несет ответственности за любые последствия, вытекающие из использования информации, представленной в материале. Любая информация, предоставленная на этом сайте, может быть неточной или не актуальной, и автор не гарантирует ее точность или полноту.
Автор также не несет ответственности за любые убытки или ущерб, которые могут возникнуть в результате использования информации, содержащейся в материале. Использование информации, размещенной на сайте, находится на условиях исключительной ответственности читателя в соответствии с соглашением сайта Habr.com. Автор не несет ответственности за любые действия или бездействия, предпринятые на основе информации, содержащейся в материале.
Автор не несет ответственности за содержание сторонних сайтов, на которые предоставляется доступ через ссылки в материале. Автор не контролирует эти сайты и не несет ответственности за их содержание и реакцию читателя.
Настоящий отказ от ответственности применяется ко всему содержимому статьи на сайте Habr.com и действует в пределах законодательства и личной воли автора по отношению к читателям и администрации сайта.
С уважением, мнимым или настоящим,
Кеня
Дисклеймер, применяемый к данному материалу
Автор гарантирует, что основной текст работы, равно как и его части, не написан ChatGPT или иными продуктами на основе машинного обучения. Гарантия не распространяется на обложки, исходный код, примеры генерации текста, заголовки, спойлеры, сноски, подписи, надписи, вписи, табличные, графические, звуковые и иные материалы, включенные в состав, или являющиеся ссылками в тексте работы.
TL;DR
Я в гробу видал ставить приложения-аутентификаторы, которые используются одним конкретным сервисом, причем у меня подгорело так, что я излил свою душу в данную публикацию. Набросил на вентилятор, короче.
Аннотация
В статье рассматривается проблема возрастающего количества приложений для аутентификации в том или ином сервисе. В виду того, что (не) каждый сервис старается завести своё эксклюзивное для него приложение-аутентификатор, пользователю приходится устанавливать такой "ключ" просто потому, что другого способа нет, пусть даже у юзера и есть подходящее приложение, поддерживающее TOTP. В статье изложены проблематика, причины такого явления, его недальновидные плюсы и более актуальные минусы, опубликован компромиссный вариант решения проблемы с учетом технической подкованности аудитории сервиса Хабр.
Ведение
Мультифакторная аутентификация подразумевает, что существует несколько независимых факторов, с помощью которых повышается вероятность, что именно у данного аутентифицируемого субъекта есть подходящие права использовать возможности той или иной системы, так? Мысль взята из головы, и не подразумевает ответа внутреннего голоса. С помощью более популярного подвида этого способа аутентификации - двухфакторной - вы входите в аккаунт, соответственно, двумя факторами. Это, как правило, связка "логин и пароль" + "СМС / электронная почта". Но этим она не исчерпывается.
"Двухфакторка" ныне доступна почти повсеместно. Она покрывает, по субъективным ощущениям, более 0.0001% веб-сервисов в мире, а среди популярных (юзербаза которых, судя по последним сливам, считается от 10-100 млн. учетных записей) веб-сайтов её доля доходит до 99%. В любой (около)айтишной веб-системе 2FA является стандартом, а MFA - желанной фичёй, которая явно присутствует и обозначена - сужу по себе - лишь в провайдерах авторизации Microsoft и Amazon.
Абсолютное большинство сервисов поддерживает двухфакторную аутентификацию на основе различных вариаций метода OTP (One-Time-Passcode). Его суть в следующем:
После ввода пароля вы вводите также одноразовый код, который генерируется по какой-либо функции (заранее обговорённой между сервисом и производителем токена-фактора), и возможно, синхронизируемый с сервисом по времени. Или отсчитывающий секунды от 1970 года (TOTP вроде так работает, см. RFC 6238). Грубо говоря, в банду OTP можно вписать и SMS, и телефонный звонок с кодом, и хардварные токены (коим может быть и знаменитый Flipper Zero), и маятник Фуко, и фаза Луны, если вы считаете гелиоцентрическую солнечную систему за нечто надёжное... до первого пролёта Нибиру.
Но мы имеем в виду именно классический TOTP, реализованный программно в виде приложения. Да, те самые шесть циферок, которые мы вводим в форму аутентификации или, упаси Б-же, авторизации. Наверняка у некоторых людей стоит приложение, в котором собраны токены к нескольким (сотням) сервисов. Таким приложением может быть KeePass (туториал), Microsoft Authenticator или Authy.
Проблема
Беда в том, что такое приложение... не одно. Таких приложений на вашем экране будет всё больше, и их нельзя будет заменить одним универсальным. Каждый сервис норовит выпустить свой "эксклюзив". Каждый раз при заходе в раздел "Безопасность" в дашборде, вы натыкаетесь на рекламу их чудо-юдо-мега-аппа, которое решит все ваши проблемы, а генерируемые числа в их элитном аутентификаторе можно чуть ли не вывести себе на карту.
Вы подумаете, что: "Ну, вот, в данном приложении есть какие то эксклюзивные функции, которых нет в открытых аналогах? Круто же!", - и будете неправы. Ну, почти. Вы, возможно, перейдете на страницу документации и посмотрите возможности этого приложения, в частности, на каком особенном таком алгоритме оно работает. Под простыней текста, рекламирующего преимущества и функциоанал этого приложения, в кратком FAQ серым шрифтом 8pt на дисплее с 1488ppi и кастомным 146% масштабом вы найдёте... всё тот же TOTP. Вы начнёте вопрошать: "Но как же?! Наверняка это приложение должно быть каким то особенным, ведь не зря какой-нибудь русский Яндекс славится своей математической школой, ведь так? Они должны были придумать особый алгоритм для особого приложения! Не зря ведь в Контур сделал своё приложение - может, в нём действительно используются какие-то особые ФСБ-approved bottle-алгоритмы, устойчивые к атакам ребят с американским светлокожим геномом?".
И будете неправы. Нет в этом особенном эксклюзивном приложении ни фига. Оно реализует простейший TOTP. Разрабы тупо юзнули библиотеку, реализующую данную методику и RFC, и импортировали в приложение. Опять же, сужу по себе, никого не обвиняя.
Казалось бы, ничего страшного. "Раз практически любое 2FA-приложение из магазина поддерживает TOTP, то я могу подцепить двухфакторку к этому строптивому сервису, сующему своё фирменное приложение!" - и, опять же, будете неправы как минимум в половине случаев. Дело в том, что 2FA можно включить... лишь установив их фирменное приложение и залогинившись в их аккаунт. Я смотрю на тебя, Яндекс! Как так было позволено менджменту дорваться до вендор-лока открытого и весьма недевственного стандарта?
Кого казнить?
Данная проблема встречается всё чаще. Держите "расстрельный список" тех, кто безальтернативно перевел метод аутентификации в свой сервис через собственное приложение:
- Яндекс
- Контур
- Authy
- Blizzard
- Steam
- Binance*
- Whatsapp*
- Telegram*
- Discord*
* процесс аутентификации встроен в основное приложение
И список сервисов, которые живут в XXI веке и толерантно относятся к TOTP, который можно привязать к стороннему приложению:
- Госуслуги (вот вам смешно, но так и есть... простите за ссылку на ТГ)
- VK.com
- Экстремисты из ФБ*
- Террористы из Messenger*
- Просто не очень натуралы из Google
- Нормальные индийские ребята из Microsoft
- Dungeon main'ы из их же дочернего GitHub
- PayPal, Interkassa и т. д.
- Adobe (и Figma)
- Amazon
- Angel list
- Atlassian
- Autodesk
- Reddit
- DigitalOcean
- Dropbox
- Docker Hub
- EA, Ubisoft, EGS и прочие игровые платформы
- Практически любой VDS/VPS-провайдер
* заблокированы по решению Роскомнадзора
И так далее, и тому подобное. В общем, список выйдет очень длинный, мне лень писать весь, лучше смотрите актуальный здесь.
Несмотря на то, что сервисов, которые позволяют подключить любое TOTP-совместимое приложение, намного больше тех, что вендор-локнули реализацию стандарта, очевидно и то, что тенденция залочивать реализацию, что называется, "под себя" - есть, и никто её отрицать не будет.
Не всё так плохо (спойлер: нет)?
Справедливости ради, есть некоторый смысл ограничивать пользователя в способе аутентификации. Обычно подобные инициативы инициализируются, собственно, ради пресловутого "всеобщего блага на благо всего общего":
- Почти всегда добавляется поддержка Push-уведомлений в приложение-ключ. В процессе аутентификации пользователю достаточно приложить палец на кнопку "Утвердить вход", и затем, как правило, приложить какой-либо из 21 пальца в сканер отпечатков. Или посветить лицом в камеру;
- Вытекает из предыдущего пункта: упрощение процесса входа в сервис. Юзеру не придется переключаться на отдельное приложение и переписывать 6-7-8-значный код, ему надо лишь разблокировать свое мобильное устройство и приложить пресловутый 8-сантиметровый палец;
- Возможность скрыть реализацию от пентестеров, белых и черных шляп... смешной довод, но весьма неплохой утешающий менеджмент.
А теперь перейдем к минусам, которые касаются нас всех (говорю за себя):
- Невозможность включить и эксплуатировать 2FA, не используя стороннее приложение. Например, я хочу внести коды TOTP всех сервисов в приложение Authy. Ребята из "расстрельного списка" не дадут мне это сделать. Пусть даже их фирменное приложение совместимо вплоть бинарного уровня с любым стандартом TOTP - сервис тупо не позволит его подключить на стороннем приложении;
- Этот пункт косвенно происходит из первого. Если кратко: ПК за бортом. Как правило, их фирменные эксклюзивные приложения-ключи выходят всего лишь на двух платформах. А если я использую сервис ключей Authy или аунтентификатор на PWA, которые имеют в том числе клиент на ПК? Шиш мне, скажет Яндекс. У меня не всегда есть смартфон в кармане, и я могу обходиться без него даже более двух часов! В таком случае мне намного удобнее логиниться в сервис на ПК и на ПК же посмотреть сгенерированный токен. Принцип "двухфакторки" при этом не нарушается;
- Более утилитарный минус - фирменные приложения-ключи из "расстрельного списка" кушают. Они потребляют заряд аккумулятора устройства на работу в фоне и крадут какой-то процент процессорного времени, не говоря уже о занятом адресном пространстве в постоянной памяти. Этот довод может быть ключевым, если вы будете выбирать между фирменным приложением и каким-то своим вариантом.
Что предлагаем?
Всем командам разработчиков "расстрельного списка"! Предлагаю компромисс на условиях анонимного раскаяния и последовательного выполнения следующих предложений моего ультиматума:
1. Разрешить пользователям подключать сторонние 2FA-клиенты;
2. Реализовать TOTP, если его нет в методах входа в ваш сервис;
3. В качестве компромисса разрешаю продвигать своё фирменное приложение как основной метод аутентификации по TOTP, но позволять использовать коды на сторонних приложениях.
Просьба рассматривать данный компромисс как открытое письмо. Это всё, что я хотел. Несбыточная ли это мечта?
Ведь получится ровно, как реализовано, например, в Microsoft, Google или у цукерберговских экстремистов. У них есть собственные решения для 2FA, но они не ограничивают пользователя в выборе способа. У них не обвалился бизнес, не ухудшилась аналитика. Почему же нельзя сделать, как у них?
Что будет?
Если же тенденция переноса методов аутентификации на фирменные приложение продолжится, то получится примерно так, только количество приложений на экране будет в десять раз больше:
Мопед не мой, но как пример скриншот со смартфона среднего ИПшника
Сейчас всего лишь десяток приложений, но дальше ком начнёт расти, и, возможно, минимум 50% приложений в смартфоне и на ПК будут эти самые фирменные "ключи". Пугает, правда?
Выводы и заключение
В статье приведен компромиссный вариант в параграфе "Что предлагаем?" по решению проблемы расплодившихся эксклюзиных аутентификаторов. Проблема не решится, если никто не будет обращать на неё внимание, как, впрочем, если и обращать - тоже... Но первый шаг этому положен!