Типичные дефекты в криптографических протоколахОднако стандарты быстро устаревают, а в протоколах обнаруживаются дефекты разной степени тяжести, начиная от недостатков типа необоснованной сложности протокола и до катастрофических недостатков, делающих протокол крайне опасным. Здесь рассматриваются лишь несколько наиболее ярких примеров криптографических протоколов с дефектами и атаками, использующими эти дефекты. Каждый протокол сначала кратко описывается словами с помощью рисунка для наглядности идеи протокола, затем представляется формальный текст протокола, уточняющий спецификацию протокола. Формальный текст протокола пишется на языке высокого уровня, получившем довольно широкое распространение в литературе по безопасности протоколов. Наконец, на этом же языке указываются одна - две атаки противника (нарушителя), использующие некоторые дефекты протокола. Следует заметить, что эти атаки часто оказываются возможными только благодаря недостаточно полной спецификации протокола; точнее, благодаря тому, что из множества возможных спецификаций протокола реализуется наиболее естественная, но неудачная. Это означает, что при более внимательном выборе спецификации протокола, с учетом знания отрицательных прецедентов, указанные атаки, возможно, окажутся нереализуемыми или неэффективными. В настоящее время, видимо, нет надежной, систематической методологии для построения безопасных коммуникационных протоколов, а очень большое число коммерческих протоколов, которые считались предположительно безопасными, в действительности оказались уязвимыми со стороны широкого спектра эффективных атак. От прикладных программистов нельзя требовать построения безопасных протоколов. Это дело профессиональных криптографов. Однако, полная спецификация протокола, видимо, должна разрабатываться совместно криптографом и программистом, а лучше, если это будет один и тот же человек. Классификация криптографических протоколов Протоколы шифрования / расшифрования: в основе протокола этого класса содержится некоторый симметричный или асимметричный алгоритм шифрования / расшифрования. Алгоритм шифрования выполняется на передаче отправителем сообщения, в результате чего сообщение преобразуется из открытой формы в шифрованную. Алгоритм расшифрования выполняется на приеме получателем, в результате чего сообщение преобразуется из шифрованной формы в открытую. Так обеспечивается свойство конфиденциальности. Для обеспечения свойства целостности передаваемых сообщений симметричные алгоритмы шифрования / расшифрования, обычно, совмещаются с алгоритмами вычисления имитозащитной вставки (ИЗВ) на передаче и проверки ИЗВ на приеме, для чего используется ключ шифрования. При использовании асимметричных алгоритмов шифрования / расшифрования свойство целостности обеспечивается отдельно путем вычисления электронной цифровой подписи (ЭЦП) на передаче и проверки ЭЦП на приеме, чем обеспечиваются также свойства безотказности и аутентичности принятого сообщения. Протоколы электронной цифровой подписи (ЭЦП): в основе протокола этого класса содержится некоторый алгоритм вычисления ЭЦП на передаче с помощью секретного ключа отправителя и проверки ЭЦП на приеме с помощью соответствующего открытого ключа, извлекаемого из открытого справочника, но защищенного от модификаций. В случае положительного результата проверки протокол, обычно, завершается операцией архивирования принятого сообщения, его ЭЦП и соответствующего открытого ключа. Операция архивирования может не выполняться, если ЭЦП используется только для обеспечения свойств целостности и аутентичности принятого сообщения, но не безотказности. В этом случае, после проверки, ЭЦП может быть уничтожена сразу или по прошествии ограниченного промежутка времени ожидания. Протоколы идентификации / аутентификации: в основе протокола идентификации содержится некоторый алгоритм проверки того факта, что идентифицируемый объект (пользователь, устройство, процесс, ... ), предъявивший некоторое имя (идентификатор), знает секретную информацию, известную только заявленному объекту, причем метод проверки является, конечно, косвенным, т.е. без предъявления этой секретной информации. Обычно с каждым именем (идентификатором) объекта связывается перечень его прав и полномочий в системе, записанный в защищенной базе данных. В этом случае протокол идентификации может быть расширен до протокола аутентификации, в котором идентифицированный объект проверяется на правомочность заказываемой услуги. Если в протоколе идентификации используется ЭЦП, то роль секретной информации играет секретный ключ ЭЦП, а проверка ЭЦП осуществляется с помощью открытого ключа ЭЦП, знание которого не позволяет определить соответствующий секретный ключ, но позволяет убедиться в том, что он известен автору ЭЦП. Протоколы аутентифицированного распределения ключей: протоколы этого класса совмещают аутентификацию пользователей с протоколом генерации и распределения ключей по каналу связи. Протокол имеет двух или трех участников; третьим участником является центр генерации и распределения ключей (ЦГРК), называемый для краткости сервером S. Протокол состоит из трех этапов, имеющих названия: генерация, регистрация и коммуникация. На этапе генерации сервер S генерирует числовые значения параметров системы, в том числе, свой секретный и открытый ключ. На этапе регистрации сервер S идентифицирует пользователей по документам (при личной явке или через уполномоченных лиц), для каждого объекта генерирует ключевую и/или идентификационную информацию и формирует маркер безопасности, содержащий необходимые системные константы и открытый ключ сервера S (при необходимости). На этапе коммуникации реализуется собственно протокол аутентифицированного ключевого обмена, который завершается формированием общего сеансового ключа. Дефекты в криптографических протоколах В последующих разделах рассматриваются протоколы с типичными дефектами. Примеры протоколов разбиты на группы по типу используемой криптосистемы: - - - - - Протоколы с криптосистемой DH (Диффи, Хэллман) Исторически криптосистема DH является первой криптосистемой с открытыми ключами (КСОК), основанной на экспоненциальной однонаправленной функции. Сначала эта криптосистема использовалась как схема распределения ключей для классической симметричной криптосистемы с секретными общими ключами. Предварительно все пользователи сети связи получают от сервера S по достоверному каналу системные константы (Р, Протокол ключевого обмена DH Пользователи А и В формируют секретный ключ парной связи K ab с помощью следующего протокола (Рис.1) - А от датчика случайных чисел (ДСЧ) генерирует случайное число X a , вычисляет Поскольку Предполагается, что канал без ошибок и без воздействий противника (Е). Атака . Е b - противник Е, играющий роль пользователя В, перехватывает сообщение от А к В и формирует ключ парной связи K ea =K ae , причем А считает, что это ключ связи с В (Рис.2): Протокол шифрования и цифровой подписи по RSA Данный протокол рекомендован МККТТ, рекомендация Х.509. Дефект протокола состоит в неправильном порядке операции шифрования и подписывания: правильно сначала подписать, затем шифровать. В формальной записи протокола применяются следующие обозначения: М - передаваемое сообщение от А к В; С b - шифрованное А сообщение М на ключе e b получателя В; С ba - сообщение С b , подписанное А на ключе d a отправителя А. Протокол шифрования по RSA на общем модуле Пусть сообщение М шифруется по криптосистеме RSA с общим модулем “n”. Пользователи А и В получают шифрованные сообщения Коммутативный алгоритм шифрования привлекателен тем, что пользователям не нужно устанавливать общий ключ парной связи, а достаточно генерировать личные секретные ключи. Идея конфиденциальной связи без предварительной договоренности о ключе шифрования наиболее ярко демонстрируется примером Шамира (Рис.6). Трехшаговый протокол шифрования Шамира Действуя по протоколу, А применяет к нему операцию
Возможны также атаки с несколькими параллельными протоколами, в которых противник Е может играть одновременно несколько ролей: например, E a , E b и E s - роль сервера S. Протоколы аутентифицированного распределения ключей Рассматриваемые в этом разделе протоколы имеют трех участников: пользователи А, В и сервер S. Цель протоколов - генерация и безопасная передача сервером S ключа парной связи K ab пользователям А и В. Безопасность включает свойства конфиденциальности, целостности, аутентичности и “свежести”. Это означает, что в результате протокола подлинный ключ K ab должен оказаться именно у А и В, и только у них. Свойство “свежести” означает, что участники протокола имеют возможность убедиться, что принимаемые сообщения сформированы в данном запуске протокола, а не взяты из параллельного или более раннего протокола. С этой целью используются “нонсы” N a и N b - случайные числа одноразового использования. Протоколы данного раздела отличаются от предыдущих более детальной спецификацией: указывается структура сообщения, адреса и их проверки... Однако, как показывают примеры, и на этом более высоком уровне спецификации в протоколах имеются серьезные дефекты. Протокол передачи ключа с квитированием В данном протоколе используется криптосистема RSA (типа RSA) для передачи по каналу ключей парной связи с ЭЦП, шифрованием и квитированием. Алгоритмы шифрования / расшифрования пользователей А, В, С обозначаются через (Е а , D a ), (E b , D b ), (E c , D c ), причем все алгоритмы шифрования считаются открытыми, а каждый алгоритм расшифрования является секретом пользователя. Подписывание осуществляется применением алгоритма D, а проверка подписи - применением алгоритма Е. Авторизованный пользователь С играет роль противника. Для упрощения обозначений будем писать EDK вместо E(D(K)). Формальная запись протокола: A: ДСЧ(А) Протокол Нейман - Стаблбайн Словесное описание протокола: - А передает В свой нонс N a в открытом виде. - В шифрует на ключе K bs нонс N a , свою отметку времени Т b и посылает серверу S вместе со своим нонсом N b , который вернется к В от А в шифрованном виде на ключе K ab и будет проверен. - S генерирует ключ K ab , шифрует его для А и В, но оба шифрованных сообщения отправляются к А с открытым нонсом N b . - А выделяет соответствующую часть для В и посылает В вместе с K ab {N b }, для проверки “свежести” полученного ключа K ab (Рис.9) . Противник Е а запускает протокол, выбрав число N a по своему усмотрению, из сообщения В Однако проверочное равенство обычно имеет гораздо больше решений, чем может быть получено по протоколу. Это позволяет подобрать числа, удовлетворяющие проверочному равенству, не зная секретных данных пользователя или сервера. Предъявляя эти числа в качестве идентификационных данных, можно в ряде случаев ввести в заблуждение проверяющего. Для примера рассмотрим две модификации протокола односторонней идентификации. Предварительно сервер S выбирает надлежащим образом значения системных параметров (Р, Положим r ij = Противник Е, играющий роль Трехшаговый протокол односторонней идентификации В данном протоколе пользователь А, желая идентифицировать себя В, посылает ему свои идентификационные данные А, r и синхроданные сеанса связи “u”. На “вопрос” Z от В он должен дать правильный “ответ” v такой, чтобы удовлетворилось проверочное равенство (*) (Рис.11). |