Криптография (блочный шифр) - OXFORDST.RU

Криптография (блочный шифр)

Блочный шифр

Основная схема блочного шифра изображается следующим образом:

Блочный шифр принимает блок битов открытого текста и генерирует блок битов шифрованного текста, как правило, того же размера. Размер блока фиксируется в данной схеме. Выбор размера блока напрямую не влияет на надежность схемы шифрования. Сила шифра зависит от длины ключа.

Размер блока

Хотя любой размер блока является приемлемым, при выборе размера блока необходимо учитывать следующие аспекты.

Избегайте очень маленького размера блока — скажем, размер блока составляет m бит. Тогда возможные комбинации битов открытого текста равны 2 м . Если злоумышленник обнаруживает блоки простого текста, соответствующие некоторым ранее отправленным блокам зашифрованного текста, то злоумышленник может запустить тип «словарной атаки», создав словарь пар открытого текста / зашифрованного текста, отправленных с использованием этого ключа шифрования. Больший размер блока усложняет атаку, так как словарь должен быть больше.

Не иметь очень большой размер блока — при очень большом размере блока шифр становится неэффективным для работы. Такие открытые тексты должны быть дополнены перед шифрованием.

Мультипликаторы 8 бит . Предпочтительный размер блока кратен 8, поскольку его легко реализовать, поскольку большинство процессоров компьютера обрабатывают данные в виде 8 бит.

Избегайте очень маленького размера блока — скажем, размер блока составляет m бит. Тогда возможные комбинации битов открытого текста равны 2 м . Если злоумышленник обнаруживает блоки простого текста, соответствующие некоторым ранее отправленным блокам зашифрованного текста, то злоумышленник может запустить тип «словарной атаки», создав словарь пар открытого текста / зашифрованного текста, отправленных с использованием этого ключа шифрования. Больший размер блока усложняет атаку, так как словарь должен быть больше.

Не иметь очень большой размер блока — при очень большом размере блока шифр становится неэффективным для работы. Такие открытые тексты должны быть дополнены перед шифрованием.

Мультипликаторы 8 бит . Предпочтительный размер блока кратен 8, поскольку его легко реализовать, поскольку большинство процессоров компьютера обрабатывают данные в виде 8 бит.

Заполнение в блочном шифре

Блочные шифры обрабатывают блоки фиксированных размеров (скажем, 64 бита). Длина открытых текстов в основном не кратна размеру блока. Например, 150-битный открытый текст предоставляет два блока по 64 бита каждый с третьим блоком баланса 22 бита. Последний блок битов должен быть дополнен избыточной информацией, чтобы длина конечного блока была равна размеру блока схемы. В нашем примере оставшиеся 22 бита должны иметь дополнительные 42 избыточных бита, добавленных для обеспечения полного блока. Процесс добавления битов в последний блок называется заполнением .

Слишком большое заполнение делает систему неэффективной. Кроме того, заполнение может иногда сделать систему небезопасной, если заполнение всегда выполняется с одинаковыми битами.

Схемы блочного шифра

Существует огромное количество схем блочных шифров, которые используются. Многие из них общеизвестны. Самые популярные и известные блочные шифры перечислены ниже.

Стандарт цифрового шифрования (DES) — популярный блочный шифр 1990-х годов. Теперь он считается «битым» блочным шифром, в основном из-за его небольшого размера ключа.

Triple DES — это вариант схемы, основанной на повторных приложениях DES. Это все еще уважаемые блочные шифры, но неэффективные по сравнению с новыми более быстрыми доступными блочными шифрами.

Advanced Encryption Standard (AES) — это относительно новый блочный шифр, основанный на алгоритме шифрования Rijndael, который выиграл конкурс дизайна AES.

IDEA — это достаточно сильный блочный шифр с размером блока 64 и размером ключа 128 бит. В ряде приложений используется шифрование IDEA, включая ранние версии протокола Pretty Good Privacy (PGP). Использование схемы IDEA имеет ограниченное применение из-за проблем с патентами.

Twofish — эта схема блочного шифра использует размер блока 128 бит и ключ переменной длины. Это был один из финалистов AES. Он основан на более раннем блочном шифре Blowfish с размером блока 64 бита.

Serpent — блочный шифр с размером блока 128 бит и длиной ключа 128, 192 или 256 бит, который также был финалистом конкурса AES. Это медленнее, но имеет более безопасный дизайн, чем другие блочные шифры.

Стандарт цифрового шифрования (DES) — популярный блочный шифр 1990-х годов. Теперь он считается «битым» блочным шифром, в основном из-за его небольшого размера ключа.

Triple DES — это вариант схемы, основанной на повторных приложениях DES. Это все еще уважаемые блочные шифры, но неэффективные по сравнению с новыми более быстрыми доступными блочными шифрами.

Advanced Encryption Standard (AES) — это относительно новый блочный шифр, основанный на алгоритме шифрования Rijndael, который выиграл конкурс дизайна AES.

IDEA — это достаточно сильный блочный шифр с размером блока 64 и размером ключа 128 бит. В ряде приложений используется шифрование IDEA, включая ранние версии протокола Pretty Good Privacy (PGP). Использование схемы IDEA имеет ограниченное применение из-за проблем с патентами.

Twofish — эта схема блочного шифра использует размер блока 128 бит и ключ переменной длины. Это был один из финалистов AES. Он основан на более раннем блочном шифре Blowfish с размером блока 64 бита.

Serpent — блочный шифр с размером блока 128 бит и длиной ключа 128, 192 или 256 бит, который также был финалистом конкурса AES. Это медленнее, но имеет более безопасный дизайн, чем другие блочные шифры.

В следующих разделах мы сначала обсудим модель блочного шифра, а затем DES и AES, два наиболее влиятельных современных блочных шифра.

Введение в основы современных шифров с симметричным ключом

Компоненты современного блочного шифра

Современные блочные шифры обычно являются ключевыми шифрами подстановки, в которых ключ позволяет только частичные отображения возможных входов информации в возможные выходы. Однако эти шифры обычно не проектируются как единый модуль. Чтобы обеспечивать требуемые свойства современного блочного шифра , такие как рассеяние и перемешивание информации (обсуждается кратко), этот шифр формируется как комбинация модулей транспозиции (называемых P -блоками), модулей подстановки (называемых S -блоками) и некоторыми другими модулями (обсуждается кратко).

P -блок (блок перестановки) подобен традиционному шифру транспозиции символов. Он перемещает биты. В современных блочных шифрах мы можем найти три типа P -блоков: прямые P -блоки, P -блоки расширения и P -блоки сжатия, что и показано на рис. 7.4.

Рисунок 7.4 показывает прямой P -блок , P -блок сжатия и P -блок расширения . Рассмотрим каждый из них более подробно.

Прямые P-блоки.Прямой P -блок с n входами и n выходами – это перестановка с n ! возможными отображениями.

Рисунок 7.5 показывает все 6 возможных отображений P -блока .

Хотя P -блок может использовать ключ, чтобы определить одно из n ! отображений, обычно P -блоки – без применения ключа, то есть отображение задано заранее. Если P -блок задан заранее и замонтирован в аппаратных средствах или если он реализован в программном обеспечении, таблицы перестановок задают правило отображения. Во втором случае входы в таблице указывают в позиции, в которых указаны позиции выходов. Таблица 7.1 дает пример таблицы перестановок, когда n равно 64 .

Таблица 7.1. Пример таблицы перестановки для прямого P-блока
58 50 42 34 26 18 10 02 60 52 44 36 28 20 12 04
62 54 46 38 30 22 14 06 64 56 48 40 32 24 16 08
57 49 41 33 25 17 09 01 59 51 43 35 27 19 11 03
61 53 45 37 29 21 13 05 63 55 47 39 31 23 15 07

Таблица 7.1 имеет 64 табличных входа, которые фиксируют соответствие 64 информационным входам. Позиция (индекс) входа соответствует выходу. Например, первый табличный вход содержит номер 58 . Это означает, что первый выход будет соответствовать 58 -му входу. Поскольку последний табличный вход — 7 , это означает, что, 64 -й выход будет соответствовать седьмому информационному входу, и так далее.

Составьте таблицу перестановки для прямого P -блока 8 x 8 , которая перемещает два средних бита (биты 4 и 5 ) во входном слове к двум крайним битам (биты 1 и 8 ) выходного слова. Относительные позиции других битов не изменяются.

Нам надо создать прямой P -блок с таблицей [4 1 2 3 6 7 8 5] . Относительные позиции бит 1, 2, 3, 6, 7 и 8 не меняются, но первый информационный выход связан с четвертым информационным входом, восьмой информационный выход — с пятым информационным входом.

P-блоки сжатия. P -блок сжатия – это P -блок с n входами и m выходами, где m . Некоторые из информационных входов блокированы и не связаны с выходом (см. рисунок 7.4). P -блоки сжатия, используемые в современных блочных шифрах , обычно являются безключевыми с таблицей перестановки, которая указывает правила перестановки бит. Нам надо учитывать, что таблица перестановок для P -блока сжатия имеет m табличных входов, но в содержании каждого табличного входа – от 1 до n , и некоторые из них могут отсутствовать (те информационные входы, которые блокированы). Таблица 7.2 показывает пример таблицы перестановки для P -блока сжатия . Обратите внимание, что входы 7, 8, 9, 16, 23, 24 и 25 блокированы.

Читайте также  Обломовщина в современном мире
Таблица 7.2. Пример таблицы перестановки 32х24
01 02 03 21 22 26 27 28 29 13 14 17
18 19 20 04 05 06 10 11 12 30 31 32

P -блоки сжатия используются, когда мы должны переставить биты и в то же время уменьшить число битов для следующей ступени.

P-блок расширения — P -блок с n входами и m выходами, где m> n . Некоторые из входов связаны больше чем с одним выходом (см. рис. 7.4). P -блоки расширения, используемые в современных блочных шифрах , обычно без ключа. Правила перестановки бит указываются в таблице. Таблица перестановки для P -блока расширения имеет m табличных входов, но m – n входов (те входы, которые связаны больше чем с одним информационным выходом). Таблица 7.3 показывает пример таблицы перестановки для P -блока расширения 12 16 . Обратите внимание, что каждый из 1, 3, 9 и 12 соединен с двумя выходами.

Таблица 7.3. Пример таблиц перестановки 12х16
01 09 10 11 12 01 02 03 03 04 05 06 07 08 09 12

P -блоки расширения используются, когда мы должны переставить биты и то же время увеличить число битов для следующего каскада шифрования.

Обратимость.Прямой P -блок является обратимым. Это означает, что мы можем использовать прямой P -битовый шифр и дешифровать его. Таблицы перестановки, однако, должны быть обратимыми по отношению друг к другу. В лекциях 5-6 мы видели, как можно получить обратную таблицу перестановки.

Рисунок 7.6 показывает, как изменить таблицу перестановки в случае одномерной таблицы.

P -блоки сжатия и расширения необратимы . В P -блоках сжатия вход может быть отброшен в процессе шифрования; алгоритм дешифрования не имеет ключа, чтобы восстановить отброшенный бит. В P -блоке расширения вход в процессе шифрования может быть отображен более чем в один выход; алгоритм дешифрования не имеет ключа и не определяет тем самым, какие из нескольких входов отображены в данном выходе. Рисунок 7.7 демонстрирует оба случая.

Рисунок 7.7 также показывает, что P -блок сжатия не является обратным шифром P -блока расширения и наоборот. Это означает, что если мы используем P -блок сжатия для шифрования, мы не сможем использовать P -блок расширения для дешифрования и наоборот. Однако, как будет показано позже в этой лекции, есть шифры, которые применяют P -блоки сжатия или расширения для шифрования; но их эффективность хуже, чем у некоторых других способов.

S-блоки

S-блок (блок подстановки) можно представить себе как миниатюрный шифр подстановки. Этот блок может иметь различное число входов и выходов. Другими словами, вход к S -блоку может быть n -битовым словом, а выход может быть m разрядным словом, где m и n — не обязательно одинаковые числа. Хотя S -блок может быть ключевым или без ключа, современные блочные шифры обычно используют S -блоки без ключей, где отображение от информационных входов к информационным выходам заранее определено.

Линейный и нелинейный S-блоки. В S -блоке с n входами и m выходами мы обозначим входы x, x1,…., xn и выходы y1 . ym . Соотношения между входами и выходами могут быть представлены как система уравнений

Блочное симметричное шифрование

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ВОЛЖСКИЙ ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ (филиал) ВОЛГОГРАД­СКОГО ГОСУДАРСТВЕННОГО ТЕХНИЧЕСКОГО УНИВЕРСИТЕТА

КАФЕДРА «ИНФОРМАТИКА И ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ»

Блочное симметричное шифрование

Методические указания к лабораторным работам по

курсу «Методы и средства защиты компьютерной информации»

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ: Блочное симметричное шифрование / Сост. , ; Волгоград. гос. техн. ун-т. — Волгоград, 2008,. – 24 с.

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

Предназначены для студентов, обучающихся по направлению 5528 «Инфор­матика и вычислительная техника» и специальности 2201 «Вычислитель­ные машины, комплексы, системы и сети» всех форм обучения в рамках курса «Методы и средства защиты компьютерной информации»

Ил. 6. Табл. 6. Библиогр.: 5 назв.

Рецензент: к. т.н., доцент каф. ВАЭ и ВТ ВПИ (филиал) ВолгГТУ

Печатается по решению редакционно-издательского совета Волгоград­ского государственного технического университета

технический университет, 2008

Лабораторная работа N 2

Блочное симметричное шифрование

Цель работы: изучение структуры и основных принципов работы современных алгоритмов блочного симметричного шифрования, приобретение навыков программной реализации блочных симметричных шифров.

Основные сведения

Блочное симметричное шифрование предполагает выполнение криптографического преобразования над блоками открытого текста фиксированного размера (32, 64, 128, 256 бит). Таким образом, блочный шифр можно представить как шифр замены над очень большим алфавитом, который, например, для блока размером 64 бита имеет 264 символов. Любой шифр замены можно представить в виде таблицы соответствия между входными и выходными символами. Однако размер такой таблицы для современных блочных шифров будет настолько велик (требуется 270 бит ЗУ для алгоритма с 64-битным блоком только для одного ключа шифрования), что представление соответствия входных и выходных данных эффективно описывается только алгоритмически.

Обобщенно алгоритм блочного шифрования описывается следующим образом: блок открытого текста X преобразуется в блок шифротекста Y того же размера с использованием некоторого ключа шифрования Key:

Y=Encrypt(X,Key)

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

X=Decrypt(Y,Key)

Преобразования Encrypt и Decrypt трактуют блоки открытого и зашифрованного текста как целые числа и выполняют над ними ряд арифметических либо логических действий, основная задача которых – тщательно «перемешать» биты блока открытого текста между собой, а также связать их с битами используемого ключа шифрования для формирования блока закрытого текста. При этом для блочного шифра несущественен тип преобразуемой информации, он разбивает ее на блоки определенного размера, интерпретирует эти блоки как целые числа в диапазоне [0..2k-1], где k— размер блока, и выполняет над этими числами ряд преобразований в соответствии с алгоритмом метода.

Для выполнения криптографических преобразований в блочных шифрах особую роль играют обратимые операции, поскольку только использование данных операций обеспечивает инъективность (обратимость) всего криптопреобразования [1]. Наиболее часто используемые в современных блочных шифрах обратимые операции приведены в таблице 1.

Таблица 1. Основные обратимые операции

X’=X+V

Сложения по модулю 2

X’=X Å V

Умножение по модулю 2N+1 (N— размер блока)

X’=(X×V) mod (2N+1)

Сомножитель можно найти по алгоритму Евклида

Циклические сдвиги вправо/влево

X’=X ROR V

X’=X ROL V

Циклический сдвиг в обратном направлении

X’=SBox(X)

Особенное внимание в таблице 1 необходимо уделить операциям умножения и табличной подстановки, поскольку они, внося нелинейность в общее криптопреобразование, делают алгоритм более стойким к линейному криптоанализу [2].

Одним из основных принципов структурного построения современных криптоалгоритмов является принцип итерирования. Его идея заключается в многократной, состоящей из нескольких циклов (или раундов), обработке одного блока открытого текста с использованием на каждом цикле специального ключа раунда, вычисляемого на основе ключа шифрования. Количество циклов можно варьировать из соображений криптостойкости и эффективности реализации алгоритма: увеличение количества циклов приводит к повышению стойкости шифра, но увеличивает время шифрации и потребляемые вычислительные ресурсы. Подобные циклические структуры принято называть сетями, и большинство современных блочных шифров построены с использованием сетевой архитектуры.

В качестве примера криптографических сетей можно привести SP-сети, содержащие в каждом раунде два слоя – подстановки (substitution), в котором обычно используются обратимые операции преобразования над шифруемым блоком и материалом ключа, и перестановки (permutation), в котором происходит перестановка бит внутри блока. Однако самой популярной сегодня является сеть Фейштеля, схема которой представлена на рис.1.

При шифровании блок открытого текста разбивается на две равные части — левую и правую. Очевидно, что длина блока при этом должна быть четной. На каждом цикле одна из частей подвергается преобразованию при помощи образующей функции F и вспомогательного ключа раунда ki, полученного из исходного ключа. Результат преобразования складывается по модулю 2 с другой частью, после чего части меняются местами. Преобразования на каждом цикле идентичны и лишь после последнего раунда не выполняется перестановка частей блока.

Читайте также  Идеи развития философии

Достоинством сети Фейштеля является то, что дешифрация выполняется той же последовательностью преобразований, лишь порядок следования вспомогательных ключей меняется на обратный. Это достигается за счет автообратимости операции суммы по модулю 2, смешивающей части блока между собой

. Если размер блока шифрования криптоалгоритма слишком велик, возможны модификации сети Фейштеля с 4 ветвями.

Описание алгоритмов шифрования DES и TEA, построенных на основе сети Фейштеля, можно найти в [2, 5]. Сеть Фейштеля использована как структурная основа таких алгоритмов шифрования, как FEAL, CAST, Blowfish, IDEA, RC5, COST, ГОСТ и многих других. Рассмотрим подробнее некоторые из этих алгоритмов.

Алгоритм IDEA (Intrnational Data Encryption Algorithm) задумывался как замена стандарта шифрования DES и не стал таковым по причине его запатентованности и необходимости лицензирования для коммерческих приложений. Конечная редакция алгоритма была опубликована в 1992 году.

IDEA оперирует 64-битовыми блоками открытого текста. Исходный блок данных разбивается на 4 части – все операции IDEA выполняются в 16-битной арифметике. Затем в каждом из 8-ми раундов над ветвями и материалом ключа выполняются в специально подобранной очередности три операции:

    поразрядное сложение по модулю 2 (операция «исключающее ИЛИ»); операция обозначается как (+); сложение беззнаковых целых по модулю 216; операция обозначается как [+]; умножение беззнаковых целых по модулю (216+1), причем блок из 16 нулей рассматривается как 216; операция обозначается как (·). Если после взятия модуля результат равен 216 , то он заменяется на 0.

Для обеспечения симметричности операций шифрования/дешифрования после восьми раундов над ветвями производится дополнительное преобразование.

Алгоритм использует 128-битный ключ. Создание подключей раунда Z1. Z6 также относительно несложно. Алгоритм использует всего 52 подключа (по шесть для каждого из восьми циклов и еще четыре для преобразования выхода). Сначала 128-битовый ключ делится на восемь 16-битовых подключей. Это — первые восемь подключей для алгоритма (шесть подключей — для первого цикла и первые два подключа — для второго). Затем 128-битовый ключ циклически сдвигается влево на 25 бит и снова делится на восемь подключей (четыре подключа — для второго цикла и четыре подключа — для третьего). Ключ снова циклически сдвигается влево на 25 бит для получения следующих восьми подключей и т. д., пока выполнение алгоритма не завершится.

Дешифрование осуществляется аналогичным образом, за исключением того, что порядок использования подключей становится обратным, причем ряд подключей дешифрования являются или аддитивными, или мультипликативными обратными величинами подключей шифрования (см. таблицу 2).

Таблица 2. Подключи шифрования и дешифрования алгоритма IDEA

Блочный шифр

Блочный шифр — разновидность симметричного шифра. Особенностью блочного шифра является обработка блока нескольких байт за одну итерацию (как правило 8 или 16).Блочные криптосистемы разбивают текст сообщения на отдельные блоки и затем осуществляют преобразование этих блоков с использованием ключа.

Преобразование должно использовать следующие принципы:

  • Рассеивание (diffusion) — т.е изменение любого знака открытого текста или ключа влияет на большое число знаков шифротекста, что скрывает статистические свойства открытого текста;
  • Перемешивание (confusion) — использование преобразований, затрудняющих получение статистических зависимостей между шифротектстом и открытым текстом.

К достоинствам блочных шифров относят похожесть процедур шифрования и расшифрования , которые, как правило, отличаются лишь порядком действий. Это упрощает создание устройств шифрования, так как позволяет использовать одни и те же блоки в цепях шифрования и дешифрования.

Содержание

  • 1 Основная идея
  • 2 Режимы работы блочного шифра
  • 3 См. также
  • 4 Ссылки

Основная идея [ ]

Блочный шифр состоит из двух взаимосвязанных алгоритмов: алгоритм шифрования E и алгоритм расшифрования E -1 . Входными данными служат блок размером n бит и k— битный ключ. На выходе получается n-битный зашифрованный блок. Для любого фиксированного ключа функция расшифрования является обратной к функции шифрования для любого блока M и ключа K.

Для любого ключа K, EK — перестановка набора входных блоков. Ключ выбирается из возможных перестановок.

Размер блока n — это фиксированный параметр блочного шифра, обычно равный 64 или 128 битам, хотя некоторые шифры допускают несколько различных значений. Длина 64 бита была приемлема до середины 90-х годов, затем использовалась длина 128 бит и более. Различные схемы шифрования позволяют зашифровывать открытый текст произвольной длины. Каждая имеет определенные характеристики: вероятность ошибки, простота доступа, уязвимость к атакам. Типичными размера ключа являются 40, 56, 64, 80, 128, 192 и 256 бит. В 2006 г. 80-битный ключ способен был предотвратить атаку грубой силой.

Режимы работы блочного шифра [ ]

Простейшим режимом работы блочного шифра является ECB (Electronic CodeBook (англ.) — режим простой замены или электронной кодовой книги), где все блоки открытого текста зашифровываются независимо друг от друга. Однако, при использовании этого режима статистические свойства открытых данных частично сохраняются, так как каждому одинаковому блоку данных однозначно соответствует зашифрованный блок данных. При большом количестве данных (например, видео или звук) это может привести к утечке информации о их содержании и дать больший простор для криптоанализа. Удаление статистических зависимостей в открытом тексте возможно с помощью предварительного архивирования , но оно не решает задачу полностью, так как в файле остается служебная информация архиватора , что не всегда допустимо.

Аналогичная проблема возникает при формировании и преобразовании «хвостового» блока данных. Так как данные могут быть любой длины, а блочный шифр требует данные кратные длине блока, то «хвостовой» блок данных зачастую приходится искусственно дополнять до требуемого размера. При этом, например, заполнение хвоста одинаковыми символами облегчает атаку по известному открытому тексту.

Принципиальным решением описанных проблем является гаммирование данных и использование контекстно-зависимых режимов шифрования.

См. также [ ]

  • атака на блочный шифр
  • виды блочных шифров
  • применение алгоритмов блочного шифрования
  • режим шифрования
  • криптосистема с открытым ключом
  • симметричные криптосистемы

Ссылки [ ]

  • Андрей Винокуров «Как устроен блочный шифр?», «Проблема аутентификации данных и блочные шифры», «Архитектура блочных шифров. Варианты использования блочных шифров».
Замок Это незавершённая статья по криптографии. Вы можете помочь проекту, исправив и дополнив её.

cs:Bloková šifra de:Blockverschlüsselung en:Block cipher es:Cifrado por bloques fr:Chiffrement par bloc he:צופן בלוקים it:Cifratura a blocchi ja:ブロック暗号 nl:Blokvercijfering no:Blokkchiffer pl:Szyfr blokowy ro:Cifru pe blocuri simple:Block cipher uk:Блочні алгоритми шифрування vi:Mã hóa khối

Режимы шифрования блочных шифров

В предыдущих статьях мы подробно разобрались, как работают два отечественных криптоалгоритма «Кузнечик» и «Магма». Однако с их помощью получится зашифровать весьма скудный кусочек информации (если использовать «Кузнечик», длина этого кусочка составит только лишь 16 байт, а если применять «Магму», то и того меньше — всего 8 байт). Понятно, что нынче в такие объемы ничего втиснуть не получится, и нужно что-то с этим делать.

Что с этим делать, подробно изложено в очередном российском стандарте, который именуется ГОСТ 34.13—2015 «Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров». Этот нормативный документ, так же как и его собратья по криптографическому ремеслу, рожден в Центре защиты информации и специальной связи ФСБ при содействии ОАО «ИнфоТеКС».

Данный стандарт определяет, каким образом зашифровывать и расшифровывать сообщения, размер которых может значительно превышать размер одного 8- или 4-байтного блока.

Всего рассматриваемый стандарт описывает и определяет шесть режимов работы алгоритмов блочного шифрования:

  • режим простой замены (ECB, от английского Electronic Codebook);
  • режим гаммирования (CTR, от английского Counter);
  • режим гаммирования с обратной связью по выходу (OFB, от английского Output Feedback);
  • режим простой замены с зацеплением (CBC, от английского Cipher Block Chaining);
  • режим гаммирования с обратной связью по шифротексту (CFB, от английского Cipher Feedback);
  • режим выработки имитовставки (MAC, от английского Message Authentication Code).

Следует отметить, что стандарт не регламентирует строгое использование в качестве алгоритма блочного шифрования только «Кузнечик» или «Магму», данный алгоритм может быть любым (так же как и размер одного блока), однако в стандарте в качестве примеров рассматриваются блочный шифр с размером блока 8 байт (в этом случае подразумевается «Магма») и блочный шифр с размером блока 16 байт (здесь имеется в виду «Кузнечик»).

Операция дополнения сообщения

Прежде чем непосредственно рассмотреть режимы работы, необходимо познакомиться с одной весьма важной операцией — операцией дополнения сообщения, или паддинга (от английского Padding — набивка, заполнение).

Эта операция применяется при реализации режимов простой замены, простой замены с зацеплением и режима выработки имитовставки. Дело в том, что указанные режимы работают только с сообщениями, длина которых кратна размеру одного блока (напомню, 8 байт для «Магмы» и 16 байт для «Кузнечика»). Для сообщений, длина которых не кратна размеру блока, получающийся остаток необходимо дополнить до размера полного блока.

Читайте также  Вступительный в аспирантуру

ГОСТ 34.13—2015 определяет три возможные процедуры дополнения.

Процедура 1

Данная процедура применяется при работе в режиме простой замены или простой замены с зацеплением. Суть процедуры в том, что остаток в сообщении дополняется нулями до размера полного блока.

Схема дополнения в соответствии с процедурой 1

Использование этой процедуры не позволяет гарантировать однозначное восстановление исходного сообщения из расшифрованного, если неизвестна длина дополнения либо длина исходного сообщения.

Пример дополнения в соответствии с процедурой 1 (как видим, не зная длины исходного сообщения или длины дополнения, удалить верное количество ненужных нулей из расшифрованного сообщения для восстановления исходного просто так не получится)

Процедура 2

Особенность этого варианта процедуры дополнения заключается в том, что дополнение выполняется в любом случае, независимо от того, кратна длина сообщения размеру блока или нет. Это позволяет восстанавливать исходное сообщение из расшифрованного без знания дополнительной информации (длины исходного сообщения или длины дополнения).

Схема дополнения в соответствии с процедурой 2

При реализации этой процедуры возможно два варианта: длина исходного сообщения не кратна размеру блока (то есть в конце сообщения имеется неполный блок) и длина исходного сообщения кратна размеру одного блока.

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

Такой вариант дополнения также рекомендован для использования в режиме простой замены или простой замены с зацеплением.

Процедура 3

Эта процедура похожа на первую тем, как она выполняется, и на вторую содержимым этого дополнения. Если длина сообщения кратна размеру блока, то никаких дополнений делать не нужно, в противном случае остаток исходного сообщения дополняется до размера полного блока единичным начальным битом с последующим заполнением нулями.

Схема дополнения в соответствии с процедурой 3

Процедуру, реализованную в таком варианте, рекомендуется использовать только для режима выработки имитовставки.

Из описанных в стандарте режимов рассмотрим первый.

Режим простой замены (ECB)

Здесь все достаточно просто: весь исходный текст делится на блоки, в случае необходимости производится дополнение последнего блока, далее каждый блок шифруется с применением нужного алгоритма блочного шифрования, и в итоге получившиеся зашифрованные блоки и будут составлять зашифрованное сообщение.

Схема работы в режиме простой замены при зашифровывании (буквами P обозначены блоки исходного текста, K — ключ шифрования, E — алгоритм блочного шифрования в режиме зашифровывания, C — зашифрованные блоки)

Расшифровывание реализуется в обратном порядке.

Схема работы в режиме простой замены при расшифровывании (D — алгоритм блочного шифрования в режиме расшифровывания)

Для того чтобы реализовать данный режим, для начала определим несколько базовых функций (в коде мы будем использовать описанные в прошлой статье функции алгоритма блочного шифрования «Магма», хотя ничто не мешает заменить их функциями блочного шифрования для другого алгоритма, например «Кузнечика»).

Определение длины исходного текста

Будем полагать, что исходное сообщение (или исходный текст, подлежащий шифровке) содержится в каком-либо файле и, соответственно, длиной исходного текста будет размер этого файла в байтах. Самый простой способ узнать это выглядит следующим образом:

Далее узнаем длину необходимого дополнения.

Определение длины дополнения

Для начала определим такие вот константы (догадаться об их назначении, я думаю, тебе не составит труда):

Функция определения длины дополнения выглядит следующим образом (здесь BLCK_SIZE константа, в которой определен размер блока в байтах (в нашем случае — восемь), size — длина исходного сообщения, pad_mode — вид процедуры дополнения):

Если последний блок исходного сообщения полный (то есть содержит нужное количество байтов, в зависимости от алгоритма блочного шифрования), то для процедуры 1 и 3 функция возвратит ноль (то есть дополнение не нужно), а для процедуры 2 возвращаемое значение будет равно размеру одного блока исходного сообщения (в нашем случае для алгоритма «Магма» оно будет равно восьми). Если же последний блок исходного сообщения неполный, то возвращаемое значение будет равно числу байтов, которое необходимо для дополнения этого блока исходного сообщения до полного.

Дописывание нужного содержимого в дополнение

На вход данной функции подается указатель на участок памяти, в котором хранится исходное сообщение, длина дополнения, длина самого исходного сообщения и вид процедуры дополнения.

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

Удаляем ключи из памяти

В предыдущих двух статьях мы не очищали то место в памяти, где лежат итерационные ключи шифрования, хотя по всем правилам хорошего тона реализации криптографических алгоритмов это делать необходимо. Для этого напишем простую функцию:

В нашем случае функция предназначена для работы с «Магмой», для алгоритма «Кузнечик» при необходимости подобную функцию, я думаю, вы сможете написать сами.

Шифруем строку

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

В данном случае для шифрования отдельного блока используется функция GOST_Magma_Encrypt из предыдущей статьи. Если нужно шифровать блоки алгоритмом «Кузнечик», то вместо нее можно использовать функцию GOST_Kuz_Encrypt из статьи про этот алгоритм (не забудьте вместо функций GOST_Magma_Expand_Key и GOST_Magma_Destroy_Key использовать соответствующие функции для «Кузнечика»).

Расшифровываем строку

Функция аналогична функции зашифровывания строки, за исключением ключевой функции GOST_Magma_Decrypt. С ее помощью производится расшифровывание одного блока сообщения.

Так же как и в функции зашифровывания, вместо GOST_Magma_Decrypt в случае необходимости можно использовать GOST_Kuz_Decrypt.

Шифруем файл целиком

Мы уже определились, что работать с файлом исходного сообщения будем отдельными порциями, поэтому необходимо обозначить размер буфера для хранения этой порции. Для этого определим константу, в которую запишем нужное значение (я выбрал размер буфера равным одному килобайту, вы можете при желании определить другой):

Функция зашифровывания файла выглядит следующим образом:

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

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

Расшифровываем файл

Расшифровываем файл следующей функцией:

Как видите, эта функция похожа на функцию зашифровывания файла, только отсутствует все, что связано с дополнением и использованием функции ECB_Decrypt вместо функции ECB_Encrypt.

При использовании функций ECB_Encrypt_File и ECB_Decrypt_File файлы, с которыми будут работать эти функции, необходимо открывать с параметром «rb» для чтения или «wb» для записи (то есть открывать их в режиме двоичных, а не текстовых файлов), например вот так:

Режим простой замены достаточно несложен в реализации, однако имеет один весьма существенный недостаток: если мы будем шифровать сообщение, которое содержит в себе одинаковые или повторяющиеся блоки, то на выходе мы тоже получим зашифрованные одинаковые или повторяющиеся блоки. Этот недостаток дает возможность вскрыть структуру исходного сообщения.

Иллюстрация недостатка режима простой замены. Сверху исходный текст, снизу зашифрованный текст (в зашифрованном тексте видны повторяющиеся блоки)

Заключение

Теперь вы знаете, как применять блочные алгоритмы шифрования для работы с сообщениями произвольной длины с использованием режима простой замены. В статье этот режим рассмотрен для алгоритма блочного шифрования «Магма», однако больших сложностей в переработке кода для алгоритма «Кузнечик» нет (все необходимые функции мы написали во второй статье цикла). Этот режим вполне можно применять для шифрования небольших по объему текстовых файлов, в которых отсутствуют какие-либо структурированные части с одинаковыми данными.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: