Эта проблема появилась сравнительно недавно с появлением средств мультимедиа и сетей с высокой пропускной способностью, обеспечивающих передачу мультимедийных данных.
До сих пор говорилось о защите сообщений. При этом под ними подразумевалась скорее некоторая текстовая или символическая информация. Однако в современных ИС и информационных системах начинают применяться технологии, которые требуют передачи существенно больших объемов данных. Среди таких технологий:
* факсимильная, видео и речевая связь;
* голосовая почта;
* системы видеоконференций.
Так как передача оцифрованной звуковой, графической и видеоинформации во многих случаях требует конфиденциальности, то возникает проблема шифрования огромных информационных массивов. Для интерактивных систем типа телеконференций, ведения аудио- или видеосвязи такое шифрование должно осуществляться в реальном масштабе времени и, по возможности, быть "прозрачным" для пользователей.
Наиболее распространенным является потоковое шифрование данных. Если в описанных ранее криптосистемах предполагалось, что на входе имеется некоторое конечное сообщение, к которому и применяется криптографический алгоритм, то в системах с потоковым шифрованием принцип другой. Система защиты не ждет, когда закончится передаваемое сообщение, а сразу же осуществляет его шифрование и передачу.
|
|
Наиболее очевидным является побитовое сложение входящей последовательности (сообщения) с некоторым бесконечным или периодическим ключом, получаемым, например, от генератора ПСЧ. Отчасти это метод похож на гаммирование, но важным отличием потокового шифрования является то, что шифрованию подвергаются не символы сообщения, а отдельные биты. Поточные шифры преобразуют открытый текст в шифртекст по одному биту за операцию.
Генератор потока ключей (называемый генератором с бегущим ключом) выдает поток битов: 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). Получателю не нужно хранить состояние шифра для восстановления хп, ему не приходится беспокоиться и о потерянных сообщениях, влияющих на процесс дешифрования.