Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Шифрование, использующее современные шифры с симметричным ключом
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. Первые два блока выполняются только один раз (инициализация); перестановки для того, чтобы создавать ключ потока, повторяются, пока есть байты исходного текста, предназначенные для шифрования.
Инициализация. Инициализация делается в два шага.
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 безопасным. Однако, как и для многих других шифров, рекомендуется, чтобы для различных сеансов использовались различные ключи. Это препятствует Еве использовать дифференциальный криптоанализ шифра.