2.23.3 Подстановочные шифры

реклама
2.23
2.23.1 Шифрование данных
Шифрование – процесс преобразования порции информации в непонятный вид. Исходную
информацию называют открытым текстом (plaintext), а результат преобразования –
зашифрованным текстом (ciphertext) или криптограммой. Обратный процесс
преобразования зашифрованного текста в открытый называется расшифровкой. Алгоритмы
шифрования и расшифровки параметризуются с помощью криптографических ключей.
Алгоритмы шифрования и расшифровки, а так же описание формата сообщений и ключей
образуют криптосистему.
2.23.2 Перестановочные шифры
Преобразуют сообщение, переставляя его элементы, но не изменяя их. Пусть все элементы
исходного сообщения являются буквами алфавита Z26, b – фиксированное положительное
целое число, представляющее собой размер блока сообщения, P = C = (Z26)b и K – множество
всевозможных перестановок чисел (1, 2, ..., b).
В этом случае перестановка π = (π(1), π(2), ..., π(b)) – ключ, поскольку π ∈ K . Для блока
исходного сообщения x 1, x 2, ... , x b ∈ P алгоритм шифрования с помощью перестановочного
шифра выглядит следующим образом: e π x 1, x 2, ... , x b = x π 1 , x π 2 ,... , x π b
Обозначим через π-1 оборажение, обратное к отображению π, т.е. π-1(π(i)) = i при i = 1, 2, ...,
b. Тогда соответствующий алгоритм расшифровки с помощью подстановочного шифра
имеет вид
d π= y 1, y 2, ... , y b = y π 1 , y π 2 ,... , y π b
−1
−1
−1
Если длина сообщения больше, чем размер блока b, сообщение разбивается на несколько
блоков, к которым применяется одна и та же процедура.
2.23.3 Подстановочные шифры
В подстановочном шифре алгоритм шифрования представляет собой функцию подстановки,
которая заменяет каждое сообщение m∈ M соответствующим текстом c ∈C . Функция
подстановки зависит от секретного ключа k. Алгоритм дешифровки представляет собой
обратную подстановку.
Простой подстановочный шифр – замена одинаковых букв исходного сообщения
одинаковыми буквами. Подвержен частотному анализу, использующему тот факт, что
естественные языки чрезвычайно избыточны.
Частный случай – сдвиговый шифр – Ek(m) = m + k(mod N), Dk(c) = c – k(mod N), где N =
#M. Пример – шифр Цезаря – при k = 3.
Подстановочный шифр называется полиалфавитным, если если элемент исходного
сообщения в пространстве P можно заменить несколькими элементами пространства
зашифрованных сообщений C.
Пример – шифр Виженера – выполняем сложение по модулю с очередной буквой ключа.
2.23.4 Блочные шифры
Блочный шифр предназначен для шифрования сообщений, разбитых на блоки
фиксированной длины. Каждый блок рассматривается как отдельное сообщение,
принадлежащее пространству M или C.
Примеры – DES (M=C={0, 1}64, K={0, 1}56), AES (Rijndael)
Работа блочного шифра в самом простом режиме — применения шифрующей функции к
блоку данных (простая замена) вызывает серьезную проблему: статистические свойства
открытых данных частично сохраняются, так как каждому одинаковому блоку данных
однозначно соответствует зашифрованный блок данных. При большом количестве данных
(видео, звук) это может дать некоторые сведения для криптоанализа о содержании данных.
Удаление статистических зависимостей в открытом тексте возможно с помощью
предварительного архивирования, но оно не решает задачу полностью, так как в файле
остается служебная информация архиватора, и не всегда технически допустимо.
Существует несколько стандартных методик модификации блочных шифров так, чтобы
результат шифрования каждого блока был уникален вне зависимости от шифруемых данных.
Electronic Code Book (ECB)
Сообщение делится на блоки. Каждый блок шифруется отдельно. Расшифровка по той же
схеме. Недостатки:

идентичные блоки открытого текста шифруются в идентичные блоки
зашифрованного текста. Таким образом, это не может скрыть образцы данных
хорошо. Этот метод не рекомендуется к использованию в криптографических
протоколах.
Cipher Block Chaining (CBC)
Для сцепления используется механизм обратной связи, поскольку результат шифрации
предыдущих блоков используется для шифрации текущего блока. Таким образом любой
блок шифра зависит не только от исходного текста, но и от всех предыдущих блоков текста.
В Cipher Block Chaining (CBC) текст XOR’ится с предыдущим шифр. блоком перед
шифрацией. Дешифрация проводится аналогично. Математическая запись:
Ci = Ek (Pi XOR Ci-1)
Pi = Ci-1 XOR Dk(Ci)
При этом в начале кодирования используется вектор инициализации для того, чтобы любое
сообщение было по - настоящему уникальным (иначе будут трудности со стандартным
заголовком). Вектор инициализации должен быть случайным числом. Его не обязательно
хранить в секрете, можно передавать его вместе с сообщением. Большинство сообщений не
делятся нацело на 64-битные блоки, обычно остается короткий блок в конце. Можно поразному бороться с этим. Простейший метод – padding (дополнение до полного блока). Если
надо потом убирать мусор, то достаточно просто последним байтом обозначить количество
лишних байтов. Можно также обозначать последний байт текста символом конца файла. Это
не всегда можно сделать (напр., если надо расшифровать блок и поставить его куда - нибудь
в память). Тогда применяется следующая схема шифрования: предположим, в последнем
блоке j бит. После зашифровки последнего целого блока, зашифруем шифрованный блок еще
раз, выберем j начальных битов полученного текста и по XOR’им с исходным текстом. Это и
есть шифр для неполного блока.
Cipher Feedback (CFB)
Режим (CFB) обратной связи шифра, близкий родственник CBC, превращает блочный шифр
в самосинхронизирующийся шифр потока. Операция очень похожа на предыдущую; в
частности расшифровка CFB почти идентична расшифровке CBC, выполненной наоборот:
C0 = IV
где IV - вектор инициализации
Как режим CBC, изменения в открытом тексте распространяется повсюду в зашифрованном
тексте, и в кодировании нельзя найти что-либо подобное. Также как и в CBC, в расшифровке
можно найти что-либо подобное. Расшифровывая, однобитовое изменение в зашифрованном
тексте затрагивает два блока открытого текста: однобитовое изменение в соответствующем
блоке открытого текста, и полном искажении следующего блока открытого текста. Более
поздние блоки открытого текста будут расшифрованы как обычно.
Поскольку каждая стадия режима CFB зависит от зашифрованного значения предыдущего
зашифрованного текста операцией сложения с текущим значением открытого текста, форма
конвейерной обработки возможна, начиная с единственного шага кодирования, который
требует, чтобы открытый текст был конечный операцией XOR. Это полезно для приложений,
которые требуют малого времени ожидания между прибытием открытого текста и вывода
соответствующего зашифрованного текста, типа определенных приложений потоковых
мультимедиа.
CFB совместно использует два преимущества перед режимом CBC с режимами OFB шифра
потока и CTR: блочный шифр только когда-либо используется в направлении шифровки, и
сообщение не должно быть дополнено к кратному числу размера блока шифра.
Output Feedback (OFB)
Режим (OFB) обратной связи вывода превращает блочный шифр в синхронный шифрпотока:
это генерирует ключевые блоки, которые являются результатом сложения с блоками
открытого текста, чтобы получить зашифрованный текст. Так же, как с другими шифрами
потока, зеркальное отражение в зашифрованном тексте производит зеркально отраженный
бит в открытом тексте в том же самом местоположении. Это свойство позволяет многим
кодам с исправлением ошибок функционировать как обычно, даже когда исправление
ошибок применено перед кодированием.
Из-за симметрии операции сложения, кодирование и расшифровка похожи:
Oi = Ek(Oi − 1)
O0 = IV
Каждая операция блочного шифра обратной связи вывода зависит от всех предыдущих, и так
не может быть выполнена параллельно. Однако, потому что открытый текст или
зашифрованный текст используются только для конечного сложения, операции блочного
шифра могут быть выполнены заранее, позволяя выполнить заключительное шифрование
параллельно с открытым текстом.
2.23.5 Потоковые шифры
Поточный шифр — это симметричный шифр, в котором каждый символ открытого текста
преобразуется в символ шифрованного текста в зависимости не только от используемого
ключа, но и от его расположения в потоке открытого текста. Поточный шифр реализует
другой подход к симметричному шифрованию, нежели блочные шифры. При блочном
шифровании открытый текст разбивается на блоки равной длины, при этом совпадающие
блоки при данном ключе всегда шифруется одинаково, при поточном шифровании это не
так.
Пример – RC4
Ядро алгоритма состоит из функции генерации ключевого потока. Эта функция генерирует
последовательность битов, которая затем объединяется с открытым текстом посредством
суммирования по модулю два. Дешифрация состоит из регенерации этого ключевого потока
и суммирования его с шифрограммой по модулю два, восстанавливая исходный текст.
Другая главная часть алгоритма — функция инициализации, которая использует ключ
переменной длины для создания начального состояния генератора ключевого потока.
RC4 — фактически класс алгоритмов, определяемых размером его блока. Этот параметр n
является размером слова для алгоритма. Обычно, n = 8, но в целях анализа можно уменьшить
его. Однако для повышения безопасности необходимо увеличить эту величину. Внутреннее
состояние RC4 состоит из массива размером 2n слов и двух счетчиков, каждый размером в
одно слово. Массив известен как S-бокс, и далее будет обозначаться как S. Он всегда
содержит перестановку 2n возможных значений слова. Два счетчика обозначены через i и j.
Алгоритм инициализации RC4 приведен ниже. Этот алгоритм использует ключ,
сохраненный в Key, и имеющий длину l байт. Инициализация начинается с заполнения
массива S, далее этот массив перемешивается путем перестановок определяемых ключом.
Так как только одно действие выполняется над S, то должно выполняться утверждение, что S
всегда содержит все значения кодового слова.
Начальное заполнение массива:
for i = 0 to 2n − 1
S[i] = i
Скремблирование:
j = 0
for i = 0 to 2n − 1
j = (j + S[i] + Key[i mod l]) mod 2n
Перестановка (S[i], S[j])
Генератор ключевого потока RC4 переставляет значения, хранящиеся в S, и каждый раз
выбирает различное значение из S в качестве результата. В одном цикле RC4 определяется
одно n-битное слово K из ключевого потока, которое в последующем суммируется с
исходным текстом для получения зашифрованного текста.
Инициализация:
i = 0
j = 0
Цикл генерации:
i = (i + 1) mod 2n
j = (j + S[i]) mod 2n
Перестановка (S[i], S[j])
Результат: K = S[(S[i] + S[j]) mod 2n]
2.23.6 Абсолютно стойкие шифры

Ключ генерируется для каждого сообщения

Каждый ключ используется один раз

Ключ статистически надежен (то есть вероятности появления каждого из возможных
символов равны)

Длина ключа равна или больше длины сообщения

Открытый текст обладает некоторой избыточностью (является критерием оценки
правильности расшифрования)

Стойкость не зависит от того, какими вычислительными возможностями обладает
криптоаналитик

Практическое применение систем, удовлетворяющих требованиям абсолютной
стойкости, ограничено соображениями стоимости и удобства
Пример:
Типичным и наиболее простым примером реализации абсолютно стойкого шифра является
шифр Вернама, который осуществляет побитовое сложение -битового открытого текста и
-битового ключа:
Здесь
- открытый текст,
- ключ,
- шифрованный текст.
Подчеркнем, что для абсолютной стойкости существенным является каждое из следующих
требований к ленте однократного использования:
1) полная случайность (равновероятность) ключа (это, в частности, означает, что ключ
нельзя вырабатывать с помощью какого-либо детерминированного устройства);
2) равенство длины ключа и длины открытого текста;
3) однократность использования ключа.
В случае нарушения хотя бы одного из этих условий шифр перестает быть абсолютно
стойким и появляются принципиальные возможности для его вскрытия (хотя они могут быть
трудно реализуемыми).
Некоторыми аналитиками утверждается, что Шифр Вернама является единственным
шифром, который удовлетворяет этому условию.
2.23.7 Шифрование с закрытым ключом
В криптосистемах с секретным ключом шифрование и расшифровка выполняются с
помощью одного и того же ключа. Отправитель, шифрующий сообщение, должен передать
ключ расшифровки адресату, получающему и расшифровывающему зашифрованное
сообщение. Благодаря условию ke = kd криптосистемы с секретным ключом получили
название «симметричные криптосистемы».
Скачать