Анимация
JavaScript
|
Главная Библионтека в некоторых рассмотренных выше режимах шифрование блока зависит от шифрования предыдуш,его блока Например, представим аппаратное устройство шифрования, работаюш,ее в режиме СВС. Даже если там будут три микросхемы, осуш,еств-ляюш,ие шифрование, только одна сможет работать в данный момент времени. Следуюш,ей микросхеме понадобится результат работы предыдуш,ей. Решение заключается в перемежении нескольких потоков шифрования. Вместо одного потока в режиме СВС можно использовать четыре. Первый, пятый и далее каждый четвертый блоки будут шифроваться на одной микросхеме с одной синхропосылкой. Второй, шестой и далее каждый четвертый блок будут обрабатываться второй микросхемой со второй синхропосылкой и т. д. Таким образом, например, имея три микросхемы, осуш,ествляюш,ие шифрование со скоростью 33 Мбит/с, можно шифровать трафик в канале со скоростью 100 Мбит/с. 2.6. Потоковые шифры 2.6.1. Общие сведения о потоковых шифрах. Потоковые шифры представляют собой разновидность гаммирования и преобразуют открытый текст в шифрованный последовательно по 1 биту. Генератор ключевой последовательности, иногда называемый генератором бегущего ключа, выдает последовательность бит к\, кг, h, ... Эта ключевая последовательность складывается по модулю 2 с последовательностью бит исходного текстар\, рг, Pi, ... для получения шифрованного текста bar: Ci=pi®ki. На приемной стороне шифрованный текст складывается по модулю 2 с идентичной ключевой последовательностью для получения исходного текста: с, е ki = Pi ® ki ® ki = Pi. Стойкость системы целиком зависит от внутренней структуры генератора ключевой последовательности. Если генератор выдает последовательность с небольшим периодом, то стойкость системы будет невелика. Напротив, если генератор будет выдавать бесконечную последовательность истинно случайных (не псевдослучайных!) бит, то мы получим одноразовый блокнот с идеальной стойкостью. Реальная стойкость потоковых шифров лежит где-то посредине между стойкостью простой моноалфавитной подстановки и одноразового блокнота. Генератор ключевой последовательности выдает поток битов, который выглядит случайным, но в действительности является детерминированным и может быть в точности воспроизведен на приемной стороне. Чем больше генерируемый поток похож на случайный, тем больше усилий потребуется от криптоаналитика для взлома шифра Однако, если каждый раз при включении генератор будет выдавать одну и ту же последовательность, то взлом криптосистемы будет тривиальной задачей. Перехватив два шифрованных текста, злоумышленник может сложить их по модулю 2 и получить два исходных текста, сложенных также по модулю 2. Такую систему раскрыть очень просто. Если же в руках противника окажется пара исходный текст - шифрованный текст, задача вообш,е становится тривиальной. По этой причине все потоковые шифры предусматривают использование ключа. Выход генератора ключевой последовательности зависит от этого ключа. В этом случае простой криптоанализ будет невозможен. Потоковые шифры наиболее пригодны для шифрования непрерывных потоков данных, например, в сетях передачи данных. Структуру генератора ключевой последовательности можно представить в виде конечного автомата с памятью, состояш,его из трех блоков: блока памяти, храняш,его информацию о состоянии генератора, выходной функции, генерируюш,ей бит ключевой последовательности в зависимости от состояния, и функции переходов, задаюш,ей новое состояние, в которое перейдет генератор на следуюш,ем шаге. 2.6.2. Самосиихропизирующиеся шифры В 1946 году в США была запатентована базовая идея так называемых самосинхронизирующихся потоковых шифров (или шифрования с автоключом - CipherText Auto Key (CTAK)). Она заключается в том, что внутреннее состояние генератора является функцией фиксированного числа предшествуюш,их битов шифрованного текста. Поскольку внутреннее состояние зависит только от п бит шифрованного текста, генератор на приемной стороне войдет в синхронизм с передаюш,ей стороной после получения п бит. Реализация этого подхода выглядит следуюш,им образом. Каждое сообш,ение предваряется случайным заголовком длиной п бит. Этот заголовок шифруется и передается в линию. На приемной стороне заголовок расшифровывается. Результат расшифрования будет неверным, но после обработки п бит заголовка оба генератора будут синхронизированы. Недостатком системы является распространение ошибок При искажении одного бита генератор на приемной стороне выдаст п неверных бит ключевой последовательности, пока ошибочный бит не будет вытолкнут из памяти, что приведет к ошибочному расшифрованию п бит исходного текста. Кроме того, самосинхронизируюш,иеся шифры уязвимы для атак типа "воспроизведение". Злоумышленник записывает некоторое количество бит шифрованного текста. Затем, позднее, он подменяет биты трафика записанными - "воспроизводит" их. После некоторого количества "мусора", пока приемная сторона не синхронизируется, старый шифрованный текст будет расшифровываться нормально. У приемной стороны нет никаких средств определения того, что принимаемые данные не являются актуальными. Самосинхронизируюш,иеся потоковые шифры могут быть реализованы в виде блочных шифров, используемых в режиме обратной связи по шифрованному тексту (см. 2.5). При этом за один раз может шифроваться произвольное число бит, меньшее либо равное длине блока. Проиллюстрируем это на примере шифрования по одному байту за цикл. Блочный шифр работает над очередью размером, равным длине блока. Первоначально очередь заполняется синхропосылкой. Затем очередь шифруется и левые 8 бит складываются с первыми 8 битами исходного текста. Полученные 8 бит шифрованного текста передаются в линию, очередь сдвигается влево на 8 бит, левые биты отбрасываются, а правые заполняются 8 битами шифрованного текста, переданными в линию. Далее процедура повторяется. Число 8 взято только для примера. За один цикл работы блочного алгоритма может шифроваться и 1 бит, хотя это будет не слишком эффективно с точки зрения скорости работы схемы. В режиме СРВ синхропосылка должна быть уникальна для каждого сообш,ения в течение срока действия ключа. Если это будет не так, злоумышленник сможет восстановить исходный текст. В случае возникновения ошибки в шифрованном тексте на приемной стороне в обш,ем случае возникнут ошибки при рао шифровании текуш,его и последуюш,их \jnln\ блоков, где т -размер блока, п - число бит, шифруемых за 1 цикл, т.е. пока ошибочный бит шифрованного текста не будет вытеснен из памяти. 2.6.3. Синхронные шифры В этом случае выходные значения генератора не зависят от исходного или шифрованного текстов. Такие потоковые шифры носят название синхронных. Основная сложность в данном подходе заключается в необходимости синхронизации генераторов ключа на передаюш,ей и приемной сторонах. Если в процессе передачи произошло выпадение или вставка хотя бы одного бита, то вся последовательность битов шифрованного текста после ошибочного бита не сможет быть расшифрована. Если такое произойдет, стороны должны провести повторную синхронизацию. При этом синхронизация должна быть проведена так, чтобы никакой отрезок ключевой последовательности не повторился, так что очевидное решение возвратиться к некоторому предыдуш,ему состоянию генератора не подходит. Положительным свойством синхронных потоковых шифров является отсутствие эффекта распространения ошибок Один искаженный бит при передаче приведет к искажению только одного бита текста при расшифровании. Синхронные шифры также заш,иш,ают от вставок и выбрасываний отрезков шифрованного текста из потока Такие операции приведут к нарушению синхронизации, что будет сразу же обнаружено на приемной стороне. Однако, такие шифры уязвимы к изменению отдельных бит. Если злоумышленник знает исходный текст, то он сможет изменять биты в потоке шифрованного текста таким образом, что он будет расшифровываться так, как необходимо злоумышленнику. Синхронный потоковый шифр может быть реализован в виде блочного шифра, работаюш,его в режиме обратной связи по выходу (см. 2.5). Подобно описанному в п. 2.6.2 примеру, режим OFB может быть реализован с любым размером обратной связи, меньшим размера блока. Однако, данный способ не рекомендуется, так как при этом снижается период генератора до примерно 2". При длине блока 64 это будет около 2, чего явно недостаточно. В этом случае выходная функция очень часто выбирается простой, например, суммой по модулю 2 нескольких бит состояния или вообш,е одним битом состояния. Криптографическая стойкость обеспечивается функцией перехода к следую-ш,ему состоянию, которая зависит от ключа. Иногда данный режим называют режимом с внутренней обратной связью, поскольку обратная связь является внутренней по отношению к алгоритму генерации ключевой последовательности. Вариантом этого режима является схема, когда ключ задает начальное состояние генератора, после чего последний работает без дальнейшего вмешательства. Еш,е одним способом построения потокового шифра является использование счетчика в качестве входного значения для блочного шифра. После каждого цикла шифрования блока значение счетчика увеличивается, чаш,е всего на единицу. Свойства данного режима в отношении распространения ошибок и синхронизации будут такими же, как и для режима OFB. В качестве счетчика может быть использован любой генератор псевдослучайных чисел, вне зависимости от его криптографической стойкости. При использовании потокового шифра в режиме счетчика выбирается простая функция перехода и сложная, зависяш,ая от ключа функция выхода. Функция перехода может быть простым счетчиком, увеличиваюш,имся на единицу на каждом такте. 2.6.4. Примеры потоковых шифров Алгоритм RC4 RC4 представляет собой потоковый шифр с переменной длиной ключа, разработанный в 1987 г. Роном Ривестом для компании RSA Data Security, Inc. В течение 7 лет этот шифр лицензировался компанией только на условиях неразглашения. Однако, в 1994 г. он был анонимно опубликован в Интернете и с тех пор стал доступен для независимого анализа Описывается шифр очень просто. Алгоритм работает в режиме OFB. Ключевая последовательность не зависит от исходного текста. Структура алгоритма включает блок замены размерностью 8 X 8: -So, S255. Блок замены представляет собой зависимую от ключа переменной длины перестановку чисел О, 255. Имеется два счетчика / и j, первоначально равные 0. Для генерирования псевдослучайного байта выполняются следую-ш,ие действия: / = (/+ l)mod 256 j = {j + 5,) mod 256 переставить Si и Sj t = {Si + Sj)moA25e k = St. Затем байт к складывается по модулю 2 с байтом исходного текста для получения шифрованного. Инициализация блока замены также проста Вначале он заполняется линейно: Sq = Q,S\ = 1,S255 255. Затем заполняется еш,е один 256-байтный массив ключом, при этом ключ может повторяться необходимое число раз для заполнения всего мао сива: Аго, kjss- Счетчик j устанавливается в 0. После чего производятся следуюш,ие действия: for / = О to 255 У = (/ + , + 5,) mod 256 переставить St и Sj. Шифрование по этому алгоритму примерно в 10 раз быстрее, чем шифрование DES при программной реализации. Возможно обобш,ение алгоритма на большие длину слова и размер блока замены. Так, можно построить шифр с боком замены размерностью 16x16 (потребуется 128 Кбайт памяти) и 0 1 2 3 4 5 6 7 [ 8 ] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |