В данной заметке мы рассмотрим некоторые аспекты безопасного хранения ключей – вопроса, который, безусловно, является краеугольным камнем криптографии.
Основное внимание уделим съемным ключевым носителям (токенам и смарт-картам) – безопасному и широко распространенному решению для хранения ключевой информации.
Рассмотрим вначале основные принципы работы ключевых носителей.
Содержание
Что такое ключевой носитель?
Ключ – то, на чем держится вся криптографическая защита. С точки зрения криптографических алгоритмов (шифрования, аутентификации и т.п.), тот, кто знает ключ – тот и является легитимным пользователем. Так, например, если злоумышленник будет знать все ключи, которые используются легитимным пользователем при общении с банком, то банк не сможет понять, кто есть кто. Столь высокая важность ключа для всей системы вполне естественно приводит к задаче безопасного хранения пользовательских ключей.
Рассмотрим некоторые способы хранения ключей, которые потенциально могут применяться в информационных системах.
-
Генерация ключа из некоторого запоминаемого секрета. Поскольку длины ключей современных криптографических систем, как правило, составляют не менее 256 бит (64 произвольных шестнадцатиразрядных символа (0-9, A-F)), то запомнить их практически не представляется возможным. Иногда можно использовать более простую для запоминания человеком форму (пароль), из которой определенным образом выводится требуемый криптографический ключ. Однако, к сожалению, число паролей, которые человек в состоянии запомнить, настолько мало, что множество потенциально используемых в таком случае ключей серьезно сокращается. Так, например, существует всего около 218 триллионов паролей длины 8, состоящих из больших и малых латинских букв и 10 цифр. Битовая длина секрета, определяющего построенный из такого пароля ключ, не превосходит 48 бит – это вполне доступно для перебора на современных вычислительных машинах. -
Хранение ключа на флэшке в файле, который защищен паролем. Этот вариант плох тем, что злоумышленник, укравший у пользователя эту флэшку или скопировавший файл с ключом, сможет подобрать пароль, что называется, неинтерактивно – то есть, без взаимодействия с носителем. В этом случае злоумышленника ничто не ограничивает ни во времени, ни в тех средствах, которые он может использовать для подбора паролей. В итоге, вскрытие ключа – лишь вопрос времени. -
Локальное хранение ключа на машине пользователя (например, в реестре). Минусом подобного подхода является невозможность постоянного контроля ключа со стороны пользователя. Поскольку пользователь несет за ключ персональную ответственность, то постоянный контроль над ключом является непременным требованием документации любого средства криптозащиты. Указанный метод лишает ключ еще одного важного свойства – мобильности. -
Хранение ключа в облаке. Эта сторона вопроса подробно обсуждалась в предыдущей заметке нашего блога. Если вкратце, это решение предполагает хранение пользовательского ключа на некотором удаленном защищенном сервисе. При этом для того, чтобы им воспользоваться пользователь должен пройти достаточно строгую (как минимум, двухфакторную) процедуру аутентификации.
Оставляя за скобками тему хранения ключа в облаке, рассмотрим способ, который будет свободен от всех указанных выше недостатков. Что если защитить паролем не файл, находящийся на некотором аппаратном модуле (флэшке), а весь модуль – то есть, предоставлять доступ к данным лишь в том случае, если введен верный пароль самого устройства, а не пароль на отдельный файл? Если же неверный пароль введен, например, более 10 раз, устройство может вообще блокироваться и требовать специальный ключ восстановления. В таком случае злоумышленник не сможет перебирать пароль бесконтрольно – единственным критерием правильности опробуемого пароля является ответ носителя на его запрос к нему, а значит, есть всего 10 попыток. В таком случае даже пароль из 6 символов выглядит для злоумышленника непреодолимым препятствием – вероятность угадать его за 10 попыток исчезающе мала (она не превышает одной миллиардной – злоумышленник быстрее добьется того, что подкинутая им 30 раз монета 30 раз упадет орлом вверх).
Устройства, в основе которых лежит описанный выше принцип, и называются съемными ключевыми носителями. Они существуют в двух наиболее расространенных форм-факторах: USB-токен, который внешне ничем не отличается от обычной флэшки, и смарт-карта, частным случаем которой являются привычные банковские карты. Они обладают всеми преимуществами флэшек (возможность контроля за ключом и повышенная мобильность) и лишены их недостатков в силу широких архитектурных возможностей систем защиты.
Стоит, конечно, отметить, что для токенов возможно проведение так называемых атак с проникновением (агрессивные атаки, invasive attack), при которых злоумышленник получает доступ к данным токена путем прямого и зачастую разрушительного воздействия. Однако для этого злоумышленнику необходимо иметь достаточно глубокие знания о технических особенностях используемого устройства, а также иметь возможность использования высокотехнологичного оборудования, такого как лазер или рентген. За эту сторону защищенности ключевых носителей отвечают исключительно производители соответствующей аппаратуры. В данной заметке мы будем исходить из предположения, что злоумышленник не располагает возможностями для проведения подобных атак. Подробное же рассмотрение этого вопроса, вообще говоря, является темой отдельного обзора.
Несмотря на то, что токены позволяют защититься от противника, который украл устройство и хочет достать оттуда ключ, нельзя забывать и о других угрозах. Именно поэтому существуют разные виды ключевых носителей – от простых хранилищ до самостоятельных модулей, умеющих выполнять целый ряд криптографических операций и взаимодействующих с пользователем по специально разработанным протоколам.
Рассмотрим основные типы ключевых носителей, их возможности, преимущества и недостатки.
Пассивное хранилище и автономный вычислитель
Для начала рассмотрим два типа ключевых носителей, принципы работы которых являются наиболее простыми для понимания. Первый тип – пассивный носитель, представляющий собой защищенное хранилище ключей; носители второго типа являются автономными вычислительными устройствами, которые предоставляют доступ лишь к результату использования хранимого ключа (например, к вычисленной электронной подписи от переданных данных). Оба устройства выполняют свою основную задачу лишь в том случае, если пользователь ввел правильный пароль.
Пассивный носитель умеет только хранить ключ и передавать его приложению, работающему в операционной системе на стороне пользователя, которое уже решает, что с ним делать. В большинстве случаев в роли этого приложения выступает криптопровайдер, который в случае успешного предъявления токену пароля загружает ключ в свою память и выполняет необходимые криптографические операции. По подобной схеме работает, например, КриптоПро CSP 3.9.
У носителей-хранилищ есть одно неотъемлемое свойство, которое многими ошибочно воспринимается как явный недостаток. Речь идет о принципиальной извлекаемости ключа. Все существенные операции, зависящие от ключа, производятся приложением, работающим на машине пользователя, поэтому ключ неизбежно присутствует в оперативной памяти – это естественное свойство такого рода носителей, которое непременно упоминается в документации на него.
Позже мы рассмотрим возможности нарушителей при проведении атак на токены, и покажем, что защищенность решений на основе пассивных носителей в подавляющем большинстве случаев ничем не уступает защищенности активных токенов.
Активные токены, как и носители-хранилища, тоже хранят внутри себя ключ пользователя, но единственное, что может получить пользователь от этого носителя – это результат выполнения криптографических операций с использованием хранимого ключа. При этом основное свойство получаемых от такого носителя данных состоит в том, что по ним нельзя (точнее, должно быть нельзя: существует ряд работ, демонстрирующих для ряда конкретных токенов обратное) восстановить ключ. Такой носитель снабжен гораздо более мощными по сравнению с носителем-хранилищем вычислительным ядром и программным обеспечением, основная цель которых – производить необходимые криптографические вычисления. В подобных устройствах ключ не выходит за пределы памяти носителя, является неизвлекаемым.
Дополнительно отметим, что некоторые активные носители имеют возможность сделать ключ извлекаемым, но эта функция по умолчанию всегда неактивна, а в документации всегда упоминается, как «нежелательная к применению».
Как, где, когда их можно использовать?
Нарушитель в системе — пиши пропало!
Свойства ключевых носителей обоих описанных выше типов не делают их безупречными – есть достаточно строгие условия применения таких устройств. Основное условие – отсутствие у противника возможности производить какие-либо действия непосредственно внутри пользовательской системы и канала связи с носителем.
Вполне естественно выделить три точки, в которых злоумышленник может перехватывать информацию, циркулирующую между токеном и пользовательской системой.
Во-первых, это сама машина пользователя. Примером такого злоумышленника может служить шпионская программа (RAT – Remote Access Tool). В этом случае он может перехватывать параметры вызовов функций, данные, которыми обмениваются приложения и т.п. В этом случае ни о какой безопасности вообще не может идти и речи – говоря о ключевых носителях, злоумышленник просто перехватит пароль, введенный пользователем, а далее может делать что угодно. Причем он может достичь своих целей для любого из рассмотренных типов носителей – он же знает пароль! В связи с этим, непременным требованием по эксплуатации всех типов ключевых носителей является отсутствие злоумышленника в системе, где работает пользовательское приложение. Выполнение этого требования может достигаться как организационными, так и иными мерами защиты информации.
Отметим, что время от времени появляются работы, связанные с исследованием защищенности токенов в модели с нарушителем в системе. Учитывая все вышеизложенное, с точки зрения защищенности ключевых носителей, такие исследования подобны исследованиям прочности китайского фарфора против железного молотка. Хотя, справедливости ради нельзя не отметить, что с точки зрения Reverse Engineering эти работы изобилуют интересными приемами и результатами.
Второй точкой перехвата может быть сам токен. Если мы предполагаем, что злоумышленник имел возможность загрузить в сам ключевой носитель какую-либо вредоносную функциональность, то доверия подобным устройствам в принципе быть не может, поэтому и защита от подобных атак лежит целиком на производителях устройств. Она может реализовываться как теми же самыми организационными мерами, так и техническим запретом на какие-либо нештатные модификации прошивок или приложений, установленных в устройствах.
Что, если нарушитель в канале?
Таким образом, единственным нарушителем, с которым можно бороться при использовании токенов, является третий: тот, кто прослушивает канал передачи данных между машиной пользователя и токеном. Далее будем считать, что проникнуть в систему пользователя и/или систему токена нарушитель не мог.
Злоумышленник, находящийся в канале связи, может нанести пользователю достаточно серьезный ущерб как в случае использования пассивных токенов, так и в случае активных. Если используется носитель-хранилище, то злоумышленник видит и пароль, и ключ, т.к. они передаются по данному каналу связи. Раскрытие ключа является, безусловно, самой серьезной угрозой из всех возможных. При использовании же активного носителя, злоумышленник не сможет получить доступ к ключу, но сможет узнать пароль, а значит, стать для носителя легитимным субъектом – кто знает пароль, тот и прав! В таком случае при краже устройства злоумышленник сможет воспользоваться токеном для совершения необходимых ему операций с ключом. В криптографии такая угроза называется селективной подделкой: злоумышленник может подписать нужные ему данные, не зная ключ.
Разница между упомянутыми выше угрозами не столь велика, как может показаться. В сущности, что будет делать злоумышленник с ключом? Конечно же, подпишет платежное поручение от имени пользователя на миллион долларов. Ровно то же самое он сделает, появись у него возможность осуществить селективную подделку. Ущерб в обоих случаях будет более чем ощутимым и в большинстве разумных ситуаций примерно одинаковым.
В связи с этим, обязательным требованием по эксплуатации как носителей-хранилищ, так и активных носителей, является их подключение непосредственно к доверенному порту машины, то есть отсутствие канала связи, в котором может существовать злоумышленник.
Может сложиться впечатление, что активный токен в смысле защищенности по всем параметрам превосходит пассивное хранилище. Однако есть некоторые методы, которые представляют гораздо большую опасность для активных носителей, чем для пассивных. Речь идет об атаках по побочным каналам. Так, например, злоумышленник может, не проводя непосредственных действий в системе или в канале, измерять время, затрачиваемое на выполнение операций, и делать по результатам измерений выводы о значении ключа, сокращая ключевое множество. Этот метод существенно более эффективен для активных токенов, поскольку они выполняют все вычисления сами, без помощи пользовательских приложений. А поскольку вычислительная мощность токена на порядок меньше мощности обычных компьютеров, то и детектировать влияние той или иной характеристики ключа (например, его веса) на время вычислений намного легче – не будет слишком большим преувеличением, если сказать, что в некоторых случаях атаку можно попытаться провести с помощью хороших наручных часов. Справедливости ради отметим, что все современные активные ключевые носители имеют ряд мер защиты от подобных атак.
Функциональный ключевой носитель – защищенность от противника в канале
Для того чтобы устранить ограничение, связанное с отсутствием злоумышленника в канале связи между машиной и носителем, существует специальный тип токенов, которые принято называть функциональными ключевыми носителями (сокращенно, ФКН). Эти носители, как и активные носители, рассмотренные выше, предоставляют пользователю возможность получить лишь результат вычислений, в которых участвует ключ. Отличие состоит в том, что эти вычисления разделены между пользовательским приложением, использующим токен, и самим токеном. Причем разделение осуществляется таким образом, что по каналу связи передаются лишь те данные, по которым на практике нельзя сделать никаких выводов ни о пароле, ни о ключе.
В настоящее время нашей компанией разрабатывается усовершенствованный протокол взаимодействия между пользовательским приложением и токеном для линейки продуктов ФКН CSP 4.0. Он основан на протоколе семейства EKE – протоколе аутентифицированной выработки общего ключа под защитой пароля. Использование этого протокола позволяет математически строго обеспечить такой же уровень защищенности от противника в канале, что и от противника, имеющего физический доступ к носителю, защита от которого, напомним, обеспечивается на аппаратном уровне. Таким образом, злоумышленник, имеющий возможность читать и подменять сообщения в канале, не сможет ни узнать пароль, ни даже получить возможность перебирать пароли неинтерактивно, то есть без контроля со стороны токена. Это свойство удается обеспечить за счет того, что пароль используется лишь для защиты передаваемых по каналу компонент вырабатываемого общего ключа – эфемерных открытых ключей протокола Диффи-Хеллмана. Таким образом, для того, чтобы получить критерий для подбора пароля без взаимодействия с токеном, нужно восстановить хотя бы одну из этих компонент, что является известной трудной задачей – вычислительной задачей Диффи-Хеллмана (CDH). После установления соединения взаимодействие с носителем производится по каналу защищенного обмена сообщениями (ЗОС или Secure Messaging), в котором весь обмен данными происходит в зашифрованном виде.
Универсальная электронная карта
Существуют также более простой подход к защите канала между пользовательской системой и картой. Он заключается в установлении ЗОС с помощью классического протокола Диффи-Хеллмана. Подобный подход применяется для работы Универсальной электронной карты (УЭК).
К сожалению, несмотря на кажущуюся простоту и эффективность, существует один ключевой недостаток. Протокол Диффи-Хеллмана сам по себе не защищен от атаки человека посередине (man-in-the-middle, MITM). То есть, злоумышленник, контролирующий канал связи между пользовательской системой и картой, может имитировать их работу друг для друга. Так система будет думать, что установила защищенный канал с картой, а карта решит, что работает с пользователем, однако они будут взаимодействовать с нарушителем, который будет получать данные и пароли в расшифрованном виде.
Для решения подобной проблемы в УЭК используется аналог PKI-инфраструктуры. Существует корневой удостоверяющий центр, который выпускает сертификаты (подписанные открытые ключи с некоторой идентифицирующей информацией) определенного формата. На этапе выпуска карты в нее зашивается корневой сертификат центра и сертификаты собственных ключей аутентификации (ключей Диффи-Хеллмана). Перед обращением к карте пользователь генерирует собственный ключ аутентификации и через онлайн-сервис получает на него сертификат от обслуживающего центра УЭК. Тем самым для карты и для пользователя обеспечивается возможность подтверждения подлинности друг друга.
К сожалению, данное решение обладает значительной вычислительной сложностью и рядом существенных ограничений на использование (например, требование подключения к Интернет для доступа к службе выпуска пользовательских сертификатов). Это не позволяет его использовать повсеместно.
Пароль украден. Это конец?
Конечно, какие бы меры противодействия нарушителям ни применяли разработчики криптосредств, всегда существует опасность кражи пароля ключевого носителя. Это может произойти по различным причинам: слежка за пользователем, невыполнение элементарных правил безопасности или, что самое распространенное, использование в качестве пароля значения по умолчанию. В этом случае злоумышленник, как уже было упомянуто выше, может направлять на подпись от лица пользователя любые данные (производить селективную подделку). Можно ли каким-либо образом хоть немного защититься от подобного сценария? К радости пользователей, подобное решение существует.
Вполне очевидно, что штатными средствами токена или программного обеспечения реализовать защиту от селективной подделки невозможно в силу самой природы атаки. Таким образом, нам требуется некоторое устройство, которое бы ставило дополнительный барьер между ключом и злоумышленником, который хочет подписать от нашего имени чек на миллион долларов. Этим устройством является средство визуального контроля подписи. Оно перехватывает запросы на подпись и показывает на своем дисплее, что именно подписывает пользователь. В случае, если реквизиты документа не совпадают с реальными или запрос на подпись не создавался в принципе, пользователь может нажать аппаратную кнопку «Отмена» и заблокировать операцию. На рынке представлен ряд таких устройств, и с некоторыми из них (например, SafeTouch) имеют совместимость и наши продукты.
Итого
Итак, подведем итоги.
Получить доступ к ключу на носителе можно только в том случае, если пользователь ввел правильный пароль. Использование токенами счетчиков количества вводов неправильных паролей не позволяет злоумышленнику бесконтрольно перебирать ключ, если он получил физический доступ к носителю. В этом основное отличие токенов от простых флэшек с записанными на них ключевыми файлами, защищенными паролем.
Существуют три основных вида токенов, обладающих разными свойствами по отношению к противнику, контролирующему канал связи токен-машина:
- Пассивное хранилище: противник может получить ключ пользователя.
- Активный токен: противник не получает ключ, но получает возможность использовать его для своих целей (например, для подписи произвольных данных).
- ФКН: противник не может реализовать какую-либо существенную угрозу.
Все виды токенов уязвимы по отношению к противнику, работающему внутри пользовательской системы – эта уязвимость принципиально неустранима при использовании ключевых носителей. В этом случае у токена нет даже теоретической возможности отличить легального пользователя от злоумышленника.
На данный момент компанией «КРИПТО-ПРО» совместно с ведущими производителями ключевых носителей разработаны следующие продукты:
- Магистра CSP;
- eToken CSP;
- Рутокен CSP;
- УЭК CSP.
Первые три продукта работают с носителями по защищенной технологии ФКН, последний разработан для взаимодействия с картами УЭК.
Использование же пассивных устройств является классической схемой для криптопровайдера КриптоПро CSP (3.6, 3.6.1, 3.9, 4.0). Он работает c широким спектром производителей токенов и смарт-карт, в частности:
- Актив (серия Rutoken ЭЦП, Rutoken Lite, Rutoken Lite SC, Rutoken S);
- Аладдин Р.Д. (серия eToken, eToken PRO, JaCarta);
- Gemalto (IDClassic MPCOS);
- СмартПарк (Магистра, MS-Key);
- ISBC;
- INPAS;
- MorphoKST.
Смышляев С.В., к.ф.-м.н.,
начальник отдела защиты информации
ООО «КРИПТО-ПРО»
Алексеев Е.К., к.ф.-м.н.,
инженер-аналитик 1 категории
ООО «КРИПТО-ПРО»
Агафьин С.С.,
инженер-программист 1 категории
ООО «КРИПТО-ПРО»
Прохоров А.С.,
инженер-аналитик 2 категории
ООО «КРИПТО-ПРО»
Источник