Эволюция хранителей закрытых ключей
Данный пост перенесён автоматически с предыдущего варианта сайта. Возможны артефакты. Если информация этого поста важна для вас, свяжитесь со мной для получения полного содержимого.
Чтобы два субъекта могли безопасно общаться друг с другом, им нужен общий разделяемый секрет - что-то, что известно только им двоим и никому больше. В современном мире в качестве субъектов выступают пользователи компьютеров и/или сервисы, а в качестве общих секретов - пароли и ключи шифрования. О последних, а точнее о способах их хранения, и поговорим.
Пока криптография была только симметричной (оба абонента использовали один и тот же общий ключ и для шифрования и для расшифрования), главной проблемой была безопасная доставка ключа шифрования от одного абонента другому. Требовался очень надёжный доверенный канал передачи (личная встреча, спецпочта и т.п.)
Трудно представить, как бы вообще выглядел современный Интернет, если бы не была изобретена криптография с открытым ключом, а Диффи и Хеллман (и Меркл) не предложили алгоритм, позволяющий создавать тот самый общий секрет двум абонентам прямо у всех на виду. Процесс создания общего секрета напоминает трюк фокусника и очень хорошо проиллюстрирован вот в этом небольшом ролике:
Криптография с открытым ключом активно используется в том числе и для электронной цифровой подписи (ЭЦП). Собственно, сама идеология ЭЦП построена на существовании пары открытый-закрытый ключ и предположении, что закрытый ключ есть только у одного единственного человека (сервиса/сервера и т.п.) В зависимости от используемого алгоритма типичная длина закрытого ключа составляет 1024 или 2048 бит (для алгоритмов, построенных на дискретных логарифмах). Если записать этот ключ 26 строчными и 26 прописными буквами латинского алфавита (aAbBcC…zZ), 10 цифрами (123…90) и, например, парой спецсимволов (.,), то потребуется 1024/log264 = 171 или 2048/log264 = 342 символа соответственно. Запомнить нечто такое обычный пользователь без спецтренировки, очевидно, не в состоянии. Закрытый ключ приходится где-то сохранять. Далее такие устройства при всём их многообразии буду для определённости называть хранителями закрытых ключей.
Первоначально закрытые ключи хранили просто на жёстком диске (например, в ветке реестра ОС или в специальном файле-контейнере). Способ применяли ещё в те времена, когда по мобильному телефону только звонили, а компьютер мог быть один на отдел, так что с точки зрения удобства использования особых проблем не возникало. Проблемы были с безопасностью: понятно, что такой способ хранения закрытого ключа крайне ненадёжен. Злоумышленник, получив доступ к компьютеру, автоматически получал в своё распоряжение и закрытый ключ, пусть даже и защищённый паролем. Скопировав контейнер, злоумышленник мог уже в спокойной обстановке подобрать пароль от него и получить требуемый доступ. Позже к офлайн злоумышленникам добавилась новая угроза - трояны, похищающие информацию удалённо. Данный вид атаки вкупе с другими факторами привёл к началу использования внешних носителей для хранения закрытых ключей. В качестве ключевых носителей первоначально выступали обычные дискеты. Пользователи теперь могли работать на нескольких компьютерах, а по окончании рабочего дня запирать дискеты в сейф. От неблагонадёжных коллег и нарушителей, проникающих в помещение, такой вариант был эффективен, но троян всё так же мог похитить контейнер, правда, теперь уже только в момент использования самого носителя. Нужен был принципиально новый хранитель закрытых ключей и в качестве такового выступила смарт-карта. Упрощённо говоря, смарт-карта - это фактически компьютер с собственной операционной системой, оперативной памятью и внутренним хранилищем («жёстким диском»). Сама архитектура смарт-карт предполагает их защищённость от внешнего несанционированного доступа, так как все обращения к внутреннему содержимому возможны только через интерфейс операционной системы после ввода верного PIN-кода. Технологически смарт-карты выполняются на одном чипе и имеют защиту от прямого считывания данных с него. В Википедии приведены иные разновидности смарт-карт, в частности те, что оснащены RFID-меткой и предназначены для бесконтактной работы (считыватели на дверях, турникетах и т.д.), но нас они сегодня не интересуют. Мы говорим о контактных смарт-картах, для работы с которыми требуется отдельное устройство (встроенные встречаются крайне редко) - считыватель смарт-карт (или карт-ридер). Что действительно важно в смарт-картах с точки зрения хранения закрытых ключей, так это их встроенные возможности по выполнению математических (криптографических) операций с закрытыми ключами и даже генерации этих ключей внутри самой смарт-карты. В последнем случае закрытые ключи в принципе никогда не покидают внутренней памяти чипа смарт-карты и все действия с ними производятся операционной системой смарт-карты также внутри. Наружу выдаётся только итоговый результат, например, ЭЦП. Следующей важной вехой в эволюции хранителей закрытых ключей стало изобретение группой сотрудников израильской компании Aladdin Knowledge System (патент US 6763399 B2) смарт-карты в исполнении в виде USB-ключа. Их также называют USB-токенами. Токеном в самом широком смысле принято называть обобщённо весь класс таких устройств (есть, как вы, вероятнее всего, знаете, даже разновидности с экранами и кнопками). USB-токен хоть внешне похож на обычную флешку, представляет собой чип смарт-карты, совмещённый со считывателем (карт-ридером) и размещённый в компактном корпусе. USB-токены быстро стали популярны за счёт простоты использования, ведь для них не требовалось никакого дополнительного оборудования, а достаточно было USB-порта, имеющегося практически на любом компьютере и ноутбуке. Несмотря на всё удобство USB-токенов, смарт-карты в классическом их исполнении в виде кусочка пластика долго время занимали на мировом рынке большую долю, чем USB-токены, в силу инертности корпоративных клиентов (а ведь именно они являются важнейшими потребителями таких средств), а также ряда дополнительных возможностей, таких как уже упоминавшаяся выше возможность встраивания RFID-меток и нанесения дополнительной информации на пластик - например, фото и должности сотрудника. Единый бейдж действительно в ряде случаев удобен. В России же, пропустившей этап зарождения рынка аппаратных средств аутентификации, токены в USB-исполнении стали гораздо более массовым продуктом и безраздельно царствовали на рынке несколько лет. Говоря про Российские особенности, нельзя не упомянуть, что для токенов важна поддержка отечественных криптографических алгоритмов ГОСТ. Без этого токены фактически являются эдакой защищённой флешкой - контейнер с закрытым ключом хранится во внутренней памяти, но для любых операций копируется в память компьютера со всеми вытекающими негативными последствиями. Сейчас на рынке устройств с аппаратной поддержкой ГОСТ хватает. Возвращаясь к троянам и токенам, нужно описать ещё один вид атаки, заключающийся в подменен информации, отправляемой в чип смарт-карты на подпись. Скажем, платёжное поручение, составленное пользователем системы интернет-банк, на экране отображается корректно, но на подпись в подключенный токен отправляется в искажённом трояном виде. Пользователь вводит свой PIN-код и деньги уходят не туда. Собственно говоря, продвинутому трояну пользователь нужен ровно один раз для ввода пароля от личного кабинета на сайте банка и ввода PIN-кода. Далее, всё время, пока токен подключен, уже без ведома пользователя можно подписывать и отправлять любые платёжные поручения. Ответом на такую угрозу стал новый класс устройств - «экраны доверия» или трастскрины, выводящие на свой собственный, недоступный трояну, экран основные платёжные реквизиты. Впрочем, данные устройства не являются непосредственно хранителями закрытых ключей, а служат лишь вспомогательным целям. Долгие годы всё было у токенов хорошо, они были удобны, универсальны и даже уже дёшевы, но повсеместное распространение смартфонов и планшетов вынудило продавцов средств аутентификации искать новые пути. Не берусь судить о мировых тенденциях, но на примере России было достаточно интересно наблюдать развитие ситуации. Радужную картину господства USB-токенов сильно начали портить два факта: корпоративные пользователи повадились активно использовать мобильные устройства для своей работы, а USB-портов у этих устройств не было. Да, какие-то модели планшетов их имеют, но производители самых распространённых моделей (в России особенно актуальны продукты компании Apple) этот ноутбучно-компьютерный атавизм поддерживать принципиально не хотят. Нет в большинстве, включая iOS, устройств и поддержки microSD-карт, что не позволяет использовать на них смарт-карты в таком форм-факторе, хотя они на рынке есть уже несколько лет (не знаю только - покупает ли их хоть кто-то?). С ситуацией, а в особенности с продуктами Apple, надо было что-то делать, особенно с учётом необходимости в (существенной) части проектов поддерживать ГОСТ. Первое, что пришло в голову - это, очевидно, желание как-то прикрутить уже имеющиеся токены к новым устройствам. На рынок хлынул щедрый ассортимент продуктов (часто китайских) производителей. Думаю, интересующиеся темой видели эти попытки предложить рынку считыватели для смарт-карт в виде внешнего устройства для iPhone или, например, чехла для iPad. Судя по всему, упоминавшееся мной выше мировое превосходство рынка смарт-карт над рынком USB-токенов до конца не утрачено, раз от китайских друзей так и не появилось ни одного варианта для USB-токенов. Хотя, быть может, тут дело в принципиальной технической невозможности из-за недостаточности того же питания, например, - в технические нюансы так глубоко не вникал. В любом случае в России смарт-карт на порядки меньше, так что корпоративным клиентам пришлось бы либо раскошеливаться сразу на смарт-карту и два карт-ридера (один для iPad, а второй для ноутбука), либо носить смарт-карту и USB-токен одновременно. Понятно, что это очень неудобно. Собственно, даже комбинация телефон + карт-ридер + смарт-карта уже далека от эргономичной. Кстати, когда Apple поменяла в своих телефонах контактный разъём с 30-pin на 9-pin к этой троице ещё добавлялся соответствующий переходник, что выглядело уже совсем как какой-то монстрообразный конструктор «собери себе ЭЦП». Всё же мобильное устройство на то и мобильное, что подключать к нему что-то кроме наушников, кабеля питания (ну, и док-станции, если это можно назвать «подключать») никому и никогда не будет удобно. Нужно было другое решение. К слову, как и в случае с компьютерами эпохи становления хранителей закрытых ключей контейнер с закрытым ключом можно хранить непосредственно на самом мобильном устройстве, имея, впрочем, схожие проблемы с безопасностью с поправкой на тот факт, что украсть/потерять мобильное устройств не в пример легче, чем ноутбук. Безопасность такого решения очевидно слаба: пользователю каждый раз вводить сложный пароль от контейнера неудобно, а простой быстро подберёт злоумышленник. Чуть отвлекаясь, замечу, что несмотря на всё удобство использования самого телефона в качестве токена (многие системы многофакторной бестокенной аутентификации предлагают именно такой подход) - это не самая лучшая идея с точки зрения безопасности. Телефон никак нельзя считать доверенной средой и по причине роста числа мобильных вирусов и в силу простоты утраты контроля пользователя над ним.
Итак, мы остановились на поиске нового решения. По сути, что такое мобильность? А это не в последнюю очередь - отсутствие проводов и контактных подключений. Популярные в последнее время смарт-часы, смарт-браслеты и прочие смарт-штуки общаются с мобильными устройствами исключительно по Bluetooth-протоколу, версия 4.0 которого так удачно обзавелась энергосберегающим режимом работы, позволяющим таким устройствам при всей их компактности работать дни и недели. Так что путь дальнейшей эволюции вполне понятен - Bluetooth-решения. Мне на сегодняшний день известны два варианта беспроводного подключения хранителей закрытых ключей к мобильным устройствам. Первое - от создателей «собери-себе-ЭЦП» конструктора, а второе - удобное. Китайская компания Feitian (наверняка есть и другие - эти под руку попались) предлагает Bluetooth-считыватель для смарт-карт, которым, пожалуй, удобнее пользоваться, чем подключаемым к разъёму, но который не лишён всех остальных недостатков в виде вытекающей из малой распространённости в России смарт-карт задачи по модификации парка аппаратных устройств аутентификации и необходимости носить (и не терять) несколько предметов сразу. Поступающие от некоторых энтузиастов предложения не вытаскивать смарт-карту из считывателя, а сам считыватель - из кармана брюк, извините, серьёзно воспринимать не могу. Устройство же, которым я завершу сегодняшнюю хронологию хранителей, было представлено компанией Актив совсем недавно. Речь про их Рутокен ЭЦП Bluetooth. Чип смарт-карты встроен в небольшого размера коробочку, в которой также находится (как я понимаю) аккумулятор, Bluetooth-передатчик и необходимые элементы для осуществления работы проводного подключения. При подключении кабелем к USB-порту ноутбука/компьютера устройство распознаётся как обычный Рутокен и может использоваться для всех типичных задач - аутентификация, ЭЦП и т.д. В беспроводном же варианте устройство… тоже остаётся Рутокеном. Полноценную поддержку беспроводной работы (включая аутентификацию при входе в операционную систему) для настольных систем в компании Актив обещают реализовать в ближайшее время, а поддержка в качестве внешней смарт-карты для мобильного устройства должна быть добавлена в соответствующее мобильное приложение непосредственно его (приложения) разработчиком. Например, разработчиком банковского мобильного приложения. Для этого, конечно, требуется какое-то время, но зато когда всё сделано, удобство использования потрясающее. Мне довелось увидеть полноценную работу Рутокен ЭЦП Bluetooth с приложениями линейки Защищённая Мобильность от Digital Design и это было впечатляюще. Рутокен ЭЦП Bluetooth просто лежит в кармане/сумке, а на планшете идёт полноценная работа с ним как с самой обычной смарт-картой. Например, можно открыть зашифрованное электронное письмо или поучаствовать в торгах на электронной площадке. При потере связи (когда устройство слишком далеко) приложение может закрываться и требовать повторного ввода PIN-кода. Носить с собой одно устройство и без проблем использовать свои закрытые ключи для операций на ноутбуке/планшете/смартфоне в течение 10-12 часов (заявленное время работы при активном использовании, при переводе устройства в спящий режим оно увеличивается до недель) - это действительно удобно. Тем же устройством можно быстро разблокировать ноутбук, введя достаточно простой PIN-код, но получив уровень безопасности, сопоставимый с длинным и сложным паролем. Не так давно я уже упоминал любопытное приложение Knock, которым продолжаю с удовольствием пользоваться, но мне в нём всё же не хватает возможности установки именного этого простого PIN-кода, хотя я и понимаю, что такое пожелание противоречит даже названию продукта. Дело в том, приложение реагирует всё же не на звук, как может показаться, а на движение телефона при постукивании по нему, и мой кот научился, гуляя по дивану, на котором лежит телефон, задействовать его акселлерометр нужным образом. Коту я, конечно, доверяю, но от других предпочёл бы иметь подстраховку в виде простенького, но бессмысленного без телефона PIN-кода из нескольких символов. Так что после реализации поддержки Рутокен ЭЦП Bluetoth для OS X с удовольствием перешёл бы на него. Да, чуть не забыл, в этом устройстве реализована полноценная поддержка алгоритма ГОСТ, ведь Актив всё же российская компания. ГОСТ используется и для защиты Bluetooth-канала между мобильным устройством и самим Рутокен, что действительно здорово - никакой китайский ридер смарт-карт таким похвастаться, естественно, не может. Полноценная поддержка ГОСТ (с использованием КриптоПро CSP) реализована и в упоминавшейся мной Защищённой Мобильности, так что союз трёх российских разработчиков (Актив, Digital Design и КриптоПро) получился крайне продуктивным. Что будет дальше происходить с хранителями закрытых ключей предсказать не берусь. Возможно, что у авторов проекта Nymi всё получится и их прототип приведёт к тому, что данный ролик станет нашей реальность:
Не представляю, правда, как в Nymi встроить российскую криптографию. Подозреваю, что без участия самих разработчиков - никак. А вот что вполне реально можно сделать, так это совместить Рутокен ЭЦП Bluetooth и трастскрин. Ведь Рутокен ЭЦП Bluetooth лишь убирает провода, но никак не защищает от описанного мной выше трояна всемогущего, установленного на компьютере и подменяющего платёжки. Кстати, даже могу представить, кто мог бы такое совмещённое устройство выпустить - компания Актив, у которой среди продуктов есть и трастскрин (пока проводной). Всё же собственное производство имеет свои преимущества над иными подходами, когда просто перепродаются чужие решения, адаптированные под российские реалии, или когда под новоявленный рынку бренд собирают солянку из продуктов разных производителей. Между прочим, если бы в YotaPhone кроме/вместо второго экрана вставили чип смарт-карты с независимой от телефона операционной системой и поддержкой ГОСТ, был бы действительно инновационный российский продукт.
Комментарии из Telegram
Комментарии ВКонтакте