Почему безопасность проигрывает удобству, и это хорошо
Лет двадцать с лишним назад я загорелся идеей шифровать электронную почту. К тому моменту я уже вовсю работал в айти, и то, что моё письмо по дороге к адресату может прочитать кто угодно, беспокоило меня. Я скачал PGP, разобрался с генерацией ключей, настроил под это свой почтовый клиент, и запнулся на публикации своего открытого ключа на специальном сервере, хотя даже так был очень доволен собой.
Дальше получилось почти как в анекдоте. Чтобы шифровать переписку, нужен был хотя бы один собеседник, у которого тоже стоит PGP. Я начал рассказывать о своей затее знакомым. Реакция делилась примерно поровну. Половина говорила: «мне это не надо, я ничего такого не пишу». Вторая половина пробовала, говорила «ниасилил» и бросала. Среди коллег-айтишников ситуация была чуть лучше, среди не-айтишников совсем безнадёжна. В итоге за следующие лет десять я отправил шифрованных писем штук пять, и все самому себе, чтобы проверить, что оно вообще работает.
А вот Signal у меня сейчас стоит, и я через него переписываюсь каждый день. И мне не приходится разбираться и даже просто задумываться, как там устроено шифрование. И никто из моих собеседников, включая совсем нетехнических, не задумывался тоже. Если спросить, защищена ли их переписка криптографически, большинство ответит «не знаю, наверное». А она защищена. По сути той же криптографией с открытым и закрытым ключами, на которой когда-то строился мой провалившийся PGP.
Это очень показательная история о том, что технология вроде одна и та же, но судьба её сильно зависит от реализации. И дело тут совсем не в математике.
Получается простая вещь, в которую долго не хочется верить.
Безопасность побеждает только тогда, когда исчезает из интерфейса.
Всё, что требует от пользователя осознанных действий ради безопасности (пароли, ключи, сертификаты, парольные фразы, сверки отпечатков), рано или поздно проигрывает. Не потому, что пользователи глупые или ленивые. Просто у них есть задачи поважнее, чем разбираться в криптографии. Открыл банковское приложение — хочет посмотреть баланс. Открыл мессенджер — хочет ответить другу. Конкурировать с этими задачами безопасность не способна, потому что её ценность в нормальной жизни не видна, а её стоимость в виде лишних действий видна сразу.
В одном из прошлых постов я ругал интерфейсы, которые навязывают лишние действия ради бизнеса. Сториз вместо карты лояльности, попапы вместо баланса, скрытые жесты вместо кнопок. Здесь история похожая, только лишние действия навязаны не маркетингом, а соображениями безопасности. И эффект ровно тот же. Чем больше человек должен сделать, чтобы быть защищённым, тем меньше людей в итоге защищены, потому что не хотят выполнять эти действия.
Хорошая безопасность сегодня — это та, которой пользуется моя жена, не подозревая об этом.
PGP, или каноническая история провала
PGP появился в 1991 году. Криптографически он почти идеален. До сих пор почти невзламываем. Если завтра разведка перехватит шифрованное PGP-письмо, она с высокой вероятностью не сможет его прочитать.
Но за тридцать с лишним лет существования PGP так и не стал массовым инструментом, и уже не станет.
Причина в дизайне интерфейса. Чтобы отправить шифрованное письмо, нужно сгенерировать пару ключей, не потерять закрытый ключ, опубликовать открытый, надёжно сохранить парольную фразу для разблокировки, найти открытый ключ собеседника, убедиться, что это действительно его ключ (через так называемую сеть доверия, web of trust), настроить почтовый клиент или плагин, и только потом нажать «отправить». Если ошибиться в любом звене, письмо либо не зашифруется, либо зашифруется так, что прочитать его сможет посторонний.
Ещё в 1999 году исследователи из университета Карнеги-Меллона опубликовали статью с говорящим названием «Why Johnny Can’t Encrypt», то есть «Почему Джонни не может зашифровать». Они усадили за компы с PGP двенадцать достаточно технически грамотных человек, дали полтора часа и простое задание. Большинство не справились с ним. Тоже «ниасилили», как и мои знакомые. Часть участников отправила секретные сообщения в открытом виде, искренне думая, что они защищены. Эта работа стала классикой в области безопасности.
Через десять с лишним лет вышел Signal. Внутри у него такая же по идее криптография с парой ключей, как и в PGP (только не на RSA, а на более современных эллиптических кривых), плюс протокол одноразовых ключей, который технически даже сильнее. А снаружи это просто мессенджер: есть контакты, можно писать сообщения. Никаких ключей пользователь не видит. Никаких парольных фраз. Никакой сети доверия. Всё работает само.
То же самое потом сделали WhatsApp и iMessage. С точки зрения криптографии внутри лежит PGP, только дружелюбный к человеку. С точки зрения пользователя получился просто чат, в котором можно писать. Именно поэтому шифрованной перепиской в мире сегодня пользуются миллиарды людей, а не три тысячи журналистов и активистов.
Пароли и пасскеи
С паролями история ещё сложнее.
Десятилетиями нас учили, что пароль должен быть длинным, сложным, разным для каждого сервиса и регулярно обновляться. На практике это значит, что человек должен помнить пятьдесят разных строк вида Tr0ub4dor&3, не записывать их на бумажке, не использовать в двух местах сразу и не путать. Никто из живых людей такое не делает. В лучшем случае все пароли оказываются вариациями одного и того же. В худшем — везде стоит qwerty123 или даже что-то типа 123456, или password.
Чтобы усилить парольную защиту придумали двухфакторную проверку. Сначала коды отправлялись по СМС, потом через приложения-генераторы кодов, потом через физические ключи. Каждый следующий шаг был безопаснее предыдущего, и каждый следующий был неудобнее. СМС-код перехватывается, приложение надо где-то хранить, физический ключ можно потерять, забыть дома или сломать. Я знаю людей, которые принципиально отключают двухфакторку, потому что им важнее самим не оказаться запертыми снаружи аккаунта, чем не пустить туда злоумышленника.
Сейчас на смену всему этому постепенно приходит технология, которая выглядит почти как магия. Называется она пасскей (passkey, по-русски иногда переводят как «ключ доступа»). Технически это всё та же асимметричная криптография с парой ключей: на устройстве пользователя хранится закрытый ключ, сервис знает открытый, при входе устройство подписывает запрос сервиса. На бумаге звучит так же страшно, как PGP. На практике пользователь видит совершенно другое. Он заходит на сайт, ему предлагают войти, он прикладывает палец к телефону или смотрит в камеру, и вуаля — доступ в аккаунт разрешён.
Ключ при этом надёжно хранится в защищённом чипе устройства, синхронизируется между устройствами одного владельца через iCloud или аккаунт Google, и его невозможно выпросить у человека по фишинговой ссылке, потому что человек физически не знает этого ключа и не может его никому сообщить. Получается, что миллионы людей уже сегодня пользуются криптографической аутентификацией с устойчивостью к фишингу, хотя большинство из них об этом даже не подозревают.
Главное в этой истории не то, что пасскеи технически лучше паролей. Они лучше уже двадцать лет, в виде смарт-карт, токенов и аппаратных ключей. Но только сейчас они созрели до состояния, когда их можно включить пользователю по умолчанию, и он этого даже не заметит.
Тихая революция в админских буднях
То же самое уже лет десять происходит в мире разработчиков и системных администраторов.
Раньше обычный путь админа выглядел так. Сгенерировал себе пару ключей SSH (защищённого протокола для удалённого подключения к серверам), сложил их в папку ~/.ssh, скопировал открытый ключ на каждый сервер, к которому нужно подключаться, поставил у себя на машине везде разные парольные фразы или, чаще, не поставил никаких. Менять ключи никто не любит, поэтому они живут годами. Заодно эти же ключи периодически утекают в публичные репозитории GitHub, после чего автоматические сканеры начинают долбиться по чужим серверам. История стандартная и повторяется чуть ли не еженедельно.
В нормальных современных компаниях это устроено иначе. Сотрудник логинится один раз в корпоративную систему единого входа (Single Sign-On, SSO), и дальше доступ к серверам выдаётся ему временным ключом, который живёт пятнадцать минут или час. По истечении этого срока ключ умирает. Украсть его сложно, потому что живёт он недолго. Утечь в публичный репозиторий он практически не может. Когда сотрудник увольняется, его не нужно отзывать со всех серверов вручную, потому что отзывать нечего: его учётную запись в системе единого входа просто выключили, и новых ключей ему больше не выдадут.
Похожая история произошла и с защищёнными соединениями в вебе. Раньше получить сертификат для HTTPS было пыткой. Нужно было сгенерировать запрос на подпись, заплатить, дождаться одобрения, поставить сертификат на сервер, помнить, когда он истекает, и проходить через всё это заново через год или три. Поэтому защищённое соединение поддерживали в основном банки и крупные интернет-магазины, остальной интернет «жил по HTTP». Потом появился сервис Let’s Encrypt, который раздаёт сертификаты бесплатно через автоматический протокол (ACME). Сертификаты живут девяносто дней и обновляются сами по расписанию. За несколько лет защищённым стал почти весь интернет. Не потому что владельцы сайтов вдруг прозрели, а потому что им больше не нужно было предпринимать сверхусилий для защиты.
Что такое фоновая безопасность
Если присмотреться, во всех этих историях работает один и тот же приём. Безопасность перестаёт быть отдельной задачей пользователя и превращается в свойство среды.
Это явление называют фоновой безопасностью (по-английски ambient security). У неё есть несколько характерных свойств.
Она работает без участия пользователя. Защищённое соединение в браузере включается само. Шифрование переписки в Signal стоит по умолчанию. Данные на новом смартфоне шифруются автоматически, как только пользователь ставит код блокировки или включает разблокировку по лицу. Никто никому не предлагает сначала «настроить безопасность», прежде чем начать пользоваться устройством.
Она не требует понимания механики. Чтобы пользоваться пасскеем, не надо знать, что такое эллиптическая кривая. Чтобы шифровать переписку в Signal, не надо знать, что такое протокол двойного храпового механизма (Double Ratchet). Знание не помогает и не мешает, оно просто не нужно.
У неё практически нет интерфейса. Иногда выскакивает предупреждение «этот сайт небезопасен» или «ваш отпечаток не распознан», но это исключение, а не норма. В обычном режиме фоновая безопасность вообще ничем себя не проявляет.
И главное, её сложно сломать неосторожным действием. Пользователь не может случайно выключить шифрование в Signal, потому что для этого нет кнопки. Не может отправить открытое сообщение в iMessage между двумя iPhone, потому что переписка шифруется автоматически. Не может зайти на банковский сайт по незащищённому соединению, потому что современный браузер сам подменяет HTTP на HTTPS.
Противоположность фоновой безопасности — активная безопасность. Та самая, к которой привыкли мы, старые айтишники. Пароли, антивирусы с регулярными сканированиями, межсетевые экраны с ручными правилами, клиенты VPN со списком серверов, аппаратные ключи в карманах. Всё то, что требует помнить, настраивать, проверять. Всё то, что на масс-маркете всегда проигрывает, потому что обычные люди с этим работать не особо хотят.
Почему фоновая безопасность всегда побеждает активную
Причин тут несколько, и они работают одновременно.
Первая, уже упомянутая, состоит в том, что человеческое внимание не резиновое. У любого пользователя есть ограниченный запас внимания, и он тратит его на то, ради чего пришёл. Любая задача из категории «сначала разберись с безопасностью» конкурирует с реальной задачей пользователя и проигрывает. Не потому, что безопасность не важна, а потому что она важна абстрактно, а оплатить счёт важно прямо сейчас.
Вторая причина в том, что безопасность работает только на масштабе. Решение, которое использует один процент параноиков, не защищает экосистему. Если из ста собеседников в мессенджере девяносто девять переписываются в открытом виде, то быть сотым, кто пытается шифровать, бессмысленно. А когда шифрование включено у всех по умолчанию, защита возникает автоматически даже у тех, кто никогда о ней не задумывался.
Третья причина связана с экономикой крупных платформ. Apple, Google и Microsoft не хотят, чтобы массовые взломы их пользователей попадали на первые полосы. Им проще встроить хорошую безопасность по умолчанию, чем учить миллиард людей хорошим привычкам. Поэтому и появляется шифрование диска из коробки, биометрия из коробки, защищённое хранилище ключей из коробки. Не потому, что Apple добрая, а потому что Apple невыгодно, чтобы её устройства появлялись в новостях о краже данных.
И четвёртая причина, может быть, самая интересная. Технологии в принципе зреют долго. То, что сегодня в Signal работает само, в PGP в 1995 году работать само не могло. Не было ни смартфонов с защищёнными чипами, ни постоянного интернета (вы помните, что такое dialup-интернет? модемы, телефонные линии и вот это всё?), ни облачной синхронизации, ни массовой биометрии. Чтобы безопасность стала невидимой, нужна была инфраструктура, и она появилась не сразу.
Чем мы за это платим
Было бы нечестно остановиться на победном «всё стало хорошо». У фоновой безопасности есть и обратная сторона, о которой редко говорят.
Во-первых, мы теряем прозрачность. Когда безопасность невидима, ты не знаешь, как именно ты защищён, и не можешь это проверить. Старый PGP можно было взять, изучить, повозиться, понять, что внутри. Современный пасскей в iCloud — это чёрный ящик. Ты доверяешь Apple, что там действительно хорошая криптография. Ты вынужден доверять, потому что инструментов, чтобы это проверить, у тебя нет.
Во-вторых, мы теряем переносимость. Пасскеи привязаны к экосистеме. Если завтра вы решите уйти с iPhone на Android, у вас возникнут вопросы. Технически стандарт описан и совместим, но в реальности перенос требует усилий, а часть аккаунтов проще завести заново. Это плата за удобство: вы не управляете ключами, а значит, ваши ключи живут там, где удобно платформе, а не вам.
В-третьих, появляется монокультура доверия. Когда девяносто пять процентов мира аутентифицируется через iCloud Keychain или аккаунт Google, эти два сервиса становятся самой ценной мишенью в истории человечества. Раньше каждый разработчик хранил свой SSH-ключ у себя, и взлом одного человека был неприятностью этого человека. Сейчас компрометация одного провайдера идентичности теоретически затрагивает миллиард людей. Технически риск каждого по отдельности не вырос, но он стал концентрированным, а не размазанным.
И, в-четвёртых, есть простой человеческий момент. Если безопасность работает сама, человек перестаёт о ней думать вообще. Это хорошо, пока работает, и очень плохо, когда вдруг ломается. Пользователь, у которого никогда не было проблем с пасскеем, потеряв доступ к телефону, нередко обнаруживает, что ничего не знает о процедурах восстановления, не записал резервных кодов и в принципе не понимает, что произошло. Удобство порождает беспечность, и это естественный побочный эффект.
Что с этим делать
Сопротивляться пасскеям, биометрии и автоматическим обновлениям бессмысленно. Это не утрата контроля, это переход к безопасности, которая работает на практике, а не только в теории. Если сервис предлагает войти по отпечатку вместо пароля, это почти всегда выигрыш. Пароль можно украсть с помощью фишинга, отпечаток нельзя.
Параллельно полезно понимать, где именно вы теперь зависите от платформы, и иметь страховку. Распечатанные резервные коды от важных аккаунтов в физическом сейфе. Понимание процедур восстановления доступа. Хотя бы один почтовый ящик, не привязанный к основной экосистеме. Та самая параноидальная гигиена старой школы в фоновом мире становится неуместной в повседневности, но критически важной для редких аварий.
Если вы по ту сторону интерфейса, то есть делаете продукт, у вас должно быть простое правило. Безопасность, которая требует от пользователя усилий, не работает. Если вы проектируете систему, в которой человек должен «запомнить парольную фразу из двадцати четырёх слов и хранить её в надёжном месте», вы уже проиграли. Не потому что пользователь плохой, а потому что вы предлагаете ему задачу, которую он не может выполнить надёжно. Хорошее техническое решение прячет криптографию внутрь, а наружу выдаёт жест, отпечаток или взгляд в камеру.
Личный итог
Я довольно долго был уверен, что безопасность — это дисциплина. Длинные пароли, связка аппаратных ключей, чтение исходников открытых криптографических библиотек, знание отпечатка своего PGP-ключа наизусть. Всё это и сейчас имеет смысл, если вам важно понимать, что происходит, или если ваша работа связана с серьёзными угрозами.
Но в главном я ошибался. Я думал, что это решение для всех, просто пока не все понимают, но когда-нибудь они всё-таки поймут. На самом деле это решение для долей процента людей, а для всех остальных оно не масштабируется в принципе. То есть по большому счёт это никакое не решение. Хорошая безопасность сегодня — это та, которой пользуются миллиарды людей, не зная об этом. И это, кажется, главное достижение индустрии за последние двадцать лет.
Криптография стала водопроводом. Никто не восхищается, что у него вода течёт из крана. Но именно это и значит, что водопровод победил.
P.S. На днях я впервые зашёл в банковское приложение по пасскею вместо пароля и кода из СМС. Ощущение было странное, словно я ничего не сделал. А на самом деле сделал больше, чем во все предыдущие разы, когда вводил длинный пароль и копировал шестизначный код из аутентификатора.