Шифр простой замены

 

Для того, чтобы блочная схема шифрования была устойчива к криптоанализу, она должна обладать свойствами перемешивания и рассеивания. Это означает, что каждый бит исходного текста должен влиять на все биты шифротекста, причем характер этого влияния не должен быть прослеживаем ни статистически, ни алгоритмически. Это требование важно именно для блочных шифров по следующей причине: для раскрытия шифра по алгоритмической линии криптоаналитик может попытаться в явном виде вывести соотношения, связывающие входы и выходы алгоритма. Для потокового шифра это бесполезно, потому что эти соотношения целиком определяются элементами гаммы, которые различны для различных блоков шифруемых данных. А вот чтобы криптоанализ не увенчался успехом для блочного шифра, требуется, чтобы характер влияния входных данных на выходные был достаточно сложным для того, чтобы его можно было выявить путем анализа массивов входных и выходных данных. Это, в частности, подразумевает отсутствие статистической зависимости битов выходного блока от битов входного, что означает на практике, что каким бы образом мы ни изменили блок открытых данных T, все биты блока шифрованных данных С = EK(T) с вероятностью независимо друг от друга изменят свое значение. Но построенная в предыдущем разделе схема шифрования не обладает таким свойством. Действительно, пусть зашифрованию подвергается блок данных T = (T0, T1), тогда в результате мы получим:

Рассмотрим младшую часть зашифрованного блока данных: . Нетрудно заметить, что зависимость битов части блока С от битов части T1 достаточно тривиальна и не удовлетворяет высказанным выше требованиям. Поэтому сконструированное нами криптопреобразование недостаточно сложно для того, чтобы можно было без натяжек назвать его криптографическим. Но оно может быть весьма простым способом распространено на произвольное число шагов n: пусть заданы функции f1, ..., fn отображающих на себя множество -битовых блоков данных, и пара взаимно обратных бинарных операций °и •в этом же самом множестве. Тогда шифрующее и расшифровывающее преобразования могут быть определены следующим образом:

Индукцией по числу основных шагов n можно показать, что второе преобразование обратно первому:

.

Чтобы последовательно реализовать в шифре принцип перемешивания и рассеивания, целесообразно представить шифрующее преобразование в виде достаточно большого числа (n) шагов каждый из которых представляет собой реализацию относительно несложного шифра. Так, в Российском стандарте шифрования число таких шагов равно 32, а в американском – 16, но сами шаги в нем несколько сложнее. Есть криптоалгоритмы подобной архитектуры с меньшим числом шагов n, например – FEAL, для различных вариантов которого n = 4 или n = 8.

Как уже отмечалось, вид бинарных операций наложения гаммы °и •не столь важен с точки зрения стойкости шифра, поэтому, как правило, берется самый простой для практической реализации вариант – операция побитового «исключающего или» Å. Это позволяет реализовать прямую и обратную процедуру преобразования однотипным образом, они будут отличаться только порядком использования шифрующих функций f1, ..., fn. Для более полного рассеивания информации исходных данных криптопреобразование может быть дополнено начальной (Y0) и конечной (Y1) перестановками битов или другими простыми и очевидным образом обратимыми преобразованиями. В результате мы получим следующие шифрующие преобразования:

,

.

Как обычно, через Y–1 обозначается обратное к Y преобразование. Чтобы сохранить однотипность прямого и обратного криптопреобразований, необходимо обеспечить выполнение условий , , то есть подстановки Y0 и Y1 должны быть взаимно обратными. Получаем следующие формулы для прямого и обратного криптопреобразований:

,

.

Преобразование с дополнительной перестановкой битов обладает более высокой криптостойкостью по сравнению с аналогичным преобразованием без перестановки только в том случае, когда она является секретным элементом шифра. Действительно, если это не так, то первым действием криптоаналитика будет подвергнуть все имеющееся в его распоряжении блоки данных, как открытые, так и зашифрованные, этой перестановке Y, и таким образом свести исходную задачу к задаче раскрытия шифра без перестановки. С этой точки зрения начальная и конечная битовые перестановки в алгоритме DES являются не более, чем украшениями и не оказывают заметного влияния на его криптостойкость.

Теперь вспомним про нарушение принципа Кирхгофа, заключающегося в использовании в качестве секретных элементов функций шифрования fi. Для того, чтобы наш алгоритм шифрования его не нарушал, слегка изменим схему использования функций fi – сделаем их зависящими от секретного ключа K: fi(T) = fi(T, K), где fi – известная (открытая) функция, а K – секретный элемент шифра (ключ). Как правило, все функции fi одинаковым образом используют преобразуемый блок данных T и различаются лишь схемой использования ключа K, то есть можно записать: fi(T, K) = f(T, ji(K)) = f(T, Ki), где через Ki = ji(K) мы обозначили код, вырабатываемый из ключа K и используемый на i-ом шаге шифрования, который мы назовем для краткости «шаговым ключом».

Нам осталось обсудить последнюю деталь в построении блочного шифра. До сих пор мы не требовали, чтобы размер шифруемого блока T был постоянным, однако теперь нам придется это сделать по следующим причинам:

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

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

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

T = (T1, T2, ..., Tn), .

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

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

В заключение подведем некоторый итог наших изысканий. Для определения блочного шифра необходимо задать следующее:

1. Числовые параметры алгоритма:

· размер шифруемого блока данных êTï = N;

· размер ключа |K| = NK;

· размер «шагового» ключа ;

· число шагов шифрования (раундов) n;

2. Функцию шифрования f, принимающую в качестве аргумента и возвращающую в качестве значения -битовые блоки данных. Функция шифрования зависит также от -битового секретного блока данных – «шагового» ключа.

3. Набора функций ji, 1 £ i £ n для выработки «шаговых» ключей Ki из исходного ключа шифрования K: Ki = ji(K);

4. Перестановки битов Y в N-битовом блоке данных.

Зашифровывающее и расшифровывающее криптографические преобразования строятся как композиции описанных выше простых шагов Gi, S, Y:

,

.

Здесь Gi и S обозначают соответственно шаг шифрующего преобразования и перестановку старшей и младшей половин шифруемого блока:

,

S(T) = S(T0, T1) = (T1, T0).

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