Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Практическая криптография

..pdf
Скачиваний:
6
Добавлен:
12.11.2023
Размер:
16.23 Mб
Скачать

5.8 Утечка информации

101

В режиме CTR нет проблем с коллизиями. Два ключевых блока никогда небудут одинаковыми, а равенство блоков открытого или шифрованного тек­ ста не означает ровным счетом ничего. Единственное, что отличает CTR от идеального поточного шифра, — это отсутствие коллизий ключевых блоков.

Режим OFB хуже, чем СВС или CTR. Пока между блоками ключево­ го потока не возникает коллизий, режим OFB приводит к утечке такого же объема информации, как и режим CTR. Тем не менее, если между ключе­ выми блоками режима OFB когда-нибудь возникнет коллизия, она приведет к коллизии всех последующих ключевых блоков. Это катастрофа с точки зрения безопасности, а также основная причина того, почему CTR предпо­ чтительнее режима OFB.

5.8.1Вероятность коллизии

Итак, какова же вероятность того, что два блока шифрованного текста окажутся равными? Предположим, мы зашифровали М блоков открыто­ го текста. То, как именно они были организованы — в несколько больших сообщений или в большое количество коротких сообщений, не имеет значе­ ния. Нас интересует только общее количество блоков. Из полученных блоков по довольно грубой оценке можно сформировать примерно М {М - 1)/2 пар блоков. Вероятность того, что значения блоков в паре совпадут, равна 2_п, где п — это размер блока используемого блочного шифра. Итак, ожидаемое количество пар одинаковых блоков шифрованного текста равняется М (М — l)/2n+1, что приближается к единице при М « 2П/2. Другими словами, ко­ гда будет зашифровано около 2П/2 блоков текста, можно ожидать появления двух одинаковых блоков шифрованного текста2. Если размер блока равен 128 бит, ожидать первого повторения блока шифрованного текста можно, за­ шифровав около 264 блоков. Это и есть парадокс задачи о днях рождения, о котором идет речь в разделе 3.6.6. На сегодняшний момент 264 блоков — это большое количество данных, однако не забывайте, что мы разрабаты­ ваем системы с расчетом на 30 лет службы. Возможно, в будущем кому-то понадобится шифровать сообщения и такой длины.

Меньшие объемы данных тоже подвергаются риску. Если обработать 240 блоков текста (около 16 Тбайт данных), вероятность коллизии блоков шиф­ рованного текста будет равна 2~48. Это действительно очень малая вероят­ ность, но давайте посмотрим на нее с точки зрения злоумышленника. Для конкретного ключа шифрования он собирает 240 блоков шифрованного тек­ ста и проверяет, нет ли среди них повторений. Поскольку вероятность найти

2В действительности количество блоков, которые следует зашифровать прежде, чем ожидать первого повторения, близко к ч/7г2,1_1 = 2n^2 y/iF/2, однако доказательство этого факта достаточно громоздко, а в нашей ситуации такой уровень точности не нужен.

102

Глава 5. Режимы работы блочных шифров

повторяющиеся блоки очень мала, злоумышленник вынужден повторить этот процесс примерно для 248 разных ключей. Общее количество работы, кото­ рую приходится проделать злоумышленнику, чтобы обнаружить коллизию, составляет 240 •248 = 288, что намного меньше, чем заявленный нами 128битовый уровень безопасности системы.

Давайте сконцентрируем внимание на режимах СВС и CTR. В режиме CTR мы получаем неравенство открытого текста для каждой пары блоков шифрованного текста. В режиме СВС мы получаем неравенство открыто­ го текста, если блоки шифрованного текста не равны, и равенство, если они равны. Очевидно, равенство предоставляет злоумышленнику гораздо больше информации об открытом тексте, нежели неравенство, поэтому при обнару­ жении коллизии утечка информации в режиме CTR меньше.

5.8.2Как бороться с утечкой информации

Как же удается достигнуть 128-битового уровня безопасности? Вообще-то не удается. Не существует легкого способа обеспечить 128-битовый уровень безопасности при использовании блочного шифра с размером блока, равным 128 бит. Вот почему нам так нужны блочные шифры с 256-битовыми блоками. К сожалению, подобных шифров пока еще нет. Все, что нам остается, — это приблизиться к желаемому уровню безопасности и попытаться ограничить размер ущерба, связанного с утечкой информации.

В режиме CTR объем утечки очень небольшой. Предположим, мы за­ шифровали 264 блоков данных и получили шифрованный текст С. Для лю­ бого открытого текста Р длиной 264 блока злоумышленник может вычислить ключевой поток, который следует применить, чтобы преобразовать указан­ ный текст Р в С. Вероятность того, что полученный ключевой поток будет содержать коллизию, примерно 50%. Известно, что в режиме CTR никогда не случается коллизий, поэтому если коллизия все же возникнет, данный текст Р может быть исключен из рассмотрения. Таким образом, злоумышленник может исключить из рассмотрения примерно половину всех возможных от­ крытых текстов. Это соответствует утечке одного бита информации, что со­ всем немного. Если же мы ограничим размер шифруемого текста 248 блоками, злоумышленник сможет исключить лишь 1/232 всех открытых текстов, что практически не дает ему никакой информации. На практике подобная утечка несущественна. Итак, хотя режим CTR и не является совершенным, можно избежать ущерба, вызванного утечкой информации, просто ограничив объем данных, которые могут быть зашифрованы с помощью одного и того же клю­ ча. Вполне разумно ограничить этот объем данных 260 блоками, что позволит применить один ключ для шифрования 264 байт данных и при этом снизит объем утечки до небольшой доли бита.

5.8 Утечка информации

103

Использование режима СВС требует более жестких ограничений. Если в режиме СВС произойдет коллизия, злоумышленник получит около 128 бит информации об открытом тексте. Поэтому вероятность подобной коллизии должна быть как можно более низкой. Рекомендуем ограничить размер дан­ ных, которые могут быть зашифрованы с помощью одного и того же ключа в режиме СВС, примерно 232 блоками. При этом остаточная вероятность утечки 128 бит информации составляет 2-64, что вполне безобидно для боль­ шинства областей применения, но, конечно же, далеко от желаемого 128битового уровня безопасности.

Еще раз отметим: приведенные выше ограничения касаются общего объе­ ма информации, которая может быть зашифрована с помощью одного и того же ключа. То, как именно организована эта информация — в виде одного очень большого сообщения или же множества небольших сообщений, значе­ ния не имеет.

Подобное положение дел сложно назвать удовлетворительным, но такова суровая правда жизни. Лучшее, что можно сделать в данной ситуации, — это использовать режим CTR или СВС и ограничить объем данных, кото­ рые могут быть зашифрованы с помощью одного и того же ключа. Позднее мы поговорим о протоколах согласования ключей. Установить новый ключ, когда лимит использования старого практически исчерпан, совсем нетрудно. Если вы уже использовали протокол согласования ключей для выбора ключа шифрования, обновить этот ключ не так уж сложно; это просто несколько затрудняет дело. Нельзя сказать, что нам это нравится, однако на данный момент лучшего решения еще не придумано.

5.8.3О наших вычислениях

Читатели с математическим образованием наверняка шокированы тем, как легко мы обращаемся с вероятностями, не утруждая себя проверкой, яв­ ляются ли те независимыми. С формальной точки зрения они, разумеется, правы. Тем не менее криптографы, как и физики, используют математи­ ческий аппарат в своих собственных целях. Криптографические величины обычно ведут себя случайным образом. В конце концов, криптографы дела­ ют многое, чтобы разрушить зависимости между открытым и шифрованным текстом, так как наличие любых зависимостей делает системы уязвимыми. Практика показывает, что подобное “легкомысленное” обращение с вероятно­ стями дает весьма точные результаты. Мы всячески поддерживаем матема­ тиков, пытающихся досконально вникнуть в детали и получить более точные результаты, но сами предпочитаем более грубые приближения по причине их простоты.

Глава 6

Функции хэширования

Функции хэширования поистине универсальны. Они могут применяться для шифрования, аутентификации и даже в простых схемах цифровых под­ писей1 .

Функция хэширования — это функция, которая принимает на вход строку битов (или байтов) произвольной длины и выдает результат фиксированной длины. Стандартной областью применения функций хэширования являются цифровые подписи. Для обеспечения аутентификации можно подписывать само сообщение т. Тем не менее в большинстве схем цифровых подписей операции с открытым ключом обходятся довольно дорого в плане вычисли­ тельных ресурсов. Поэтому, вместо того чтобы подписывать само сообщение т , можно применить к нему функцию хэширования и подписать значение h(m). Результат применения функции h обычно составляет от 128 до 512 бит в длину, что совсем немного в сравнении с тысячами или миллионами бит со­ общения т . Таким образом, подписать значение h(m) гораздо быстрее, чем подписать непосредственно сообщение т. Чтобы данная конструкция была безопасной, функция хэширования должна удовлетворять следующему усло­ вию: невозможно построить два разных сообщения mi и m2, результаты хэ­ ширования которых были бы одинаковы. Более подробно свойства безопас­ ности функций хэширования рассматриваются несколько ниже.

Иногда функции хэширования называют функциями профилей сообщений (message digest), а результат применения функции хэширования — профилем (digest) или цифровым отпечатком пальца (digital fingerprint). Мы же пред­ почитаем более распространенное название функция хэширования (hash func­ tion), поскольку, помимо создания профилей сообщений, эти функции име­ ют массу областей применения. Следует также предупредить вас о возмож­

1 Самая первая сх е м а цифровой подписи, разработанная Лесли Лампортом (Leslie Lam­ port), принадлежит именно к этому типу [21].

6.1 Безопасность функций хэширования

105

ной путанице: термином “функция хэширования” иногда называют функцию отображения, которая применяется для доступа к хэш-таблицам — структу­ ре данных, используемой во многих алгоритмах. Эти так называемые функ­ ции хэширования схожи с криптографическими функциями хэширования, однако между ними есть существенное различие. Функции хэширования, ис­ пользуемые в криптографии, обладают особыми свойствами безопасности. К функциям отображения хэш-таблиц предъявляются более слабые требо­ вания. Никогда не путайте эти функции. В нашей книге речь идет только

окриптографических функциях хэширования.

Вкриптографии функции хэширования имеют множество применений. Они выполняют роль “связующего звена” между различными частями крип­ тографической системы. Если вас не устраивает значение с переменной дли­ ной, вы можете применить к нему функцию хэширования, чтобы превратить его в значение с фиксированной длиной. Функции хэширования могут при­ меняться в качестве криптографических генераторов псевдослучайных чисел для создания нескольких ключей на основе одного общего секретного ключа.

Инаконец, функции хэширования обладают свойством односторонности, бла­ годаря которому разные части системы оказываются изолированными друг от друга, поэтому, даже если злоумышленнику удастся узнать какое-нибудь одно значение, он не сможет вычислить по нему другие.

Несмотря на повсеместное применение функций хэширования, мы знаем

оних гораздо меньше, чем о блочных шифрах. Это одно из слабых мест криптографического сообщества. В сравнении с блочными шифрами функ­ ции хэширования крайне мало исследованы, а практические предложения функций хэширования весьма немногочисленны.

6.1Безопасность функций хэширования

Как уже отмечалось, функция хэширования отображает строку тп про­ извольной длины на значение h(m) фиксированной длины. Обычно длина результата функции хэширования составляет от 128 до 512 бит. К функции хэширования предъявляется несколько требований. Самое простое из них —

односторонность (one-way property): для любого сообщения т легко вычис­ лить значение h(m), однако для любого значения х невозможно найти такое т , что h(m) = х. Другими словами, сама односторонняя функция вычисля­ ется довольно легко, а вычисление функции, обратной по отношению к ней, осуществить практически невозможно (отсюда и название “односторонняя”).

Среди многих других свойств, которыми должна обладать хорошая функ­ ция хэширования, наиболее часто упоминают сопротивляемость коллизиям (collision resistance). Последнее требование строже, чем свойство односторон­

106

Глава 6. Функции хэширования

ности. Коллизией по отношению к функциям хэширования называют два разных значения т\ и m2, для которых h(m\) = /1(7712). Разумеется, каж­ дая функция хэширования обладает бесконечным числом подобных колли­ зий. (Существует бесконечное число возможных входных значений и только конечное число возможных выходных значений.) Таким образом, функция хэширования никогда не будет бесконфликтной. Свойство сопротивляемости коллизиям означает лишь то, что, хотя коллизии и существуют, их невозмож­ но обнаружить.

Свойство сопротивляемости коллизиям делает функции хэширования пригодными для использования в схемах цифровых подписей. Тем не менее существует масса функций хэширования, обладающих сопротивляемостью к коллизиям и совершенно не подходящих для других областей применения, таких, как генерация ключей, односторонние функции и т.п. На практике разработчики криптографических систем нуждаются в функции хэширова­ ния, которая представляет собой случайное отображение. Поэтому необходи­ мо, чтобы функция хэширования была неотличима от случайного отображе­ ния. Любое другое определение приводит к возникновению ситуации, в ко­ торой разработчик больше не может обращаться с функцией хэширования как с идеальным “черным ящиком” и должен просчитывать, как ее свойства будут взаимодействовать с остальными частями системы.

Определение 4. Идеальная функция хэширования это случайное отоб­ ражение всех возможных входных значений на множество возможных вы­ ходных значений.

Это определение, как и сформулированное ранее определение идеального блочного шифра (см. раздел 4.3), является неполным. С формальной точки зрения не существует такого понятия, как случайное отображение; мы можем говорить только о вероятностном распределении на множестве всех возмож­ ных отображений. Тем не менее для наших целей такое определение вполне подойдет.

Теперь можно дать определение атаке на функцию хэширования. Определение 5. Атака на функцию хэширования — это нетривиальный метод, позволяющий обнаружить различие между функцией хэширования

иидеальной функцией хэширования.

Вэтом определении идеальная функция хэширования, очевидно, должна иметь тот же размер выходных данных, что и функция хэширования, под­ вергающаяся атаке. Как и при рассмотрении блочных шифров, требование “нетривиальный” касается всех типов универсальных атак. Наши замечания относительно тривиальных атак на блочные шифры справедливы и здесь.

6.2 Современные функции хэширования

107

Осталось определить лишь то, какой объем работы придется выполнить злоумышленнику. В отличие от блочного шифра, у функции хэширования нет ключа. Кроме того, для функции хэширования не существует универсальной атаки наподобие перебора всех вариантов ключа. Основное внимание здесь следует уделить размеру выходных данных. Одной из универсальных атак на функцию хэширования является атака, в основе которой лежит парадокс задачи о днях рождения. Как известно, такая атака направлена на обнару­ жение коллизий. Для функции хэширования с n-битовыми выходными дан­ ными возникновения коллизии следует ожидать примерно через 2П/2 шагов. Между тем коллизии актуальны только для определенных областей примене­ ния функций хэширования. В других случаях целью злоумышленника может стать поиск прообраза (для заданного х найти такое т , что h{m) = х) ли­ бо выявление некоторых структурных закономерностей в выходных данных функции хэширования. Универсальная атака на прообраз требует выполне­ ния около 2Пшагов. Мы не собираемся подробно рассматривать то, какие ата­ ки являются актуальными для конкретной области применения функции хэ­ ширования и сколько времени может потратить различитель на осуществле­ ние конкретного типа атаки. Чтобы различитель имел практический смысл, ондолжен быть более эффективным, чем универсальная атака, направленная на достижение аналогичных результатов. К сожалению, это не точное опре­ деление, но мы не знаем, как сформулировать его точнее. Если кто-нибудь заявит об изобретении нового типа атаки, просто спросите себя, нельзя ли получить такой же или лучший результат с помощью универсальной атаки, не учитывающей специфику функции хэширования. Положительный ответ на этот вопрос будет означать, что новый различитель совершенно бесполе­ зен. Если же ответ отрицателен, значит, новый различитель действительно имеет право на существование.

Как и при рассмотрении блочных шифров, мы допускаем наличие сни­ женного уровня безопасности, если это указано явно. Мы можем представить себе 512-битовую функцию хэширования, которая обеспечивает уровень без­ опасности 128 бит. В этом случае различитель должен добиться успеха не более чем за 2128 шагов.

6.2 Современные функции хэширования

Рассмотрим первую практическую проблему. На свете слишком мало хо­ роших функций хэширования. На данный момент наш выбор ограничен лишь семейством функций SHA да еще, пожалуй, функцией MD5. Существуют идругие опубликованные предложения, но ни одно из них не привлекло вни­ мания критиков настолько, чтобы ему можно было доверять. Вообще говоря,

108 Глава 6. Функции хэширования

даже функции SHA еще не были проанализированы так, как нужно, но они по крайней мере были разработаны Управлением национальной безопасности (National Security Agency — NSA) и стандартизированы NIST2.

Практически все современные функции хэширования (и все функции, ко­ торые рассматриваются в этой главе) являются итеративными. Итеративные функции хэширования разбивают входное значение на последовательность блоков фиксированного размера используя некоторое правило дополнения для заполнения последнего блока. Затем блоки сообщения об­ рабатываются по порядку с помощью функции сжатия Ы и промежуточных состояний фиксированного размера. Этот процесс начинается с фиксирован­ ного значения Но и определяется как Hi = Ы(#*_1,т {) . Последнее значение Нк и будет результатом функции хэширования.

Итеративный алгоритм хэширования имеет существенные практические преимущества. Во-первых, его намного легче определить и реализовать по сравнению с функциями, которые напрямую работают со значениями пере­ менной длины. Во-вторых, итеративная структура позволяет начинать вы­ числение хэш-кода сообщения, как только у нас появится хотя бы часть этого сообщения. Благодаря этому в приложениях, работающих с поточными дан­ ными, хэшировать сообщение можно прямо “на лету”, не сохраняя данные в буфере.

Как и при рассмотрении блочных шифров, не будем вдаваться в дета­ ли работы функций хэширования. Разработчики криптографических систем смогут найти полные спецификации функций хэширования в указанной нами литературе или же в Internet. Для всех остальных полные спецификации — это ненужные подробности, которые лишь отвлекают читателя от основной идеи книги.

6.2.1MD5

Разработанная Роном Райвестом (Ron Rivest) [81] 128-битовая функция хэширования MD5 является дальнейшим усовершенствованием функции MD4 [78] и обладает дополнительной стойкостью к атакам3.

Согласно алгоритму MD5 исходное сообщение разбивается на блоки по 512 бит. Последний блок дополняется до нужной длины, после чего к нему дописывается длина исходного сообщения в битах. Функция MD5 использу­ ет 128-битовое промежуточное состояние, которое разбивается на четыре 32битовых слова. Функция сжатия Ы состоит из четырех раундов, в каждом

2Что бы вы ии думали об Управлении национальной безопасности, его наработки в об­ ласти криптографии довольно неплохи.

3Хотя функция хэширования MD4 очень быстрая, она довольно легко взламывается [24], поэтому не стоит ее использовать.

6.2 Современные функции хэширования

109

из которых выполняется перемешивание блока сообщения и промежуточного состояния. Перемешивание представляет собой комбинацию операции сложе­ ния, операций XOR, AND, OR и операций циклического сдвига битов над 32битовыми словами. (Более подробно это рассматривается в [81].) В каждом раунде целый блок сообщения перемешивается с промежуточным состояни­ ем, поэтому каждое слово сообщения фактически используется четыре раза. После четырех раундов функции h! входное промежуточное состояние и ре­ зультат складываются для получения выходного значения функции hf.

Описанный алгоритм оперирования 32-битовыми словами весьма эффек­ тивен в системах с 32-разрядной архитектурой. Данный подход был впервые применен в алгоритме MD4 и сейчас широко используется во многих крип­ тографических функциях.

В основе итеративного подхода к построению функций хэширования ле­ жит следующая идея: если функция h! обладает сопротивляемостью колли­ зиям, тогда функция хэширования Л, построенная на основе А', тоже будет обладать сопротивляемостью коллизиям. В конце концов, любая коллизия в h может произойти только при возникновении коллизии в h!. Недостатком алгоритма MD5 является то, что у его функции сжатия Ь! были выявлены коллизии [20]. На данный момент известных атак на саму функцию MD5 еще нет, однако наличие коллизий в функции сжатия делает использование MD5 потенциально небезопасным.

Для большинства областей применения 128-битового размера хэш-кода MD5 явно недостаточно. Используя парадокс задачи о днях рождения, можно найти реальную коллизию для функции MD5 примерно за 264 оцениваний функции хэширования, что совершенно не подходит для современных систем. Поэтому мы не советуем использовать MD5.

6.2.2SHA-1

Защищенный алгоритм хэширования (Secure Hash Algorithm — SHA) раз­ работан Управлением национальной безопасности США (National Security Agency — NSА) и стандартизирован институтом NIST [70]. Первая версия этого алгоритма называлась просто SHA (теперь ее часто называют SHA-0) и имела весьма существенный недостаток. В NSA обнаружили этот недо­ статок и разработали метод его исправления. Это было опубликовано NIST в качестве улучшенной версии алгоритма SHA под названием SHA-1. Тем не менее NIST не привел никаких сведений о найденном недостатке. Через три года Шабо (Chabaud) и Ж у (Joux) опубликовали статью о слабом месте алго­ ритма SHA-0 [16]. Эта ошибка была исправлена в алгоритме SHA-1, поэтому можно предположить, что речь идет именно о том загадочном недостатке, который был обнаружен NSA.

110 Глава 6. Функции хэширования

SHA-1 — это 160-битовая функция хэширования, основанная на алгорит­ ме MD4. Наличие общего “предшественника” делает SHA-1 весьма схожей с MD5; однако SHA-1 обладает более консервативной структурой и работа­ ет в два-три раза медленнее, чем MD5. Тем не менее никаких проблем без­ опасности, связанных с SHA-1, пока не возникло, а потому данная функция получила самое широкое применение.

Функция SHA-1 использует 160-битовое промежуточное состояние, кото­ рое разбивается на пять 32-битовых слов. Как и MD5, она состоит из четырех раундов, представляющих собой комбинацию элементарных операций над 32битовыми словами. Вместо того чтобы обрабатывать каждый блок сообще­ ния по четыре раза, SHA-1 использует линейную рекуррентную функцию, чтобы “растянуть” 16 слов блока сообщения до нужных ей 80 слов. Это обоб­ щение метода, используемого в MD4. В MD5 каждый бит сообщения исполь­ зуется функцией перемешивания по четыре раза. В SHA-1 наличие линейной рекуррентной функции гарантирует, что каждый бит сообщения использует­ ся функцией перемешивания по меньшей мере десяток раз. Что интересно, единственным отличием SHA-1 от SHA-0 стало добавление к линейной ре­ куррентной функции циклического сдвига на один бит.

Основным недостатком SHA-1 является 160-битовый размер результата функции хэширования. Для генерации коллизий достаточно выполнить лишь 280 шагов, что значительно ниже уровня безопасности современных блоч­ ных шифров с размерами ключей от 128 до 256 бит. Этого недостаточно и для заявленного нами 128-битового уровня безопасности криптографиче­ ских систем.

6.2.3SHA-256, SHA-384 и SHA-512

Несколько лет назад NIST опубликовал черновой стандарт, содержащий три новых функции хэширования [74], которые выдают 256-, 384- и 512-бито­ вые результаты соответственно. Эти функции разработаны для применения с 128-, 192- и 256-битовыми ключами алгоритма AES. Структура этих функ­ ций очень схожа со структурой SHA-1.

Эти функции хэширования слишком новы. Мы не хотели бы рекомендо­ вать их для практического применения, однако альтернативы все равно нет. Чтобы достигнуть уровня безопасности, превышающего тот, который в состо­ янии обеспечить SHA-1, требуется функция хэширования с результатом боль­ шей длины. Ни один из опубликованных алгоритмов хэширования с результа­ тами большего размера еще не был достаточно проанализирован в публичных источниках. Что же касается функций семейства SHA, они по крайней мере были исследованы в NSA, а эта организация вроде бы знает, что делает.