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

Лекции (Все подряд) / Потоковые шифры

.doc
Скачиваний:
78
Добавлен:
20.06.2014
Размер:
40.96 Кб
Скачать

Потоковые шифры

Потоковые шифры представляют собой разновидность гаммирования и преобразуют открытый текст в шифрованный последо­вательно по 1 биту. Генератор ключевой последовательности выдает последо­вательность бит k1 , k2, ..., ki, ... Эта ключевая последовательность складывается по модулю 2 с последовательностью бит исходного текста р1, р2 ...,pi, … для получения шифрованного текста:

ci = рi ki .

На приемной стороне шифрованный текст складывается по мо­дулю 2 с идентичной ключевой последовательностью для получения исходного текста:

ciki= piki ki = pi

Стойкость системы целиком зависит от внутренней структуры генератора ключевой последовательности. Если генератор выдает последовательность с небольшим периодом, то стойкость системы будет невелика. Напротив, если генератор будет выдавать бесконеч­ную последовательность истинно случайных бит, то мы получим «ленту однократного использования» с идеальной стойкостью.

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

Однако, если каждый раз при включении генератор будет выда­вать одну и ту же последовательность, то взлом криптосистемы будет тривиальной задачей. Перехватив два шифрованных текста, злоумышленник может сложить их по модулю 2 и получить два исходных текста, сложенных также по модулю 2. Такую систему раскрыть очень просто. Если же в руках противника хотя бы один раз окажется пара «исходный текст-шифрованный» текст, задача вообще становится три­виальной.

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

Потоковые шифры наиболее пригодны для шифрования непре­рывных потоков данных, например, в сетях передачи данных.

Самосинхронизирующиеся шифры

В 1946 году в США была запатентована базовая идея так назы­ваемых самосинхронизирующихся потоковых шифров (или шифро­вания с автоключом - Cipher-Text Auto Key (CTAK)). Она заключа­ется в том, что внутреннее состояние генератора является функцией фиксированного числа предшествующих битов шифрованного тек­ста. Поскольку внутреннее состояние зависит только от п бит шиф­рованного текста, генератор на приемной стороне войдет в синхро­низм с передающей стороной после получения п бит.

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

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

Кроме того, самосинхронизирующиеся шифры уязвимы для атак типа «воспроизведение». Злоумышленник записывает некоторое количество бит шифрованного текста. Затем, позднее, он подменяет биты трафика записанными - «воспроизводит» их. После некото­рого количества «мусора», пока приемная сторона не синхронизиру­ется, старый шифрованный текст будет расшифровываться нормаль­но. У приемной стороны нет никаких средств определения того, что принимаемые данные не являются актуальными.

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

Синхронные шифры

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

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

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

Синхронные шифры также защищают от вставок и выбрасыва­ний отрезков шифрованного текста из потока. Такие операции при­ведут к нарушению синхронизации, что будет сразу же обнаружено на приемной стороне.

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

Алгоритм RC4

RC4 представляет собой потоковый шифр с переменной длиной ключа, разработанный в 1987 г. Роном Райвестом для компании RSA Data Security, Inc. С 1994 г он тех пор стал досту­пен для независимого анализа.

Алгоритм работает в режиме OFB. Ключевая последовательность не зависит от исходного текста. Структура алгоритма включает блок замены размерностью 8 8: S0, ..., S255. Блок замены представляет собой зависимую от ключа переменной длины перестановку чисел 0,...,255. Имеется два счет­чика i и j, первоначально равные 0. Для генерирования псевдослу­чайного байта выполняются следующие действия:

i=(i+1) mod 256

j = (j + Si) mod 256

переставить Si и Sj

t = (Si+ Sj) mod 256

k =St.

Затем байт k складывается по модулю 2 с байтом исходного текста для получения шифрованного.

Инициализация блока замены также проста. Вначале он запол­няется линейно: S0=0, S1 = 1, …, S255=255. Затем заполняется еще один 256-байтовый массив ключом, при этом ключ может по­вторяться необходимое число раз для заполнения всего массива: k0,, …,k255. Счетчик j устанавливается в 0. После чего производятся следующие действия:

for i=0 to 255

j= (j + ki + Si) mod 256

переставить Si и Sj.

Шифрование по этому алгоритму примерно в 10 раз быстрее, чем шифрование DES при программной реализации.

Возможно обобщение алгоритма на большие длину слова и раз­мер блока замены. Так, можно построить шифр с блоком замены размерностью 1616 (потребуется 128 Кбайт памяти) и длиной слова 16 бит. Этап инициализации будет значительно медленнее, необходим цикл до 65535, если мы хотим в точности следовать конструкции, но получившийся в результате алгоритм будет более быстрым.