Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эл-ты_криптологии-лек.doc
Скачиваний:
24
Добавлен:
24.11.2019
Размер:
757.76 Кб
Скачать

2.3.2.3. Режимы функционирования блоковых шифров

Под режимом функционирования блокового шифра понимается порядок шифрования отдельных блоков исходного текста. Мы рассмотрим два применяемых на практике варианта.

Режим ECB (Electronic Code Book – электронная кодовая буква)

В режиме ECB сообщение Х разбивается на блоки: Х = Х1Х2 ... Хt. Каждый блок шифруется блоковым шифром:

Yi = EK(Хi), i = 1,..., t,

в результате получаем шифрованное сообщение Y = Y1Y2 ... Yt.

Дешифрование осуществляется обратным преобразованием Хi = E1K(Yi).

В таком режиме как шифрование, так и дешифрование отдельных блоков может проводиться в любой последовательности.

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

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

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

Режим CBC (Cipher-Block Chaining – сцепление блоков шифра) ['saife]

В режиме CBC зашифрованное сообщение получают по следующему правилу:

Yi = EK(Хi Yi1), i = 1,..., t,

то есть каждый последующий блок открытого текста предварительно "закрывается" предыдущим зашифрованным блоком. Слово Y0 должно быть определено заранее и известно при дешифровании.

Дешифрование ведется по следующей схеме:

Xi = Yi1E1K(Yi), i = 1,..., t,

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

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

2.3.3.1. Общие положения

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

Напомним, что в шифре Вернама в качестве бинарной операции используется , а перевод открытого сообщения x1 x2 xk в шифрованное y1 y2 yk с помощью ключевой последовательности z1 z2 zk осуществляется по алгоритму:

yi = xizi , i = 1, …, k . (2.28)

Соответственно, дешифрование осуществляется по алгоритму:

xi = yizi , i = 1, …, k . (2.29)

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

Действительно, предположим, что один и то же ключ использован для шифрования двух открытых последовательностей u1 u2 uk и w1 w2 wk Тогда соответствующие шифртексты будут иметь вид:

u1z1 , ... , ukzk

и w1z1 , ... , wkzk .

Если сложить оба шифр текста, то учитывая, что zizi = 0, получим последовательность

u1w1 , ... , ukwk .

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

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

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

Это обеспечит более простой режим эксплуатации секретных каналов. Более того, при использовании, так называемых, криптоистем с открытым (несимметричным) ключом (см. след. раздел) указанные ключи можно и вычислять по открыто передаваемым данным.

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

Итак, будем считать, что потоковый шифр задается алгоритмом (2.28), в котором z1 z2 zk – псевдослучайная последовательность.

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

Рассмотрим, например, простейший линейный конгруэнтный генератор

zi+1 = (аzi + b) (mod c), i = 0,1,… .

Хотя для некоторых приложений, например, для простых имитационных моделей он может дать "неплохие" (по статистическим характеристикам) последовательности псевдослучайных чисел, он совершенно не годится для криптографических целей.

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

  • период последовательности должен быть очень большим;

  • порождаемая последовательность должна быть "почти" неотличима от действительно случайной, в частности, вычисление числа zi+1 по известным предыдущим элементам последовательности должно быть трудной, практически нерешаемой задачей.

Линейный конгруэнтный генератор не удовлетворяет второму требованию, так как известны алгоритмы, позволяющие полностью восстановить параметры генератора всего по нескольким элементам порождаемой им последовательности.

Рассмотрим некоторые более совершенные в криптологическом отношении генераторы.