Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга бельфер.docx
Скачиваний:
228
Добавлен:
20.09.2019
Размер:
9.74 Mб
Скачать
    1. Б.3. Поточные шифры

Настоящий раздел посвящён описанию принципа работы поточных шифров.

Простейшей и в то же время самой надёжной схемой симметричного шифрования является так называемая схема однократного использования (рис. Б.8).

Рис. Б.8. Схема однократного использования поточного шифра

Формируется m-разрядная случайная двойная последовательность – ключ шифра, известный отправителю и получателю сообщения. Отправитель производит побитовое сложение по модулю 2 (операция XOR, «исключающее ИЛИ») ключа и m-разрядной двоичной последовательности, соответствующей открытому сообщению P.

,

где Pi, Ki и Ci – очередной i-бит соответственно исходного сообщения, ключа и зашифрованного сообщения, m – число битов открытого сообщения P.

Процесс расшифровки сводится к повторной генерации ключевой последовательности и наложению её на зашифрованные данные. Уравнение расшифровки имеет вид:

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

  • полная случайность ключа;

  • равенство длин ключа и открытого сообщения;

  • однократное использование ключа.

Выполнение этих требований делает такую схему пригодной для массового использования. На эти условия могут согласиться разве что дипломаты, военные и спецслужбы. Таким образом, возникает задача разработки схемы такого теоретически нестойкого шифра, которая использует ключ небольшой разрядности. Этот ключ выполняет функцию «зародыша», порождающего значительно более длинную ключевую последовательность. Такой «зародыш» является входной последовательностью псевдослучайных чисел ПСП (PRNG - pseudo-random number generation). На рис. Б.9 показан такой метод шифрования сообщений, называемый гамма-наложение по модулю 2 открытого текста P на последовательность блоков гаммы шифра γ, полученную с выхода генератора G псевдослучайных последовательностей ПСП.

Рис. Б.9. Шифрование сообщения методом гаммирования

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

Надёжность шифрования методом гаммирования определяется качеством генератора гаммы. Приведённая схема шифрования относится к поточным шифрам (stream cipher). В отличие от блочных, поточные шифры осуществляют поэлементное шифрование потока данных без задержки в криптосистеме. Таким образом, обеспечивается шифрование практически в реальном времени. Приведённая на рис. Б.8 схема относится к синхронным поточным шифрам, при которой отсутствует эффект размножения ошибок, т.е. число искажённых битов в зашифрованной последовательности равно числу искажённых элементов расшифрованной последовательности, пришедшей из канала связи. Нарушение синхронизации приводит к неправильному расшифрованию всех последующих бит. Примером поточного шифрования является алгоритм RC4.

Приведённые выше в разделах Б.2.2.2 и Б.2.2.3 режимы блочного шифрования являются примерами комбинированного шифрования, которое включает блочное и поточное шифрование.

ПРИЛОЖЕНИЕ В. Шифрование с открытым ключом

Основной проблемой использования шифрования с симметричным ключом является проблема распределения ключей. Так как в этом случае шифрование и дешифрование выполняется с помощью одного и того же ключа в сети связи с N абонентами, потребуется число ключей, равное N(N-1)/2. Необходимость наличия недоступных для нарушителя секретных каналов обмена ключами делает практически неприемлемым такой подход для большинства сетей. Эти ключи должны быть сгенерированы и надёжно распределены среди всех участников обмена сообщениями. В настоящем приложении приводится описание шифрования с открытым ключом, одной из функций которого является распределение ключей (управление ключами) симметричного шифрования.

В.1. Принцип шифрования с открытым ключом

Ещё в 40-х годах К.Шеннон предложил строить шифрование таким образом, чтобы задача его вскрытия была эквивалентна решению математической задачи, требующей объёма вычислений недоступного для современных компьютеров. Реализация этой цели стала возможной, когда в 70-х годах Диффи и Хеллман предложили принципиально новый способ без предварительного обмена ключами, так называемое шифрование с открытым ключом. При этом ключ шифрования и ключ дешифрования должны быть различными, причём, знание одного из них не даёт практической возможности определить второй. Предложенные ими алгоритм шифрования E открытого сообщения M и алгоритм его дешифрования D должны удовлетворять следующему требованию: D(E(M))=M, т.е. применив алгоритм дешифрования D к зашифрованному сообщению E(M), мы получаем открытый текст M. Этот метод работает следующим образом.

Некто, например, Алиса (А) желает получить секретное сообщение. Для этого формируются алгоритмы шифрования и дешифрования, удовлетворяющие перечисленному выше требованию. Оба алгоритма и ключ алгоритма шифрования открыто объявляются, отсюда название – шифрование с открытым ключом. Это можно сделать, например, разместив открытый ключ на сайте Алисы. Для обозначения алгоритма шифрования при шифровании открытым ключом А (Алисы) мы будем использовать запись EA. Для обозначения алгоритма дешифрации персональным секретным личным ключом Алисы мы будем использовать запись DA.

Аналогично абонент В (Боб) делает то же самое, открыто объявляя EB, но храня в тайне DB. Рассмотрим установку надёжного секретного канала между абонентами A и B, которые никогда ранее не встречались. Отметим, что все пользователи сети могут опубликовать свои открытые ключи. Абонент A (отправитель) зашифровывает открытым ключом абонента B (получателя) своё сообщение М, т.е. вычисляет EB(M) и посылает его абоненту В. Абонент B расшифровывает его с помощью своего секретного личного ключа DB, т.е. вычисляет M=DB(EB(M)). Это показано на рис. В.1, а). Кроме абонента B никто не может прочитать это зашифрованное сообщение C=EB(M) так, как получить ключ DB на основании известного открытого ключа EB практически невозможно. На рис. В.1, б) показана передача зашифрованного сообщения M1 в обратном направлении. С1=EA(M1), т.е. открытым ключом абонента А. Это сообщение абонента В будет расшифровано закрытым личным ключом А, т.е. M1=DA(EB(M1)). Таким образом, А и В получают надёжный секретный канал связи.

Рис. В.1. Схема шифрования/дешифрования сообщений открытым/закрытым ключом

Обратим внимание на используемую терминологию ключей. Шифрование с открытым ключом предполагает у каждого пользователя наличие двух ключей – открытого ключа, используемого всеми для шифрования сообщений, посылаемых этому пользователю, и закрытого личного ключа, необходимого пользователю для дешифрации приходящих к нему сообщений. Эти ключи мы будем и далее называть открытым и закрытым (личным), чтобы отличить их от секретных ключей, используемых для шифрования и дешифрации в традиционной криптографии с симметричным ключом. Эти ключи мы будем называть общими ключами. Односторонняя функция – это функция, которая легко выполняется в одном направлении (легко выполняет прямую операцию), но для которой очень трудно выполнить обратную операцию. Примером двухсторонней функции является возведение в степень, ведь легко вычислить 238 и также легко вычислить =2..

Криптосистемы с открытым ключом используют односторонние функции, применяя при этом модульную арифметику. В таблице В.1 приведено сравнение значений для x = 1,2,3,4,5,6 обычной арифметики (вычисление 3x) и модульной арифметики (вычисление функции 3x по модулю 7). Значение в таблице 3xmod7 = 1 при значении x = 6 означает остаток 1 от деления 36 на 7. Обычная запись в модульной арифметике будет выглядеть, как 36 = 1mod7.

Таблица В.1. Сравнение обычной арифметики и модульной арифметики

x

1

2

3

4

5

6

3x

3

9

27

81

243

729

3xmod(7)

3

2

6

4

5

1

Как видно из таблицы В.1, легко вычислить для функции vx = ymod(z), где v = 3, z = 7, прямую операцию (т.е. определить остаток y при разных x), так и обратную операцию (т.е. определить x при известном y). Это имеет место для малых значений параметров v,x,y,z. Прямую операцию при больших значениях v и z также легко определить y при разных x (например для функции y = 543xmod(21997) ). Однако, обратную операцию (например, вычислить x при заданном y = 5787, т.е. 543x = 5787mod21997) выполнить невозможно, даже используя сверхбыстрые современные ЭВМ.

Существует много систем шифрования с открытым ключом, наиболее известные из которых – криптосистема RSA и криптосистема Эль-Гамаля. Применение шифрования с открытым ключом позволяет:

  1. избавиться от необходимости секретных каналов связи для предварительного обмена ключами;

  2. свести проблему взлома шифра к решению трудной математической задачи, т.е. в конечном счёте принципиально по-другому подойти к обоснованию стойкости криптосистемы;

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