Опубликован: 19.01.2010 | Уровень: специалист | Доступ: платный
Лекция 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 безопасным. Однако, как и для многих других шифров, рекомендуется, чтобы для различных сеансов использовались различные ключи. Это препятствует Еве использовать дифференциальный криптоанализ шифра.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Сергей Христовский
Сергей Христовский
Россия, Омск
Александр Шумаев
Александр Шумаев
Россия