Как соотносятся между собой системы опознания юзеров, спам, шпионаж, анонимность и свобода слова.
Преамбула, которую знакомые с PKI и OpenID могут смело не читать:
Сперва банальность: все блоги, большинство форумов и прочие подобные сайты применяют процедуру аутентификации - опознания юзеров. Как правило, по логину и паролю. Нужно это для ответа на простой вопрос: “как мы знаем, что под таким-то ником в разное время не пишут разные люди без согласия друг друга?” Иными словами, как мы защищаем своих юзеров от identity theft?
Со временем до сайтодержателей дошло, что совершенно необязательно проводить аутентификацию самим - вполне достаточно, если некая достаточно надёжная третья сторона (аутентификатор) подтвердит: “этого юзера я знаю”. Так на свет божий появился проект
OpenID [1], а также несколько схожих с ним.
Идея OpenID проста. Допустим, я хочу оставить коммент на lj.rossia.org. Регистрации у меня там нет. Тем не менее, мне достаточно указать мой логин на Livejournal - тогда Livejournal удостоверится, что я тот, за которого себя выдаю, и выдаст мне аналог грамоты: “сим удостоверяю, что предъявитель сего и вправду cat_mucius с livejournal.com - подпись-печать”. Эту грамоту я передам сайту lj.rossia.org, тот сконтачит с Livejournal, проверит подпись-печать и уверится, что я действительно тот, за которого себя выдаю. Вся схема стоит на предположении, что Livejournal не станет выдавать такие грамоты кому попало, а лишь настоящим своим юзерам.
Главный недостаток схемы - для того, чтобы она работала, необходимо, чтобы третья сторона была постоянно доступна в Сети для проверки и подтверждения личности своих юзеров. Иначе пользоваться OpenID невозможно. Есть и ещё недостатки - слишком много уходит времени на процедуру, слишком много информации приходится пересылать между разными сторонами.
Существует иная технология, свободная от этих недостатков - цифровые сертификаты,
PKI [2]. Изложить идею сертификатов, не зарываясь в кучу технических подробностей, можно так: это тоже грамота вида “предъявитель сего является таким-то”, подписанная какой-то инстанцией. Для того, чтобы я мог проверить, что подпись настоящая и грамота не поддельная, мне надо располагать другой грамотой, которую та инстанция выписала сама себе - при условии, что той самовыписанной грамоте я доверяю. Если же я ей не доверяю, то все грамоты, той инстанцией выписанные, идут лесом. Кроме того, каждому сертификату соответствует уникальный секретный ключ, который хранится у хозяина сертификата. С помощью ключа он может доказать, что сертификат принадлежит действительно ему. Сертификат может раздаваться свободно хоть всему миру - ключ хранится только у хозяина и не пересылается никуда, на то он и секретный.
Несмотря на очень большие потенциальные возможности, используется PKI в настоящее время очень ограниченно, как правило, в корпоративных средах - защищать рабочие станции, шифровать и подписывать электронную почту, опознавать VPN-клиенты и т.д.
Как эта красота может применяться в вышеприведённом примере вместо OpenID? Очень просто. Предположим, Livejournal раздаёт своим юзерам сертификаты со своей подписью. Тогда я, обращаясь к lj.rossia.org, предъявляю свой сертификат: “сим удостоверяю, что предъявитель сего и вправду cat_mucius с livejournal.com - подпись-печать”. Сайт берёт хранимый у него сертификат Livejournal, которому он доверяет, убеждается, что предъявленый мной сертификат не подделан, и предлагает мне подтвердить, что он и вправду мой. Я доказываю это с помощью своего секретного ключа. Для юзера вся процедура прозрачна и незаметна.
Для того, чтобы схема работала, не требуется, чтобы сайт Livejournal вообще находился в Сети и не надо обращаться ни к каким третьим и четвёртым сторонам - всё происходит между мной и сайтом lj.rossia.org.
Амбула:
Итак, с помощью одной инстанции-аутентификатора множество сайтов могут опознавать своих юзеров и быть уверенными, что за них себя не выдаёт кто-то другой. Но это не единственная проблема, интересующая сайтовладельца. Есть ещё, например, такая: как убедиться, что одному юзеру соответствует один ник, а не двести? Причина, по которой такой вопрос возникает, всем знакома: спам, троллинг, и прочие злоупотребления анонимностью.
Легко видеть, что наличие “третьей стороны”-аутентификатора само по себе тут ничем не помогает. Положим, lj.rossia.org полагается на Livejournal - что мешает спамеру или троллю открыть на Livejournal столько аккаунтов, сколько ему нужно для его неприглядных целей? Положим, Livejournal в свою очередь полагается на Gmail - та же проблема. И так далее.
Поэтому к “третьей стороне” появляется дополнительное требование: гарантировать условие “один человек - один голос”. Если кому-то “третья сторона” выдаёт сертификат - не только тот же сертификат никто не получит, но и у того же кого-то не выгорит получить ещё один.
В Сети таких кандидатов на роль “третьей стороны” немного. Зато в оффлайне - дофига. Государства. Армии. Банки. Больничные кассы. Корпорации. В общем, любые хорошо известные организации со строго контролируемым членством.
И тут технология сертификатов становится просто идеальным средством. Предположим, государство выдаёт своему гражданину Васе сертификат, удостоверяющий, что это действительно его гражданин Вася Пупкин. Тогда использовать такой, фактически, электронный паспорт Вася может очень широко - в банке, при встрече с полицейским патрулём, при расплате в магазине, при подписи договоров, при посылке электронной почты. А также для аутентификации в Сети. Причём один сертификат может заменить всю кучу паролей, которую приходится помнить сегодняшнему интернет-юзеру.
Хорош он также тем, что подделать сертификат - очень, очень сложно, а выписать его самому себе - легко, но совершенно бесполезно.
Понятно, нужен также и носитель, который был бы достаточно лёгок в употреблении и надёжен. Такой тоже есть:
smart cards. Достаточно записать сертификат с секретный ключом на смарт-карту, и извлечь содержание ключа оттуда будет очень сложной задачей - не всякая спецслужба справится - хотя совершать операции с ключом вполне можно. Smart-card readers стоят сегодня тоже дёшево, и оснастить ими каждый PC не представляет из себя проблемы. А уж если такие “паспорта” станут стандартом - тем более. Будет такое же привычное устройство, что и мышь.
Станут стандартом они, кстати, довольно скоро. В Израиле проект поменять удостоверения личности на смарт-карты существует уже давно и похоже, будет осуществлён в течении пары лет. Всевозможными корпорациями для проверки личности сотрудников они используются уже давно.
Что в таком случае понадобится сайту для опознания юзеров по сертификатам и для борьбы со злоупотребителями? Всего ничего - набор из сотни-другой сертификатов государств и других крупных организаций для проверки подписей на юзерских сертификатах; таблица в базе данных, куда будет записываться серийник сертификата и юзерский ник; скрипт для проверки, что одному сертификату соответствует один ник или чёрный список для “забаненных” сертификатов; поддержка SSL. Сами юзерские сертификаты хранить совершенно незачем.
Что понадобится юзеру? Смарт-карта с сертификатом; ридер для чтения смарт-карты; возможно, пароль к смарт-карте (чтобы её не мог украсть и использовать кто угодно). Всё.
Таким образом, PKI с использованием оффлайновых инстанций-аутентификаторов становится для сайтодержателей очень соблазнительным путём проверки личности юзеров.
Перспективы:
Первыми новую технологию оценят, без сомнения, коммерческие сайты. Просто потому, что использовать при оплате сертификаты - куда надёжнее, чем номера кредиток, которые может достать и вбить кто угодно. Торговцу спокойнее: не надо рисковать, что ему подсунут чужую кредитку. Юзеру спокойнее: не надо рисковать, что вместо 50-ти долларов у него со счёта снимут 500. Вопросы анонимности в e-commerce особо никому не важны - куда важнее security.
С сайтами некоммерческими, блогами, форумами и т.д. сложнее. Держатели форумов, в принципе, заинтересованы в системе “один человек - один голос”, для борьбы с спамерами, троллями и прочей публикой, ведущей себя по принципу “меня в дверь, а я в окно”. Сертификаты позволят их отсечь независимо от того, как часто те меняют IP, какие прокси и прочие анонимайзеры используют. А вот согласятся ли с такой системой посетители - большой вопрос. С одной стороны: система несомненно удобнее - не нужно вводить пароль к каждому сайту, безопаснее - пароль никто не перехватит, чужую личность не подделает, и отсутствие сетевого мусора им на руку. С другой, анонимность ценят также очень многие.
Использование PKI также способно свести на нет такое всем осточертевшее явление, как почтовый спам. Если сертификаты будут у всех и каждого, почтовые сервера будут просто отсекать или помечать как подозрительные все письма, не подписанные сертификатами. А спамеру прилагать к каждой рекламке свой личный паспорт нимало не улыбается. Точно также можно будет отсечь спам и в сетях voice over IP - запросы на звонок, не содержащие сертификат звонящего, просто не будут приниматься.
В целом, по моим прикидкам, свободный и анархичный Интернет, какой мы знаем сегодня, необратимо изменится в течении пары-тройки лет. В большей его части применение сертификатов станет обычным делом. Меньшая будет поддерживаться людьми, принципиально дорожащими анонимностью и готовыми ради этого мириться с наличием спамеров и прочей подобной публики, которой придётся сосредоточить усилия на этом, меньшем сегменте.
Тёмная сторона:
Ежу понятно, что предъявление на сайте, форуме и так далее “пожизненного” сертификата - фактически, паспорта, - наносит удар по анонимности, даже если реальное имя в сертификате не проставлено. Без анонимности же свободу слова давить намного проще. Наиболее значимой угрозой при таком раскладе становится государство и его чиновники - дело о судебном преследовании журналиста, ругавшего на форуме губернатора, прекрасно это иллюстрирует.
Если в настоящее время доказать в суде, что нечто в Сети, подписанное именем “Вася Пупкин”, и впрям написано Васей Пупкиным, довольно проблемно, то с использованием сертификатов картина меняется. Одно из их свойств - non-repudiation, невозможность отрицания. Если, скажем, контракт был подписан с использованием секретного ключа сертификата, то обладателю сертификата потом очень сложно доказать, что он его не подписывал. То же касается аутентификации на сайте.
И это не говоря уже о внесудебном преследовании, о возможностях шпионажа и прочей радости
[3]. Если государство сможет нажать на сайтовладельцев, и так или иначе получить доступ к списку использованных юзерами сертификатов - найти юзеров в реале не составляет ни малейшего труда.
Словом, когда на одном полюсе лежит анархия, на другом, вестимо, диктатура. Нахождение и поддержка баланса, не позволяющего скатываться ни в одно, ни в другое, очень важна и зависит от всех юзеров Сети.
Возможные пути обхода:
Какие возможности есть у желающего использовать или подделать чужой сертификат для использования в Сети? Их можно разделить на “социальные” и технические. Начнём с “социальных”.
Наиболее очевидная - просто попросить попользоваться. Что будет довольно непроблемно на первых этапах, пока никто не будет принимать новую игрушку всерьёз, но сложно впоследствии. На сертификат завязано будет, помимо Сети, очень много всего - доступ к банковским счетам, юридические документы и т.п. Предоставлять ключ ко всему этому даже лучшему другу-приятелю граждане особо спешить не будут.
Далее - phishing, то есть выманивание под тем или иным предлогом. Опять же проблематично - даже если удастся раскрутить лоха, чтобы тот сообщил код к смарт-карте, извлечь оттуда содержимое секретного ключа не сможет даже её владелец. К тому же, существуют “чёрные списки” засвеченных сертификатов (известные под названием
CRLs), регулярно обновляемые на сайтах аутентификаторов - так что даже удачно покранный сертификат долгое время использовать вряд ли получится.
Кража. Банально увести смарт-карточку и подобрать код к ней. Во-первых, подбор может быть очень долог. Во-вторых, ничто не мешает разработчикам карты предусмотреть эту возможность и банально “запереть” карточку после десятой неудачной попытки, лишив дальнейший подбор смысла. Далее, код можно подсмотреть или выманить. Тогда использовать покраденную карту, конечно, можно - пока сайты не снимут новый CRL и не обнаружат в нём серийник сертификата.
Наконец, банальное насилие. Поймать картообладателя и силой вынудить его отдать карту и код к ней. Сработать, вестимо, может - пока не обнаружат похищение, пока труп не найдут или сама жертва не просигнализирует. Тогда - CRL и привет.
Теперь способы технические - для знакомых с подробностями PKI:
Подделать существующий сертификат, изменив серийный номер, имя владельца и так далее. Требует умения подобрать collision к hash-функции (MD-5, SHA-1, SHA-256 и т.п.), чтобы проверка подписи не выдала подделку. Крайне непростая матзадача, которую в настоящее время не могут решить даже государства.
Подделать подпись на сертификате или обойти процедуру аутентификации, не зная секретного ключа. Требует взлома алгоритма RSA, то есть решения задачи быстрого разложения чисел на множители. В настоящее время эту задачу также не способны решить даже государства.
Вскрыть покраденную смарт-карту, чтобы достать секретный ключ. Поскольку смарт-карта представляет собой микрокомпьютер, не позволяющий прямой доступ к своей памяти, решение задачи требует такого уровня владения микроэлектроникой... Уж не знаю, способны ли на такое ребята из NSA, но частникам и компаниям такое точно не по зубам. Далее, сам секретный ключ наверняка будет шифроваться юзерским кодом, с помощью симметричного алгоритма вроде AES. Если код известен - ок, если нет - придётся взламывать.
Наконец, взломать сайт, против которого проводится аутентификация и там уж либо со базой данных нахимичить, либо скрипты подменить, либо левый сертификат подложить как доверенный, либо ещё чего. Тут уж как выйдет - как известно, every chain as strong as its weakest link. Если уровень безопасности сайта позволяет такое - ничего не попишешь. Одно но: сертификаты оно не скомпроментирует и с любым иным сайтом ничем не поможет (в отличие от нынешней ситуации, когда одни и те же пароли нередко используются на разных сайтах).
Таким образом, можно подытожить: при использовании PKI, чтобы выдать себя за кого-то другого (identity theft) требуется либо решить крайне сложную математическую задачу, либо совершить серьёзное преступление, либо и то, и другое.
Примечания:
[1] Для интересующихся тонкостями работы OpenID - общий
protocol flow и
криптографические подробности.
[2] Конкурирующая технология PGP на эту роль подходить хуже в силу своей неиерархичности - хотя приспособить, конечно, можно и её.
[3] Ещё одна опасность, грозящая со стороны государства или других инстанций-аутентификаторов: если смарт-карты или любые другие носители будут выдаваться клиентам с уже готовым сертификатом и ключом к нему, это будет означать, что у государства была прекрасная возможность оставить себе копию секретного ключа. А это в свою очередь означает, что оно может использовать сертификат ничуть не хуже его владельца, и совать нос туда же, куда и он - будь то счёт в банке или закрытая запись в блоге. И это ещё в лучшем случае. Правильная процедура должна быть такова: клиент сам создаёт себе пару сертификат-ключ, предоставляет сертификат государству на подпись, получает подписанный и вместе с ключом прошивает его в смарт-карту. Я практически уверен, что при раздаче электронных паспортов ни одно государство не потрудится само обратить внимание граждан на эти “мелкие подробности”.