Гаммирование

 

Предложенная в предыдущем разделе процедура шифрования по методу простой замены с использования датчика псевдослучайных чисел может быть слегка изменена, что освободит ее от ряда недостатков. Зашифрованию по алгоритму простой замены следует подвергать сами блоки, вырабатываемые датчиком ПСЧ, и уже их использовать в качестве гаммы, комбинируемой с блоками данных с помощью бинарных операций °и •:

– зашифрование,

– расшифрование.

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

, где g – некоторая функция, реализуемая алгоритмически.

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

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

2. Необходимо, чтобы соседние или близкие по расположению элементы последовательности достаточно, то есть как минимум, в нескольких битах, отличались друг от друга. Было бы крайне желательно, чтобы различия между ними были в каждом байте. Для простейшего же генератора, предложенного в пункте 1, половина пар соседних значений отличается лишь в одном бите: .

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

Очевидно, что при использовании режима гаммирования, как и в любом другом случае, когда используется рекуррентный датчик ПСЧ, необходим дополнительный элемент данных , первый в рекуррентной последовательности . Чтобы осложнить некоторые возможные способы криптоанализа, в Российском стандарте шифрования элемент получается зашифрованием по алгоритму простой замены блока данных S такого же размера , называемого синхропосылкой или начальным заполнением: . Для шифрования используются блоки гаммы, начиная с . Синхропосылка должна быть известна принимающей сообщение стороне, но требование уникальности гаммы шифрования, однозначно определяемой комбинацией синхропосылка+ключ, приводит к необходимости использовать уникальную синхропосылку для каждого передаваемого сообщения. Так как ее секретность не требуется для обеспечения стойкости сообщения, синхропосылка обычно передается в открытом виде вместе с зашифрованным сообщением.

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

Во-первых, одинаковые блоки исходного текста после зашифрования дадут различные блоки шифротекста, что не облегчает задачу криптоанализа на основе только шифротекста.

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

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

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

Указанное свойство гаммирования довольно неприятно, так как по своей сути означает, что злоумышленник, воздействуя только на шифротекст, может по своему усмотрению менять любые разряды в соответствующем открытом тексте. Насколько это может быть опасно, поясним на следующем примере: пусть почтальон – злоумышленник передает шифрованное сообщение, которое он не может расшифровать, однако может внести в него произвольные изменения. Таким почтальоном может быть, например, работник филиала фирмы, обслуживающий коммуникационную ЭВМ, предназначенную для передачи сообщений в головное отделение фирмы. Пусть он передает некий документ, составленный в виде текстового файла, зашифрованного в режиме гаммирования, в котором, как он знает, с 13 позиции начинается запись некоторого числа, например, суммы его премиального вознаграждения. Вполне может оказаться, что ему известна вся сумма или, хотя бы ее некоторая часть – предположим, что запись числа начинается с символа «1», и злоумышленник это знает. Тогда для него не составит труда переправить эту цифру на другую, например – на «9». Все что для этого требуется – это заменить 13-й байт сообщения на новое значение, вычисляемое следующим образом: . Через '1' и '9' мы обозначили коды цифр 1 и 9 соответственно в той системе кодировки, в которой подготовлен текст сообщения. Если это ASCII, то достаточно инвертировать всего один бит сообщения: . После расшифрования получатель получит сообщение, в котором вместо верной цифры 1 стоит цифра 9, и больше никаких изменений нет! Очевидно, что данная подмена не может быть обнаружена, если в передаваемом массиве данных нет никакой дополнительной информации, кроме зашифрованного исходного сообщения. Приведенный пример еще раз иллюстрирует тот факт, что обеспечение секретности сообщения (его шифрование) само по себе не обеспечивает его аутентичности, то есть подлинности. В чем же причина такой особенности гаммирования? Дело в том, что этот режим не обеспечивает весьма желательного для всех шифров перемешивания битов сообщения, то есть влияния одного бита исходного текста на несколько битов шифротекста.

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