Опубликован: 19.01.2010 | Доступ: свободный | Студентов: 3202 / 440 | Оценка: 4.28 / 4.00 | Длительность: 26:16:00
ISBN: 978-5-9963-0242-0
Специальности: Математик
Лекция 11:

Шифрование, использующее современные шифры с симметричным ключом

11.2. Использование шифров потока

Хотя эти пять режимов работы допускают использование блочных шифров для шифрования сообщений или файлов в больших модулях (ECB, CBC и CTR) и маленьких модулях (OFB и OFB), иногда необходимо передать поток для того, чтобы зашифровать маленькие единицы информации — символы или биты. Шифры потока более эффективны для обработки в реальном масштабе времени. Некоторые шифры потока использовались в различных протоколах в течение прошлых нескольких десятилетий. Мы рассмотрим только два: RC4 и A5/1.

RC4

RC4 — потоковый шифр, который был разработан в 1984 г. Рональдом Ривестом. RC4 используется во многих системах передачи данных и протоколах организации сети, например, SSL/TLS и IEEE 802.11 (беспроводный стандарт LAN).

RC4 — байт-ориентированный шифр потока, в котором байт ( 8 битов) исходного текста складывается (ИСКЛЮЧАЮЩЕЕ ИЛИ) с байтом ключа, чтобы получить байт зашифрованного текста. Ключ засекречивания, из которого сгенерированы однобайтовые ключи в потоке ключей, может содержать от 1 до 256 байтов.

Матрица состояний

RC4 базируется на понятии матрицы состояний. В каждый момент матрица состояний 256 байтов активизируется, из нее случайным образом выбирается один байт, чтобы служить ключом для шифрования Идея может быть показана в виде массива байтов:

S [0] S [l] S [2] ••• S [255]

Заметим, что индексы диапазона элементов — между 0 и 255. Содержание каждого элемента — байт ( 8 битов), который может интерпретироваться как целое число от 0 до 255.

Идея

Рисунок 11.10 показывает идею RC4. Первые два блока выполняются только один раз (инициализация); перестановки для того, чтобы создавать ключ потока, повторяются, пока есть байты исходного текста, предназначенные для шифрования.

 Идея шифра потока RC4

Рис. 11.10. Идея шифра потока RC4

Инициализация. Инициализация делается в два шага.

1. На первом шаге матрица состояний инициализируется для значений 0, 1..., 255. Создается также массив ключей K [0], K [1] ..., K [255]. Если ключ засекречивания имеет точно 256 байтов, байты копируются в массив K ; иначе — байты повторяются, пока не заполнится массив K.

for (i = 0 to 255)                                                                
{
  S[i] <- i
  K[i] <- Key [i mod Key Length] 
}

2. На втором шаге инициализированная матрица проходит перестановку (скрэмблирование элементов), основанную на значении байтов в K[i]. Ключевой байт используется только на этом шаге, чтобы определить, какие элементы должны быть заменены. После этого шага байты матрицы полностью перетасованы.

j <- 0
for (i = 0 to 255)
{
  j <- (1 + S[i] + K[i]) mod 256
  swap (S[i] , S[j])
}

Генерация ключевого потока. Ключи k в ключевом потоке генерируются один другим. Сначала элементы матрицы состояний переставляются на основе значений своих элементов и значений двух индивидуальных переменных i и j. Затем значения двух элементов матрицы состояний в позициях i и j используются, чтобы определить индекс элемента матрицы состояний, который служит как ключ k. Следующий код повторяется для каждого байта исходного текста, чтобы создать новый ключевой элемент в ключевом потоке. Переменные i и j инициализируются в 0 прежде, чем будет проведена первая итерация, но значение копируется от одной итерации к следующей.

i <- (i +1) mod 256
j <- (j +S[i]mod256
swap (S [i] , S[j])
k <- S [(S[i] + S[j]) mod 256]

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

Алгоритм

Алгоритм 11.6 показывает процедуру, написанную на псевдокоде, для RC4.

RC4_Encryption (K)
{
  // Создание начальной матрицы состояний и ключевых байтов
  for (i = 0 to 255)
  {
    S[i] <- i
    K[i] <- Key [i mod Key Length]
  }
 // Перестановка байтов матрицы состояний на основе значений байта ключа
  j <- 0 
  for (i = 0 to 255)
  {
    j <- (j+ S[i] + K[i] mod 256
    замена (S[i] , S[j]) 
    //Непрерывная перестановка байтов, генерация ключей и шифрование 
    i <- 0 
    j <- 0
    while (пока есть байты для шифрования)
    i <- (i + 1) mod 256
    j <- (j +S[i]) mod 256
    swap(S[i],S[j])
    k <- S[(S[i]+S[j])mod256]
   //Ключ готов, шифрование
   input P
   C <- P ⊕ k 
   output C
   }
}
11.6. Алгоритм шифрования для RC4

Пример 11.5

Чтобы показать случайность ключа потока, мы используем ключ засекречивания со всеми нулевыми байтами. Ключевой поток для 20 значений A: (222, 24, 137, 65, 163, 55, 93, 58, 138, 6, 30, 103, 87, 110, 146, 109, 199, 26, 127, 163).

Пример 11.6

Повторим пример 11.5, но пусть ключ засекречивания будет пять байтов (15, 202, 33, 6, 8). Ключевой поток — (248, 184, 102, 54, 212, 237, 186, 133, 51, 238, 108, 106, 103, 214, 39, 242, 30, 34, 144, 49). Снова случайность в ключевом потоке очевидна.

Проблемы безопасности

Известно, что шифр безопасен, если размер ключа — по крайней мере, 128 битов ( 16 байтов). Это подтверждается сообщениями о некоторых атаках для малых размеров ключей (меньше, чем 5 байтов). Протоколы, которые сегодня использует RC4, устанавливают размеры ключей, которые делают RC4 безопасным. Однако, как и для многих других шифров, рекомендуется, чтобы для различных сеансов использовались различные ключи. Это препятствует Еве использовать дифференциальный криптоанализ шифра.

Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Дмитрий Плешаков
Дмитрий Плешаков

Здравствуйте. На данныйц момент я изучаю курс Математика криптографии и теория шифрования. Стоимость обучения на данном курсе указана 1 руб., но, при этом доступ к лекциям указан платный. Не могли бы Вы прояснить данный момент, и, если доступ платный, какова стоимость лекций и общая стоимость курса.

Заранее благодарен.