
- •1.1. Базовая терминология. Основные алгоритмы шифрования
- •1.2. Цифровые подписи, криптографические хэш-функции и генераторы случайных чисел
- •1.3. Шифровальный алгоритм. Симметричные криптоалгоритмы
- •1.4. Криптоанализ и атаки на криптосистемы. Функции криптосистем и алгоритмы создания цепочек
- •1.5. Методы рандомизации сообщений
- •1.6. Архивация. Транспортное кодирование
- •1.7. Асимметричные криптоалгоритмы
- •2.1. Хеши
- •2.2. Области применения хэш-функций
- •2.3. Шифрование в каналах связи компьютерной сети
- •2.4. Шифрование файлов
- •2.5. Аппаратное и программное шифрование
- •3. Криптосистемы с открытым ключом
- •3.1. Предыстория и основные идеи
- •3.2. Первая система с открытым ключом - система Диффи-Хеллмана
- •3.3. Элементы теории чисел.
- •3.4. Шифр Шамира
- •3.5. Шифр Эль-Гамаля
- •3.6. Односторонняя функция с «лазейкой» и шифр rsa
- •4. Электронная, или цифровая подпись
- •4.1. Электронная подпись rsa
- •5. Современные шифры секретным ключом
- •5.1. Блоковые шифры
- •5.3. Основные режимы функционирования блоковых шифров
- •5.4. Потоковые шифры
- •5.5. Криптографические хеш-функции
- •6. Сетевая безопасность
- •6.1. Сервера
- •6.2. Рабочие станции
- •6.3. Среда передачи информации
- •6.4. Узлы коммутации сетей
- •6.5. Уровни сетевых атак согласно модели osi
- •7. Программное обеспечение и информационная безопасность
- •7.1. Операционные системы
- •7.2. Прикладные программы
- •7.3. Ошибки, приводящие к возможности атак на информацию
- •7.4. Основные положения по разработке программного обеспечения
1.3. Шифровальный алгоритм. Симметричные криптоалгоритмы
Хорошие криптографические системы создаются таким образом, чтобы сделать их вскрытие как можно более трудным делом.
Теоретически, любой шифровальный алгоритм с использованием ключа может быть вскрыт методом перебора всех значений ключа. В случае, если ключ подбирается методом грубой силы, требуемая мощность компьютера растет экспоненциально с увеличением длины ключа. Ключ длиной в 32 бита требует 232 (около 109) шагов. Такая задача под силу любому дилетанту и решается на домашнем компьютере. Системы с 40-битным ключом требуют 240 шагов - такие компьютерные мощности имеются в большинстве университетов и даже в небольших компаниях. Системы с 56-битными ключами требуют для вскрытия заметных усилий, однако могут быть легко вскрыты с помощью специальной аппаратуры. Ключи длиной 64 бита в настоящий момент могут быть вскрыты крупными государствами и уже в ближайшие несколько лет будут доступны для вскрытия преступными организациями, крупными компаниями и небольшими государствами. Ключи длиной 80 бит могут в будущем стать уязвимыми. Ключи длиной 128 бит, вероятно, останутся недоступными для вскрытия методом грубой силы в обозримом будущем.
Многие шифры вскрываются без перебора всех возможных комбинаций.
Не следует использовать неопубликованные или секретные алгоритмы.
Длины ключей, используемых в криптографии с открытым ключом обычно значительно больше, чем в симметричных алгоритмах. Здесь проблема заключается не в подборе ключа, а в воссоздании секретного ключа по открытому.
Сложность вскрытия систем с открытым ключом (например, системы RSA) оценвается исходя из того, что модули длиной 256 бит легко факторизуются обычными программистами. Ключи в 384 бита могут быть вскрыты исследовательской группой университета или компании. 512-битные ключи находятся в пределах досягаемости крупных государств. Ключи длиной в 768 бит, вероятно, не будут надежны продолжительное время. Ключи длиной в 1024 бит могут считаться безопасными до тех пор, пока не будет существенного прогресса в алгоритме факторизации, ключи длиной в 2048 большинство считает надежными на десятилетия.
Скремблеры
Скремблерами называются программные или аппаратные реализации алгоритма, позволяющего шифровать побитно непрерывные потоки информации.
Сам скремблер представляет из себя набор бит, изменяющихся на каждом шаге по определенному алгоритму. После выполнения каждого очередного шага на его выходе появляется шифрующий бит - либо 0, либо 1, который накладывается на текущий бит информационного потока операцией XOR.
В последнее время сфера применения скремблирующих алгоритмов значительно сократилась. Это объясняется в первую очередь снижением объемов побитной последовательной передачи информации, для защиты которой были разработаны данные алгоритмы. Практически повсеместно в современных системах применяются сети с коммутацией пакетов, для поддержания конфиденциальности которой используются блочные шифры. А их криптостойкость превосходит, и порой довольно значительно криптостойкость скремблеров.
Суть скремблирования заключается в побитном изменении проходящего через систему потока данных. Практически единственной операцией, используемой в скремблерах является XOR - «побитное исключающее ИЛИ». Параллельно прохождению информационного потока в скремблере по определенному правилу генерируется поток бит - кодирующий поток. Как прямое, так и обратное шифрование осуществляется наложением по XOR кодирующей последовательности на исходную.
Генерация кодирующей последовательности бит производится циклически из небольшого начального объема информации - ключа - по следующему алгоритму. Из текущего набора бит выбираются значения определенных разрядов и складываются по XOR между собой. Все разряды сдвигаются на 1 бит, а только что полученное значение («0» или «1») помещается в освободившийся самый младший разряд. Значение, находившееся в самом старшем разряде до сдвига добавляется в кодирующую последовательность, становясь очередным ее битом.
Декодирование заскремблированных последовательностей происходит по той же самой схеме, что и кодирование. Именно для этого в алгоритмах применяется результирующее кодирование по «исключающему ИЛИ» - схема, однозначно восстановимая при раскодировании без каких-либо дополнительных вычислительных затрат.
Главная проблема шифров на основе скремблеров - синхронизация передающего и принимающего устройств. При пропуске или ошибочном вставлении хотя бы одного бита вся передаваемая информация необратимо теряется. Поэтому, в системах шифрования на основе скремблеров очень большое внимание уделяется методам синхронизации. На практике для этих целей обычно применяется комбинация двух методов:
- добавление в поток информации синхронизирующих битов, заранее известных приемной стороне, что позволяет ей при не нахождении такого бита активно начать поиск синхронизации с отправителем;
- использование высокоточных генераторов временных импульсов, что позволяет в моменты потери синхронизации производить декодирование принимаемых битов информации «по памяти» без синхронизации.
Число бит, охваченных обратной связью, то есть разрядность устройства памяти для порождающих кодирующую последовательность бит называется разрядностью скремблера. Изображенный выше скремблер имеет разрядность 5. В отношении параметров криптостойкости данная величина полностью идентична длине ключа блочных шифров, который будет проанализирован далее. На данном же этапе важно отметить, что чем больше разрядность скремблера, тем выше криптостойкость системы, основанной на его использовании.
При достаточно долгой работе скремблера неизбежно возникает его зацикливание. По выполнении определенного числа тактов в ячейках скремблера создастся комбинация бит, которая в нем уже однажды оказывалась, и с этого момента кодирующая последовательность начнет циклически повторяться с фиксированным периодом. Данная проблема неустранима по своей природе, так как в N разрядах скремблера не может пребывать более 2N комбинаций бит, и, следовательно, максимум, через, 2N-1 циклов повтор комбинации обязательно произойдет. Комбинация «все нули» сразу же исключается из цепочки графа состояний скремблера - она приводит скремблер к такому же положению «все нули». Это указывает еще и на то, что ключ «все нули» неприменим для скремблера. Каждый генерируемый при сдвиге бит зависит только от нескольких бит хранимой в данный момент скремблером комбинации. Поэтому после повторения некоторой ситуации, однажды уже встречавшейся в скремблере, все следующие за ней будут в точности повторять цепочку, уже прошедшую ранее в скремблере.
И вот здесь математика преподнесла криптографии подарок. Следствием одной из теорем доказывается, что для скремблера любой разрядности N всегда существует такой выбор охватываемых обратной связью разрядов, что генерируемая ими последовательность бит будет иметь период, равный 2N-l битам. Так, например, в 8-битном скремблере, при охвате 0-го, 1-го, 6-го и 7-го разрядов действительно за время генерации 255 бит последовательно проходят все числа от 1 до 255, не повторяясь ни разу.
Существенным недостатком скремблирующих алгоритмов является их нестойкость к фальсификации.
Блочные шифры
На сегодняшний день разработано достаточно много стойких блочных шифров. Практически все алгоритмы используют для преобразований определенный набор биективных (обратимых) математических преобразований.
Блочные шифры кодируют целые блоки информации (от 4 до 32 байт) как единое целое - это значительно увеличивает стойкость преобразований к атаке полным перебором и позволяет использовать различные математические и алгоритмические преобразования.
Характерной особенностью блочных криптоалгоритмов является тот факт, что в ходе своей работы они производят преобразование блока входной информации фиксированной длины и получают результирующий блок того же объема, но недоступный для прочтения сторонним лицам, не владеющим ключом. Таким образом, схему работы блочного шифра вы имеете возможность описать функциями Z=EnCrypt(X,Key) и X=DeCrypt(Z,Key).
Ключ Key является параметром блочного криптоалгоритма и представляет собой некоторый блок двоичной информации фиксированного размера. Исходный (X) и зашифрованный (Z) блоки данных также имеют фиксированную разрядность, равную между собой, но необязательно равную длине ключа.
Блочные шифры являются основой, на которой реализованы практически все криптосистемы. Методика создания цепочек из зашифрованных блочными алгоритмами байт позволяет шифровать ими пакеты информации неограниченной длины. Такое свойство блочных шифров, как быстрота работы, используется асимметричными криптоалгоритмами, медлительными по своей природе. Отсутствие статистической корреляции между битами выходного потока блочного шифра используется для вычисления контрольных сумм пакетов данных и в хешировании паролей.
Криптоалгоритм именуется идеально стойким, если прочесть зашифрованный блок данных, вы имеете возможность только перебрав все возможные ключи, до тех пор, пока сообщение не окажется осмысленным. Так как по теории вероятности искомый ключ будет найден с вероятностью 1/2 после перебора половины всех ключей, то на взлом идеально стойкого криптоалгоритма с ключом длины N потребуется в среднем 2N-1 проверок. Таким образом, в обшем случае стойкость блочного шифра зависит только от длины ключа и возрастает экспоненциально с ее ростом. Даже предположив, что перебор ключей производится на специально созданной многопроцессорной системе, в которой благодаря диагональному параллелизму на проверку 1 ключа уходит только 1 такт, то на взлом 128 битного ключа современной технике потребуется не менее 1021 лет.
Кроме этого условия к идеально стойким криптоалгоритмам применяется еше одно очень важное требование, которому они должны обязательно соответствовать. При известных исходном и зашифрованном значениях блока ключ, которым произведено это преобразование, вы имеете возможность узнать также только полным перебором. Ситуации, в которых постороннему наблюдателю известна часть исходного текста встречаются повсеместно. Это могут быть стандартные надписи в электронных бланках, фиксированные заголовки форматов файлов, довольно часто встречающиеся в тексте длинные слова или последовательности байт. Таким образом, на функцию стойкого блочного шифра Z=EnCrypt(X,Key) накладываются следующие условия:
- функция EnCrypt должна быть обратимой;
- не должно существовать иных методов прочтения сообщения X по известному блоку Z, кроме как полным перебором ключей Key;
- не должно существовать иных методов определения каким ключом Key было произведено преобразование известного сообщения X в сообщение Z, кроме как полным перебором ключей.
Характерным признаком блочных алгоритмов является многократное и косвенное использование материала ключа. Это диктуется в первую очередь требованием невозможности обратного декодирования в отношении ключа при известных исходном и зашифрованном текстах. Для решения этой задачи чаше всего используется не само значение ключа или его части, а некоторая, иногда необратимая (небиективная) функция от материала ключа. Более того, в подобных преобразованиях один и тот же блок или элемент ключа используется многократно.
Это позволяет при выполнении условия обратимости функции относительно величины X сделать функцию необратимой относительно ключа Key.
Сеть Фейштеля
Сеть Фейштеля является дальнейшей модификацией метода смешивания текущей части шифруемого блока с результатом некоторой функции, вычисленной от другой независимой части того же блока. Эта методика получила широкое распространение, поскольку обеспечивает выполнение требования о многократном использовании ключа и материала исходного блока информации.
Классическая сеть Фейштеля имеет структуру, где независимые потоки информации, порожденные из исходного блока, называются ветвями сети В классической схеме их две. Величины Vi именуются параметрами сети, обычно это функции от материала ключа Функция F называется образующей. Действие, состоящее из однократного вычисления образующей функции и последующего наложения ее результата на другую ветвь с обменом их местами, называется циклом или раундом сети Фейштеля. Оптимальное число раундов К - от 8 до 32 Важно то, что увеличение количества раундов значительно увеличивает криптостойкость любого блочного шифра к криптоанализу. Возможно, эта особенность и повлияла на столь активное распространение сети Фейштеля - ведь при обнаружении, скажем, какого-либо слабого места в алгоритме, почти всегда достаточно увеличить количесво раундов на 4-8, не переписывая сам алгоритм. Часто количество рашдов не фиксируется разработчиками алгоритма, а лишь указываются разумные пределы (обязательно нижний, и не всегда - верхний) этого параметра.
Является ли данная схема обратимой? Очевидно, да. Сеть Фейштеля обладает тем свойством, что даже если вкачестве образующей функции F будет использовано необратимое преобразование, то и в этом случае вся цепочка будет восстановима. Это происходит вследствие того, что для обратного преобразования сети Фейштеля не нужно вычислять функцию F-1.
Более того, сеть Фейштеля симметрична. Использование операции XOR, обратимой своим же повтором, и инверсия последнего обмена ветвей делают возможным раскодирование блока той же сетью Фейштеля, но с инверсным порядком параметров Vi. Заметим, что для обратимости сети Фейштеля не имеет значение является ли число раундов четным или нечетным числом В большинстве реализаций схемы, в которых операция XOR и уничтожение последнего обмена сохранены, прямое и обратное преобразования производятся одной и той же процедурой, которой в качестве параметра передается вектор величин Vi либо в исходном, либо в инверсном порядке.
С незначительными доработками сеть Фейштеля можно сделать и абсолютно симметричной, то есть выполняощей функции шифрования и Дешифрования одним и тем же набором операций. Математическим языком это записывается как «Функция ErCrypt тождественна функции UeCrypt».
Как известно, основные единицы информации, обрабатываемые процессорами на сегодняшний день - это байт и двойное машинное слово 32 бита. Поэтому все чаще и чаще в блочных криптоалгоритмах встречается сеть Фейштеля с 4-мя ветвями. Для более быстрого перемешивания информации между ветвями (а это основная проблема сети Фейштеля с большим количеством ветвей) применяются две модифицированные схемы.
Сеть Фейштеля надежно зарекомендовала себя как криптостойкая схема произведения преобразований, и ее вы имеете возможность найти практически в любом современном блочном шифре. Незначительные модификации касаются обычно дополнительных начальных и оконечных преобразований (англоязычный термин - whitening) над шифруемым блоком, Подобные преобразования, выполняемые обычно также либо «исключающим ИЛИ» или сложением имеют целью повысить начальную рандомизацию входного текста. Таким образом, криптостой-кость блочного шифра, использующего сеть Фейштеля, определяется на 95% функцией F и правилом вычисления Vi из ключа. Эти функции и являются объектом все новых и новых исследований специалистов в области криптографии.