Первая задача, с которой мы столкнемся при
шифровании данных криптоалгоритмом это данные
с длиной, неравной длине 1 блока криптоалгоритма.
Эта ситуация будет иметь место практически
всегда.
Первый вопрос:
Что можно сделать, если мы хотим зашифровать 24
байта текста, если используется криптоалгоритм с
длиной блока 8 байт?
Последовательно зашифровать три раза по 8 байт
и сложить их в выходной файл так, как они лежали в
исходном.
А если данных много и некоторые блоки по 8 байт
повторяются, это значит, что в выходном файле эти
же блоки будут зашифрованы одинаково — это очень
плохо.
Второй вопрос :
А что если данных не 24, а 21 байт.
Не шифровать последние 5 байт или чем-то
заполнять еще 3 байта, а потом при дешифровании
их выкидывать.
Первый вариант вообще никуда не годится, а
второй применяется, но чем заполнять ?
Для решения этих проблем и были введены в
криптосистемы алгоритмы создания цепочек (англ.
chaining modes). Самый простой метод мы уже в принципе
описали. Это метод ECB (Electronic Code Book). Шифруемый файл
временно разделяется на блоки, равные блокам
алгоритма, каждый из них шифруется независимо, а
затем из зашифрованных пакетов данных
компонуется в той же последовательности файл,
который отныне надежно защищен
криптоалгоритмом. Название алгоритм получил
из-за того, что в силу своей простоты он широко
применялся в простых портативных устройствах
для шифрования электронных шифрокнижках.
Схема данного метода приведена на рис.1.
Рис.1.
В том случае, когда длина пересылаемого пакета
информации не кратна длине блока
криптоалгоритма возможно расширение последнего
(неполного) блока байт до требуемой длины либо с
помощью генератора псевдослучайных чисел, что не
всегда безопасно в отношении криптостойкости,
либо с помощью хеш-суммы передаваемого текста.
Второй вариант более предпочтителен, так как
хеш-сумма обладает лучшими статистическими
показателями, а ее априорная известность
стороннему лицу равносильна знанию им всего
передаваемого текста.
Указанным выше недостатком этой схемы является
то, что при повторе в исходном тексте одинаковых
символов в течение более, чем 2*N байт (где N
размер блока криптоалгоритма), в выходном файле
будут присутствовать одинаковые зашифрованные
блоки. Поэтому, для более "мощной" защиты
больших пакетов информации с помощью блочных
шифров применяются несколько обратимых схем
"создания цепочек". Все они почти
равнозначны по криптостойкости, каждая имеет
некоторые преимущества и недостатки, зависящие
от вида исходного текста.
Все схемы создания цепочек основаны на идее
зависимости результирующего зашифровываемого
блока от предыдущих, либо от позиции его в
исходном файле. Это достигается с помощью блока
"памяти" пакета информации длины, равной
длине блока алгоритма. Блок памяти (к нему
применяют термин IV англ. Initial Vector) вычисляется
по определенному принципу из всех прошедших
шифрование блоков, а затем накладывается с
помощью какой-либо обратимой функции (обычно XOR)
на обрабатываемый текст на одной из стадий
шифрования. В процессе раскодирования на
приемной стороне операция создания IV
повторяется на основе принятого и
расшифрованного текста, вследствие чего
алгоритмы создания цепочек полностью обратимы.
Два наиболее распространенных алгоритма
создания цепочек CBC и CFB. Их структура приведена
на рис.2 и рис.3. Метод CBC получил название от
английской аббревиатуры Cipher Block Chaining
объединение в цепочку блоков шифра, а метод CFB
от Cipher FeedBack обратная связь по шифроблоку.
Рис.2.
Рис.3.
Еще один метод OFB (англ. Output FeedBack обратная
связь по выходу) имеет несколько иную структуру
(она изображена на рис.4.) : в нем значение
накладываемое на шифруемый блок не зависит от
предыдущих блоков, а только от позиции
шифруемого блока (в этом смысле он полностью
соответствует скремблерам), и из-за этого он не
распространяет помехи на последующие блоки.
Очевидно, что все алгоритмы создания цепочек
однозначно восстановимы. Практические алгоритмы
создания и декодирования цепочек будут
разработаны на практическом занятии.
Рис.4.
Сравним характеристики методов создания
цепочек в виде таблицы.
Метод | Шифрование блока зависит от | Искажение одного бита при передаче | Кодируется ли некратное блоку число байт без дополнения? |
На выход криптосистемы поступает |
---|---|---|---|---|
ECB | текущего блока | портит весь текущий блок | нет | выход криптоалгоритма |
CBC | всех предыдущих блоков | портит весь текущий блок и один бит в следующем блоке | нет | выход криптоалгоритма |
CFB | всех предыдущих блоков | портит один бит текущего блока и полностью один последующий блок |
да | XOR маска с исходным текстом |
OFB | позиции блока в файле | портит только один бит текущего блока | да | XOR маска с исходным текстом |