<< Предыдущая

стр. 11
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>

6.3.1. Блочные шифры
Блочные алгоритмы шифрования применяются, пожалуй, чаще, чем любые
другие шифры. Блочный шифр выполняет операции над блоками — пор-
циями данных фиксированного размера. Обычно размер блока составляет
Глава 6. Криптография для нематематиков 6?


64 бита (8 байт) или 128 бит (16 байт), но некоторые алгоритмы используют
и другие значения. Блочный шифр всегда преобразует определенный блок
открытого текста в один и тот же шифртекст независимо от того, какие
данные были зашифрованы до этого.
Так как размер шифруемого сообщения не всегда кратен размеру блока,
возникает проблема дополнения, имеющая несколько решений. Можно,
например, передавать в незашифрованном виде размер полезной части за-
шифрованных данных и после расшифровки лишние байты просто отбра-
сывать. На практике же часто применяют другой способ.
Если алгоритм оперирует 8-байтовыми блоками данных, а в последнем бло-
ке, например, только 3 байта полезных данных, то все неиспользуемые бай-
ты, кроме самого последнего, можно заполнить любым значением, а в по-
следнем байте записать число, равное количеству неиспользуемых байтов.
Тогда, получив и расшифровав все блоки, необходимо отбросить с конца
столько байт, сколько указано в последнем байте последнего блока. Правда,
если исходное сообщение имело длину, кратную размеру блока, то возника-
ет некоторая сложность, т. к. требуется добавить 0 байт, и последний байт
должен содержать число байт дополнения. Для разрешения этой проблемы
при зашифровании добавляется новый блок, последний байт которого со-
держит размер блока. Дополнительный блок будет целиком отброшен при
расшифровании.
Блочные алгоритмы шифрования могут быть использованы в нескольких
режимах, например:
• режим простой замены (Electronic CodeBook, EC В);
• с зацеплением блоков шифртекста (Cipher Block Chaining, CBC);
• с обратной связью по шифртексту (Cipher FeedBack, CFB);
• с обратной связью по выходу (Output FeedBack, OFB);
• по счетчику (Counter);
• с зацеплением блоков открытого текста (Plaintext Block Chaining, PBC);
П с обратной связью по открытому тексту (Plaintext FeedBack, PFB);
П с усиленным сцеплением блоков шифртекста (различные модификации
режима СВС);
• с обратной связью по выходу и нелинейной функцией (Output FeedBack
with Nonlinear Function, OFBNLF);
• по счетчику с нелинейной функцией (Counter with Nonlinear Function,
CNLF).
Этот список далеко не полный и может быть расширен чуть ли не до беско-
нечности.
68 Часть II. Несколько слов о криптологии

Каждый режим имеет свои особенности: он может требовать те или иные
дополнительные операции, быть устойчивым или, наоборот, неустойчивым
к определенным атакам, лучше или хуже восстанавливаться при сбоях и т. д.
Так, например, режим простой замены рекомендуется использовать только
для шифрования коротких сообщений, содержащих данные, близкие к слу-
чайным (такие как ключи шифрования). Детальное описание режимов при-
менения блочных шифров можно найти в различных изданиях, посвящен-
ных криптографии.

6.3.2. Потоковые шифры
Потоковый шифр выполняет операции над битами или символами (напри-
мер 8-, 16- или 32-битовыми). Потоковый шифр преобразует один и тот же
символ открытого текста в разные символы шифртекста, например в зави-
симости от того, сколько и каких символов было обработано ранее.
Во многих потоковых шифрах зашифрование производится следующим об-
разом. Генератор гаммы, основанный на генераторе псевдослучайных чисел,
выдает последовательность битов (гамму). Эта гамма накладывается на от-
крытый текст с помощью побитовой операции XOR. В результате получается
шифртекст. Для расшифрования необходимо выполнить в точности ту же
процедуру, только наложить гамму, полученную с использованием идентич-
ного генератора с точно таким же начальным состоянием, на шифртекст.
Таким образом, стойкость алгоритма зависит исключительно от характери-
стик гаммы, выдаваемой генератором. Если гамма состоит из одних нулей
(вырожденный случай), то данные при шифровании вообще не изменяются.
Если гамма имеет короткий период (например 32 бита), то шифрование
сводится к операции XOR С 32-битовой константой. Если же гамма представ-
ляет собой случайный набор битов, не подчиняющийся никакой законо-
мерности, получается аналог одноразового шифровального блокнота, кото-
рый обеспечивает абсолютную защиту. Разумеется, детерминированный
алгоритм, используемый в генераторе гаммы, не может выдавать истинно
случайную последовательность. Если последовательность не удастся повто-
рить, то не удастся и расшифровать сообщение.
Если два сообщения были зашифрованы с использованием одной и той же
гаммы и для одного из сообщений (более длинного) удалось каким-нибудь
образом получить открытый текст, то легко получить открытый текст и для
другого сообщения. Применив операцию XOR К открытому тексту и шифр-
тексту первого сообщения, мы получим фрагмент гаммы. А наложив гамму
на шифртекст второго сообщения, мы получим его открытый текст. Именно
поэтому нельзя допускать, чтобы одна и та же гамма использовалась при
шифровании двух разных потоков или сообщений.
Глава 6. Криптография для нематематиков 69


Если гамма генерируется независимо от содержимого сообщения (как
в приведенном ранее примере), то такой потоковый алгоритм называется
синхронным. Как правило, в синхронных потоковых шифрах ключ шифрова-
ния используется для установки начального внутреннего состояния генера-
тора гаммы.
В самосинхронизирующихся потоковых шифрах каждый бит гаммы зависит от
фиксированного числа предыдущих битов шифртекста.
Более детальное описание достоинств и недостатков потоковых шифров
также можно найти в специализированной литературе по криптографии.

6.3.3. Алгоритмы с открытым ключом
Асимметричные алгоритмы подразумевают использование двух математиче-
ски связанных ключей. Один ключ называют персональным (секретным), и
он должен храниться в тайне, а парный ему ключ называют публичным (от-
крытым), и доступ к нему должны иметь все участники информационного
обмена. Необходимым требованием для стойкого алгоритма является невоз-
можность эффективного вычисления секретного ключа по открытому ключу.
Стойкие алгоритмы с открытым ключом, как правило, основываются на ма-
тематических задачах, которые на настоящий момент не имеют эффектив-
ного решения. Однако далеко не все стойкие алгоритмы применяются на
практике. Некоторые из них требуют очень больших ключей. Например,
размер открытого ключа криптосистемы HFE (Hidden Fields Equations) мо-
жет достигать десятков мегабайт, что затрудняет распределение таких ключей.
При использовании некоторых алгоритмов размер шифртекста значительно
превышает размер соответствующего ему открытого текста. Не последнюю
роль играет и скорость выполнения шифрования — все асимметричные ал-
горитмы значительно медленнее, чем симметричные.
Алгоритмы с открытым ключом используются для решения двух основных
задач: шифрования данных и цифровой подписи, причем многие алгоритмы
тригодны для решения только одной из этих задач. Также некоторые алго-
•итмы позволяют вырабатывать общий сеансовый ключ, который злоумыш-
енник не сможет получить, даже если он перехватит все сообщения между
юЪнентами.
Общей проблемой алгоритмов с открытым ключом является необходимость
распространения этих самых открытых ключей. Используя асимметричную
криптографию, можно вести защищенный диалог с абонентом, с которым
был совершен обмен открытыми ключами. Но в обшем случае, не проводя
подготовительных действий и не имея общего секрета, невозможно с уве-
ренностью утверждать, что абонент является именно тем, за кого он себя
выдает. Для решения этой проблемы используется инфраструктура откры-
JO Часть II. Несколько слов о криптологии


тых ключей (Public Key Infrastructure, PKI), которая при помощи иерархии
сертификатов позволяет свести доверие абоненту к доверию корневому сер-
тифицирующему центру.
Пожалуй, самым известным на сегодняшний день асимметричным алгорит-
мом, пригодным как для шифрования, так и для подписи сообщений, явля-
ется алгоритм RSA, основанный на сложности задачи факторизации (разло-
жения числа на простые сомножители).


6.3.4. Хэш-функции
Хэш-функция должна отображать входные данные произвольного размера
в выходной набор бит фиксированного размера. Отображение должно быть
равновероятным и случайным.
Похожие требования предъявляются к функциям вычисления контрольных
сумм (Cyclical Redundancy Check, CRC), таким как CRC32 или Adler32.
Но контрольные суммы призваны, в первую очередь, обнаруживать случай-
ные нарушения целостности. Так что задача подбора двух сообщений, кон-
трольные суммы для которых будут совпадать, или нахождения сообщения
с заданным значением контрольной суммы может быть решена эффективно.
Например, достаточно откорректировать всего 4 идущих подряд байта, рас-
положенных в любом месте изменяемого сообщения, чтобы значение
CRC32 для этого сообщения осталось таким же, как до внесения измене-
ний. Поэтому контрольные суммы (обычно очень простые в реализации) не
стоит использовать в криптографии.
Если на выходе хэш-функции, реализующей идеальное,случайное равновероят-
ное отображение, получается, например, 128-битовое значение и хэш-функция
была вычислена от 2 1 2 8 разных сообщений, это не значит, что каждое из 2 1 2 8
возможных выходных значений получилось ровно один раз. Действительно,
предположим, что мы вычислили хэш ровно от половины (2 1 2 7 ) входных сооб-
щений, и получили 2 1 2 7 разных выходных значений, т. е. не было ни одного
повторения. Учитывая тот факт, что отображение случайно и равновероятно
значение хэш-функции от следующего сообщения с вероятностью '/г будет сов-
падать с одним из уже полученных значений. И с каждым новым знaчeниe^
хэша вероятность возникновения коллизии будет только возрастать.
Если результат вычисления хэш-функции без каких-либо изменений и до-
полнений снова подается на вход той же хэш-функции и так повторяется
многократно (например для снижения скорости атаки подбором), мы можем
получить вырождение хэша. Вырождение возникает, когда любые входные
сообщения отображаются в очень малое множество выходных значений
(значительно меньшее, чем 2 1 2 8 ) и вероятность подбора двух сообщений
с одинаковым значением хэша становится сравнительно большой.
Глава 6. Криптография для нематематиков 71

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

6.3.5. Генераторы случайных чисел
Наверное, еще раз стоит повторить, что привычные генераторы псевдослу-
чайных чисел, реализованные в стандартных библиотеках популярных язы-
ков программирования, не пригодны для криптографии.
Для того чтобы использовать криптографические генераторы псевдослучайных
чисел, их необходимо проинициализировать истинно случайными данными,
полученными из физических источников. Популярным способом сбора слу-
чайных данных является измерение задержек между нажатиями клавиш на
клавиатуре или анализ перемещения указателя мыши, выполняемого пользо-
вателем. Однако оба этих способа имеют два серьезных недостатка.
Первый недостаток заключается в том, что невозможно точно сказать,
сколько бит действительно случайных данных может быть получено из од-
ной пары нажатий или одного движения мышью. У людей с профессио-
нальными навыками машинописи, как правило, очень высокая ритмичность
нажатия клавиш. А случайные данные должны получаться независимо от
того, кто сидит за клавиатурой. Да и щелчки при нажатии кнопок могут
быть легко записаны злоумышленником на магнитофон, а потом воспроиз-
ведены для повторения задержек. С мышью тоже не все понятно — данные,
которые получает программа, проходят много инстанций. Мышь передает
информацию о перемещении с определенной периодичностью, а не в тот
момент, когда датчик перемещения получает информацию о том, что мышь
была сдвинута. А драйвер мыши извещает программу о состоянии мыши
со своей дискретностью. Все это приводит к тому, что программа получает
далеко не полную информацию о том, что произошло с мышью, и основная
часть случайных данных, на которые рассчитывала программа, может при
определенной комбинации мыши, драйвера и компьютера оказаться совсем
не случайной.
А второй недостаток связан с необходимостью присутствия человека для
получения случайных данных, что является большой проблемой для сервер-
ных приложений.
В качестве претендентов на действительно случайные данные можно рас-
сматривать значение хэша от содержимого экрана и от всех данных, прочи-
танных с диска с момента загрузки операционной системы. Однако очевид-
но, что пока не запущено ни одно интерактивное приложение, состояние
экрана можно попытаться предугадать, а сразу после получения порции слу-
чайных данных повторный запрос может вернуть тот же самый результат.
72 Часть II. Несколько слов о криптологии

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

6.3.6. Криптографические протоколы
Криптографические алгоритмы почти всегда используются в соответствии
с определенным набором правил, называемым протоколом. Если в крипто-
графическом протоколе используется нестойкий алгоритм, то и протокол,
наверняка, окажется нестойким. Но использование исключительно стойких
алгоритмов еще не гарантирует того, что протокол тоже будет стойким.
На практике ошибки в криптографических протоколах обнаруживаются го-
раздо чаще, чем в криптографических алгоритмах.


6.4. Разработка собственных
криптографических алгоритмов
Иногда программист приходит к идее разработать свой собственный крип-
тографический алгоритм или получает аналогичные инструкции от началь-
ства. Разумеется, ничего плохого в такой попытке нет, но практика показы-
вает, что очень редко кто достигает на этом пути положительных
результатов.
Дело в том, что для создания действительно хорошего алгоритма мало по-
требности и желания. Еще требуются глубокие знания, позволяющие прове-
рить стойкость разработанного алгоритма ко всем известным методам крип-
тоанатаза. Кроме того, настоятельно рекомендуется открыто опубликовать
Глава 6. Криптография для нематематиков 73


алгоритм, чтобы широкая криптографическая общественность попыталась
найти в нем слабые места.
В общем, на настоящий момент существует достаточно много самых разно-
образных криптографических алгоритмов, почти на любой вкус. Большин-
ство популярных алгоритмов прошли проверку временем и заслужили по-
ложительные отзывы криптоаналитиков. И разработка нового алгоритма,
наверное, имеет смысл только в одном из двух случаев: если новый алго-
ритм будет быстрее уже существующих (без потери стойкости) или если он
будет более стойким.
Глава 7

<< Предыдущая

стр. 11
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>