О чём разговор
Практически каждый сайт настаивает на отказе от паролей и предлагает взамен использовать passkeys — новый механизм аутентификации. Идея звучит привлекательно: passkeys действительно могут быть безопаснее паролей и удобнее в использовании. Но за красивым фасадом скрывается проблема, напоминающая историю Троянского коня.
Ключевое отличие passkeys от всех остальных способов аутентификации в том, что у вас нет полного контроля над ними. С паролями вы сами решаете, где их хранить; с приложениями для двухфакторной аутентификации выбираете софт по своему вкусу; с физическими ключами можете доверить их другу. Но passkeys имеют скрытый механизм, позволяющий сайтам постепенно ограничивать вашу свободу.
Кто за этим стоит
Passkeys придумала FIDO Alliance — консорциум, объединивший различные интересы: крупные технологические компании, госорганы, спецслужбы, банки и даже несколько НКО вроде Mozilla. У каждого участника свои мотивы: Big Tech хочет продавать больше рекламы, спецслужбы хотят отслеживать всех, банки хотят избежать ответственности. Mozilla предпочитает не обострять.
Примечательно, что в FIDO Alliance нет ни одной организации по защите прав потребителей. Это контрастирует с World Wide Web Consortium, где наряду с корпорациями заседают представители общественных интересов и даже Тим Бернерс-Ли, создатель World Wide Web. В FIDO Alliance никто не отстаивает интересы самих пользователей.
Почему пароли действительно плохи
С утверждением, что пароли небезопасны, сложно спорить. Серверы SolarWinds, корпорации стоимостью в миллиарды, использовали пароль solarwinds123. Агентство по чрезвычайным ситуациям Гавайев случайно раскрыло пароль на стикере, попавшем в фотографию. Если ваша безопасность зависит от пароля, вы всегда будете беспокоиться, что кто-то его узнал и уже имеет доступ к вашему аккаунту.
Но пароли имеют одно неоспоримое преимущество: они интуитивны, все знают, как они работают, люди используют их веками, и вы сами решаете, где их хранить и кому показывать.
(И напомним: Netflix не хочет, чтобы вы делились паролями.)
Проблема уже решена: двухфакторная аутентификация
Проблему безопасности паролей удалось решить ещё до passkeys. Сначала появилась двухфакторная аутентификация (SMS-коды или email), затем более надёжная система — Time-Based One-Time Passwords (TOTP), они же приложения-аутентификаторы.
TOTP работает без интернета и SMS. Приложение просто генерирует случайное число каждые 30 секунд на основе текущего времени и уникального для вас ключа. Сайт получает только это число для проверки. Странный факт: название «приложение-аутентификатор» вводит в заблуждение. Сайты намекают, что нужно скачивать специальное приложение, например Google Authenticator. На самом деле TOTP — это открытый стандарт (RFC 6238); формула известна всем. Вы можете использовать любой софт, даже Game Boy из 90-х, или написать свой на Python.
TOTP — отличное решение. Если вы случайно раскроете код на фотографии, вы в опасности только пару минут, пока он не истечёт. Да, TOTP менее интуитивна, чем пароли, но как и пароли вы можете выбирать, где их хранить. Вы не сможете ввести банальный password123, потому что коды — это просто случайные числа, и все одинаково сложны для угадывания. Вы даже можете поделиться TOTP с другом, чтобы он помог вам получить доступ к Netflix, пока вы в командировке. Вы полностью контролируете эти данные — это ваши данные.
(Netflix тоже не хочет, чтобы вы делились TOTP.)
Где кроется проблема с passkeys
На поверхности passkeys похожи на TOTP. Оба имеют открытый стандарт (TOTP — RFC 6238, passkeys — WebAuthn), значит, должны иметь те же хорошие свойства. И действительно: я только что создал passkey с помощью свободного ПО, отправил его другу по электронной почте, и теперь мы оба можем логиниться на один сайт, используя этот passkey. Никто не просил разрешения — ни сайт, ни FIDO Alliance, ни даже мой друг. Мне не нужно вводить цифры вручную, не нужно помнить волшебные слова — passkey просто работает. Кажется, я могу делать с passkeys что угодно.
(Но Netflix не хочет, чтобы вы делились passkeys.)
Но где же подвох?
Подвох в том, что есть ещё один тип passkeys, совсем не похожий на описанный выше.
Много типов passkeys под одним названием
На самом деле существует множество разных типов passkeys, и FIDO Alliance специально назвала их все одинаково. Скорее всего, это сделано, чтобы намеренно запутать пользователей. В техдокументации WebAuthn почти не используется слово «passkey». Вместо этого используются термины: обнаруживаемые учётные данные и необнаруживаемые учётные данные; аппаратные и программные учётные данные; аттестованные и неаттестованные — и многое другое.
Спецификация WebAuthn похожа на каталог запчастей, а не на стандарт. Каждый тип passkey состоит из множества опциональных компонентов. Давайте разберём, какие типы существуют. Я представлю их в лучшем свете, чтобы вы поняли, почему некоторые рекомендуют passkeys, но к концу списка станет ясна проблема.
Копируемые и некопируемые passkeys
Оба типа существуют.
При создании passkey можно сделать его некопируемым. Преимущество: пока iPhone в кармане, никто другой не получит доступ к аккаунту. С другой стороны, passkey можно сделать копируемым, чтобы использовать один ключ на разных устройствах.
Убедитесь, что вы знаете, какой тип создаёте! Если вы ошибетесь, проблемы будут гарантированы — либо когда не сможете восстановить passkey со старого ноутбука, либо когда выясните, что кто-то уже имел копию.
Передаваемые и непередаваемые passkeys
Оба типа существуют.
Удивительно, но даже некопируемый passkey может быть передаваемым. Это нарушает обычную логику цифровых данных. Хотя в физическом мире всё так работает: когда вы даёте что-то другу, оно исчезает с вашего места.
Непередаваемый passkey нужен, если вы хотите быть уверены, что конкретное устройство необходимо для доступа. Передаваемый passkey пригодится, когда вы меняете смартфон на новую модель и хотите перенести ключ. (Или если вы хотите устроить авангардную цифровую эстафету с друзьями как художественный жест.)
Аппаратные и программные passkeys
Оба типа существуют.
Вы, вероятно, знаете, что такое файлы и папки, если когда-нибудь использовали компьютер. Смартфоны намеренно скрывают эту реальность, но они тоже используют файлы и папки — просто без привычного файлового браузера.
Значит, все passkeys — это просто файлы? Не совсем. Они могут быть файлами, а могут и нет. Поскольку файлы копируемы и передаваемы (что интуитивно), некопируемый passkey не может быть просто файлом.
Вот здесь появляются аппаратные passkeys. Они используют защищённый чип, встроенный во все современные устройства. Этот чип может хранить данные, которые нельзя вытащить (эксфильтрировать). Чипы разные: в ноутбуке это Trusted Platform Module, в iPhone — «Secure Enclave» и т.д. Вы не найдёте этот чип в файловом браузере — это отдельный компонент. Из-за криптографического назначения эти чипы называют «криптопроцессорами».
Консенсус: криптопроцессоры действительно очень безопасны. Вы можете спросить, не сможет ли хакер просто открыть чип с помощью инструментов и вытащить данные? Теоретически да, но такие чипы оснащены системами обнаружения и защиты от физического вмешательства — они сами саморазрушаются при попытке вскрыть. Если у вас нет ресурсов национального государства, можете считать, что никто не сможет вытащить секретные данные из криптопроцессора (если не считать гипотетических бэкдоров производителя) — ни Netflix, ни ОС, ни даже вы сам.
Вы можете предпочесть программный passkey, потому что понимаете, как работают файлы, и уже имеете решение для хранения приватных данных. Или вы можете выбрать аппаратный passkey для дополнительной безопасности почти неуязвимого криптопроцессора.
Passkeys с проверкой присутствия пользователя и без
Оба типа существуют.
Некоторые passkeys требуют, чтобы вы нажали кнопку или подтвердили действие. Другие могут использоваться полностью автоматически.
Первый вариант — если вы человек. Второй — если хотите разрешить программе действовать от вашего имени.
Passkeys с верификацией пользователя и без
Оба типа существуют.
Окей, может быть, пользователь был рядом, но как мы узнаём, был ли это правильный пользователь? Passkey может требовать биометрию (отпечаток пальца, сканирование сетчатки) или PIN/пароль для дополнительной защиты, чтобы убедиться, что только определённый человек может его использовать.
Верификация нужна, если вы боитесь, что вор украдёт ваше устройство. Без верификации можно, если вы собираетесь давать планшет родственнику читать электронные книги на Amazon, слушать музыку на Spotify и смотреть фильмы на Disney+.
Аттестованные и неаттестованные passkeys
Здесь начинается совсем другая история.
До сих пор я говорил об этих свойствах как о ваших собственных решениях. На большинстве сайтов это может быть правдой — пока. В конце концов, как Twitter может решать, какие меры безопасности вы должны включить? Но знайте: FIDO Alliance определил стандарт так, чтобы ваше passkey-программное обеспечение обязано сообщало сервису, какие из этих функций включены. Они называются флагами данных аутентификатора в стандарте WebAuthn.
Это означает, что Twitter может сказать: «Простите, мы принимаем только User-Present User-Verified Non-Copyable Hardware-Backed passkeys. Но вы можете выбрать между Transferable и Non-Transferable!» На самом деле я оптимист — они вероятно просто скажут «Ваш passkey недостаточно безопасен, скачайте наше приложение».
Но это же открытый стандарт! Может быть, вы знаете программиста на Python? Не сможет ли он написать своё собственное passkey-программное обеспечение, которое создаёт хорошие файловые passkeys без всех этих extra-функций, и просто соврать сайту, что у вас User-Present User-Verified Non-Copyable Hardware-Backed passkey?
Абсолютно можете! Ваше passkey-ПО может врать о любых функциях. Но только если это не аттестованный User-Present User-Verified Non-Copyable Hardware-Backed passkey. Это не получится подделать.
Аттестованные passkeys — самый критичный тип. Они используют то, что называется удалённой аттестацией (remote attestation), чтобы криптографически проверить — используя тот же защищённый криптопроцессор во всех современных устройствах — что вы используете один из одобренных passkey-менеджеров, а не самодельный, который может врать.
Это то, что лишает вас права принимать решения о ваших passkeys. К счастью, аттестованные passkeys пока не требуются на большинстве сайтов. Но стандарт FIDO Alliance делает аттестацию частью passkey-экосистемы, хотите вы этого или нет. И даже если сайт не требует аттестацию, он всё равно может проверить, поддерживает ли ваша система её. Это значит, что как только Twitter убедится, что большинство пользователей не пострадают, они смогут включить режим и начать отклонять неаттестованные passkeys.
Критически важно: удалённая аттестация требует сотрудничества криптопроцессора вашего устройства, passkey-менеджера, ОС и прошивки для прохождения проверки. Ваша ОС имеет полный доступ к каждой единице данных в каждом приложении, поэтому Twitter не может просто доверять вашему passkey-менеджеру — ему нужно доверять базовой ОС. Если хотя бы один из этих компонентов не пройдёт проверку — например, вы установили LineageOS, потому что ваш телефон перестал получать обновления безопасности и вы хотели остаться в безопасности без покупки новой машины — Twitter сможет это обнаружить и заблокировать вам доступ.
Честно говоря, у удалённой аттестации есть легитимные применения. Используя сайт, требующий аттестованные passkeys, вы можете быть уверены, что не установили фейковое приложение мошенника, которое ворует ваши данные — сайт его отклонит. Вы можете захотеть аттестованный passkey даже если сайт его не требует, чтобы проверить, что ваш софт не был скомпрометирован хакером. (Хотя, справедливости ради, аппаратное резервирование уже даёт гарантию, что passkey не будет вытащен из устройства, даже если хакер получит полный контроль. И вы всегда можете отключить устройство, чтобы временно запретить хакеру использовать ваши Non-Attested Hardware-Backed Non-Copyable Non-Transferable passkeys.)
Причины не использовать аттестацию: вы можете захотеть использовать ПО, не одобренное Twitter, например Linux. Или телефон с переустановленной ОС. (Или если вы нечестный — врать Netflix, что вы и ваши три друга — это один человек на одном устройстве.)
(Но с аттестацией Netflix наконец сможет запретить вам делиться passkeys.)
Это не только про Netflix или Twitter (X)
Есть много причин быть осторожным перед созданием passkey. Если вы использовали только сайты, требующие одного типа passkey, вы можете не заметить, когда другой сайт потребует другой тип. Не забывайте: в отличие от паролей, SMS-кодов и TOTP, passkeys разработаны работать в фоне без вашего ведома. Максимум — промпт подтверждения. (Это удобство.) Я ожидаю, что индустрия начнёт с минимальными ограничениями, а затем постепенно добавит больше и больше — не все сразу, а разные на разных сайтах. Через несколько лет люди забудут, что им когда-то было предложено выбирать, какие меры безопасности включать (если они вообще знали, что passkeys бывают разными).
Пока что почти никто не слышал об удалённой аттестации. Подавляющее большинство людей используют одну из четырёх основных ОС (Windows, Android, macOS, iOS), а не альтернативы вроде Linux, LineageOS, postmarketOS или GrapheneOS. Когда телефон перестаёт получать обновления, большинство просто покупают новый, а не переустанавливают ОС. Поэтому почти никто никогда не столкнётся с ситуацией, когда устройство не пройдёт аттестацию.
Но неужели аттестованные passkeys так уж плохи? В конце концов, мы и не должны делиться Netflix-аккаунтами.
Посмотрите снова на список членов FIDO Alliance и наденьте фольгу. Почему спецслужбам есть дело до того, делитесь ли вы Netflix-аккаунтом? Почему Microsoft это волнует?
Для спецслужб и корпораций вроде Microsoft, Google, Apple, Facebook, Amazon — обеспечение вам удобства и безопасности вероятно не главная цель. Я думаю, у них совсем другой мотив. Они могут использовать passkeys, чтобы запретить вам запускать несанкционированное ПО.
Удалённая аттестация позволит им проверить, что ваше устройство не способно, скажем, отправлять и получать зашифрованные сообщения, или запускать приложение конкурента, или пользоваться соцсетями без верификации ID. Они не хотят, чтобы вы отключили обязательный сканер на наготу, встроенный в ОС. (Да, я серьёзно.)
Но я хочу сам решать, какое ПО одобрить. Мне нравится, что в браузере я могу установить расширения и изменить сайты. Я могу отключить автозапуск видео на новостных сайтах, решить, какая реклама слишком навязчива, отфильтровать нерелевантные результаты поиска и отключить AI-резюме, заблокировать функцию рекомендованных видео на YouTube, которая всегда продвигает гнев и раскол (или как Big Tech это называет, «engagement»). И если сайт всё равно занимает мое время, расширение заблокирует его после определённого времени. Эти расширения дают мне контроль над интернетом, даже если Big Tech бы предпочёл решать за меня. Но Google владеет Chrome, самым популярным браузером, и может удалить поддержку полезных расширений (как они сделали в этом году с uBlock Origin); и с аттестацией они смогут запретить мне использовать любой другой браузер, который не подчинится.
Помните флаги данных аутентификатора? Их было всего четыре. Ранние версии стандарта FIDO Alliance («WebAuthn Level 1» и «WebAuthn Level 2») имели меньше опций. Если коротко, четыре бинарных выбора дают 16 типов passkey. В 2022 году FIDO Alliance добавила ещё несколько («WebAuthn Level 3»), чтобы сайты могли узнать, копируемы ли учётные данные и существуют ли резервные копии. Осталось два флага «зарезервировано на будущее». Что могут требовать passkeys в будущем?
Я не склонен говорить о скользящей дорожке, поэтому не буду утверждать, что кампании по защите детей сегодня превратятся завтра в законы для отслеживания политических диссидентов. Но скажу: широкое внедрение passkey-технологии, которую вам рекламируют как удобную и безопасную, способно легко позволить применять такие законы.
Если вам небезразличны приватность вашей и других, если вы верите, что люди должны выбирать, какой софт запускать на своих устройствах, что люди должны иметь право учиться писать свой софт и запускать его, что друзья должны иметь возможность анонимно обсуждать политику в интернете без вмешательства государства — я прошу вас отвергнуть эти десятки механизмов безопасности, все запутанно названные одним словом «passkeys». Дождитесь, пока Big Tech предложит что-то столь же удобное и безопасное, но с ясным определением и без скрытых условий. А пока что для безопасности используйте TOTP — Game Boy вас не разочарует.
Сноски
1. Никакого отношения к канадской сети мобильной связи с тем же названием.
2. Шучу, но Mozilla имеет репутацию борца, который в итоге сдаётся. Например, она в итоге внедрила фирменную DRM-систему Google Widevine в иначе open-source браузер Firefox, так как отказ мог лишить пользователей возможности смотреть Netflix.
3. Да, кто-то действительно создал TOTP для Game Boy. Я не могу в совести это рекомендовать, но это сделает вас популярным на вечеринках. (На моих вечеринках, во всяком случае.)
4. На практике аппаратный ключ может иметь файловый компонент, но он будет закодирован так, что криптографически бесполезен без криптопроцессора, для которого сделан.
5. Потребительские устройства обычно используют электронное сбивание как противотамперную меру, но более изобретательные ловушки существуют в легендах. XEROX однажды создала чип, который мог разбиться на мельчайшие осколки как защита.
6. Флаги данных аутентификатора не совсем совпадают с представленными выше функциями, но достаточно близко для этого поста. Например, флаг UP — это User-Present, флаг UV — User-Verified, и флаг BE — Copyability («Backup-Eligible»).
7. Флаг аутентификатора AT, если вам интересно.
8. Один вариант использования особенно интригует меня. В принципе, удалённую аттестацию можно запустить в обратном направлении, чтобы проверить, что сервер, к которому вы подключаетесь, не делает ничего вам нежелательного (вроде кражи номера кредитной карты или сохранения удалённых постов). Печально, но, насколько мне известно, ни одна крупная платформа никогда не внедрила «обратную» аттестацию таким образом.
9. Если я правильно понимаю, User-Verified требует User-Present, поэтому это подразумевает 12 отдельных вариантов. Но на практике меры безопасности вне специфических флагов (вроде требования биометрии или непередаваемости) запрашиваются и могут быть применены через удалённую аттестацию, поэтому на самом деле уже возможно сколько угодно ограничений passkey с WebAuthn.
10. Дополнение: я считаю, что создал убедительный аргумент за passkeys в этой статье. И я даже не указал одну из их лучших функций: в большинстве случаев они привязаны к домену (domain-bound), то есть устойчивы к так называемым Man-In-The-Middle атакам. Passkeys имеют столько невероятных свойств, что я действительно хочу использовать и рекомендовать их; очень жаль, что FIDO Alliance испортила хорошее изобретение, впихнув туда удалённую аттестацию и не потрудившись дать пользователям понять разницу между разными типами passkeys.
К счастью, если вы хотите высокоуровневой безопасности passkeys без скрытых условий, существует ещё более безопасное решение: security keys, вроде YubiKey. По сути, это физические passkeys, которые вы можете носить с собой и использовать наряду с другими устройствами. Они тоже часть стандарта WebAuthn, но поскольку они полностью самостоятельны, требования удалённой аттестации не вытекают во всю вашу ОС.