Эта проблема появилась сравнительно недавно с появлением средств мультимедиа и сетей с высокой пропускной способностью, обеспечивающих передачу мультимедийных данных.
До сих пор говорилось о защите сообщений. При этом под ними подразумевалась скорее некоторая текстовая или символическая информация. Однако в современных ИС и информационных системах начинают применяться технологии, которые требуют передачи существенно больших объемов данных. Среди таких технологий:
* факсимильная, видео и речевая связь;
* голосовая почта;
* системы видеоконференций.
Так как передача оцифрованной звуковой, графической и видеоинформации во многих случаях требует конфиденциальности, то возникает проблема шифрования огромных информационных массивов. Для интерактивных систем типа телеконференций, ведения аудио- или видеосвязи такое шифрование должно осуществляться в реальном масштабе времени и, по возможности, быть "прозрачным" для пользователей.
Наиболее распространенным является потоковое шифрование данных. Если в описанных ранее криптосистемах предполагалось, что на входе имеется некоторое конечное сообщение, к которому и применяется криптографический алгоритм, то в системах с потоковым шифрованием принцип другой. Система защиты не ждет, когда закончится передаваемое сообщение, а сразу же осуществляет его шифрование и передачу.
Наиболее очевидным является побитовое сложение входящей последовательности (сообщения) с некоторым бесконечным или периодическим ключом, получаемым, например, от генератора ПСЧ. Отчасти это метод похож на гаммирование, но важным отличием потокового шифрования является то, что шифрованию подвергаются не символы сообщения, а отдельные биты. Поточные шифры преобразуют открытый текст в шифртекст по одному биту за операцию.
Генератор потока ключей (называемый генератором с бегущим ключом) выдает поток битов: k 1, k 2, k 3 ,…,ki. Этот поток битов (называемый бегущим ключом) и поток битов открытого текста x 1, x 2, x 3 ,…,xi суммируются по модулю 2 (операция Å или XOR-«исключающее ИЛИ»), и в результате получается поток битов шифртекста:
сi = xi Å ki.
При дешифровании, для восстановления битов открытого текста, операция Å выполняется над битами шифртекста и тем же самым потоком ключей:
xi = сi Å ki.
Отметим, что для получения ключа по формуле
ki = сi Å xi
достаточно, чтобы длина шифртекста и открытого текста была больше ключа. Следовательно, безопасность системы полностью зависит от свойств генератора потока ключей. Если генератор потока ключей выдает бесконечную строку нулей, шифртекст будет совпадать с открытым текстом и преобразование будет бессмысленным. Если генератор потока ключей выдает повторяющийся 16-битовый шаблон, криптостойкость будет пренебрежимо мала. В случае бесконечного потока случайных битов криптостойкость поточного шифра будет эквивалентна криптостойкости одноразового блокнота. Режим OFB блочного шифра также является частным случаем потокового шифра.
Генератор потока ключей создает битовый поток, который похож на случайный, но в действительности детерминирован и может быть безошибочно воспроизведен при дешифровании. Ключом для псевдослучайного генератора является его начальное состояние.
Чем ближе выход генератора потока ключей к случайному, тем выше трудоемкость криптоаналитической атаки. Псевдослучайный генератор называется криптографически стойким, если стойким является потоковый шифр, полученный с использованием данного генератора.
Блочные и поточные шифры реализуются по-разному. Поточные шифры, шифрующие и дешифрующие данные по одному биту не очень подходят для программных реализаций. Блочные шифры легче реализовывать программно, так как они позволяют избежать трудоемких операций с битами и оперируют удобными для компьютера блоками данных. В то же время поточные шифры больше подходят для аппаратной реализации, хотя существуют и алгоритмы поточного шифрования, ориентированные на программную реализацию.
Поточные шифры, ориентированные на программную реализацию. Алгоритм RC4
Примером стандартного потокового алгоритма является алгоритм RC4 - это поточный шифр с переменным размером ключа. Шифр разработан в 1987 г. Ривестом (R. Rivest) для RSA Data Security, Inc (там же и тем же автором, что и RC5).
Он работает в режиме OFB: поток ключей не зависит от открытого текста. Используется S-блок размером 8x8: S 0 S 1,..., S 255. Элементы представляют собой перестановку чисел от 0 до 255, а перестановка является функцией ключа переменной длины. В алгоритме применяются два счетчика, i и j, с нулевыми начальными значениями. Для генерации случайного байта выполняются следующие вычисления:
i = (i + 1) mod 256;
j = (j + Si)mod 256.
Поменять местами Si и Sj.
t= (Si + Sj) mod 256; k = St.
К используется в операции Å с открытым текстом для получения шифртекста или в операции Å с шифротекстом для получения открытого текста. Шифрование выполняется примерно в 10 раз быстрее, чем в DES. Так же несложна и инициализация S -блока. Сначала S -блок заполняется по правилу: S 0=0, S 1=1,…., S 255=255. После этого ключ записывается в массив: К 0 ,К 1 ,...,К 255. Затем при начальном значении j = 0 в цикле выполняются следующие вычисления:
for i = 0 to 255;
j = (j + St + ki)mod 256.
Поменять местами Si и Sj.
Компания RSA Data Security, Inc. утверждает, что алгоритм устойчив к дифференциальному и линейному криптоанализу и что он в высокой степени нелинеен. S -блок медленно изменяется при использовании: i и j обеспечивают случайное изменение каждого элемента.
RC4 входит в десятки коммерческих продуктов, включая Lotus Notes, AOCE компании Aррle Comрuter и Oracle Secure SQL. Этот алгоритм также является частью спецификации стандарта сотовой цифровой пакетной передачи данных - CDРD (Cellular Digital Рacket Data).
Алгоритм SEAL
SEAL — это эффективный поточный шифр, разработанный в IBM Рогэвэем (Р. Rogaway) и Копперсмитом (D. Coррersmith). Алгоритм оптимизирован для 32-битовых процессоров. Для нормальной работы ему нужно восемь 32-битовых регистров и память на несколько килобайтов.
В SEAL предусмотрен ряд предварительных действий с ключом с сохранением результатов в нескольких таблицах. Таблицы используются для ускорения процедур шифрования и дешифрования.
Особенность SEAL состоит в том, что он в действительности является не традиционным поточным шифром, а представляет собой семейство псевдослучайных функций. При 160-битовом ключе k и 32-битовом регистре п SEAL растягивает п в L -битовую строку k (n). L может принимать любое значение, меньшее 64 Кбайт.
SEAL использует следующее правило: если k выбирается случайным образом, то k (n)должно быть неотличимо от случайной L -битовой функции п.
Практический эффект того, что SEAL является семейством псевдослучайных функций, состоит в том, что он удобен в ряде приложений, где неприменимы традиционные поточные шифры.
При использовании большинства поточных шифров создается однонаправленная последовательность бит: единственным способом определить i -й бит (зная ключ и позицию i) является генерирование всех битов вплоть до i -го. Отличие семейства псевдослучайных функций состоит в том. что можно легко получить доступ к любой позиции ключевой последовательности.
Например, для шифрования жесткого диска, состоящего из множества 512-байтовых секторов, можно воспользоваться семейством псевдослучайных функций, подобных SEAL, и выполнить XOR каждого сектора с k (n). Это то же самое, как если бы была выполнена операция XOR всего диска с длинной псевдослучайной функцией, причем любая часть этой длинной последовательности бит может быть вычислена независимо.
Семейство псевдослучайных функций также упрощает проблему синхронизации, встречающуюся в стандартных поточных шифрах, — можно зашифровать хп (п- епередаваемое сообщение) на ключе k,выполнив XOR хп и k (n). Получателю не нужно хранить состояние шифра для восстановления хп, ему не приходится беспокоиться и о потерянных сообщениях, влияющих на процесс дешифрования.






