вторник, 3 апреля 2018 г.

Краткое описание алгоритмов шифрования ESCK-3, ESCK-4, P-Cry и DME-1

Трунов Д.Н.
КРАТКОЕ ОПИСАНИЕ АЛГОРИТМОВ ШИФРОВАНИЯ ESCK-3, ESCK-4, P-CRY И DME-1

Копия статьи, опубликованной 23.10.2015 на сайте https://sites.google.com/site/publicworkstrunov

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

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

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

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

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

Для усиления надёжности шифрования была поставлена задача: создать более мощный алгоритм, чем применяющиеся в настоящее время алгоритмы. Учитывая, что такие алгоритмы шифрования как DES, RIJNDAEL и ГОСТ 28147-89 официально признаны надёжными и приняты в качестве стандартов [1, 2], любой новый алгоритм может оказаться потенциально слабее с точки зрения надёжности защиты информации. Принимая во внимание сложность конкуренции с признанными стандартами, в новом алгоритме было решено сделать упор на существенном увеличении длины ключа и циклов шифрования, а сам алгоритм использовать не как замену, а как дополнение к существующим инструментам защиты информации.

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

Абсолютная стойкость криптосистемы, то есть абсолютная невозможность извлечь зашифрованную информацию без знания ключа, достигается при выполнении трёх дополнительных требований [1]:
 * равенство длины ключа и исходного текста;
 * случайность ключа;
 * однократное использование ключа.

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

Принципы реализации алгоритма ESCK-3
Алгоритм ESCK-3 был выполнен с учётом практически всех основных перечисленных требований (требование об учёте возможной аппаратной реализации алгоритма было проигнорировано, поскольку необходимость такой реализации маловероятна). Что касается дополнительных требований к абсолютной стойкости, в ESCK-3 реализовано максимально возможное приближение к ним.

Алгоритм ESCK-3 является улучшенной модификацией алгоритма ESCK-2, принципы работы которого описаны в работе [3]. Особенности их реализации во многом сходны, поэтому, дабы избежать повторения, некоторые подробности реализации ESCK-3 рассмотрены не будут.

Как и в ESCK-2, в ESCK-3 работа осуществляется с данными любого типа (текст, изображения, аудио- и видеоматериалы и т.д.), загруженными в оперативную память компьютера в виде массива байт. То есть минимальной обрабатываемой единицей информации будет байт, число от 0 до 255. Конечным результатом обработки массива будет такой же массив байт, такой же длины, но с зашифрованным/расшифрованным содержимым.

В процессе шифрования и расшифровки обрабатываемый массив делится на блоки одинакового размера, равные длине ключа шифрования. Если последний блок массива имеет длину меньше, чем длина ключа, то для этого блока ключ укорачивается до его длины. Длина ключа, а, соответственно, и рабочего блока, является гибким параметром и может варьироваться по выбору пользователя от 1 байта до 64 килобайт (выбирается до начала шифрования/дешифрования и потом не меняется). Это важное преимущество перед алгоритмами типа DES и другими, длина ключа которых не превышает 128-256 бит (или 16-32 байта), поскольку увеличение длины ключа всего на 1 байт повысит стойкость алгоритма в 256 раз. Такое преимущество позволяет максимально приблизиться к требованию равенства длины ключа и длины исходного массива.

Важным отличием алгоритмов ESCK является многоцикличное шифрование. Шифрование или расшифровка каждого блока выполняется циклично несколько раз. Количество циклов также является гибким параметром и может выбираться пользователем. В алгоритме ESCK-3 возможное количество циклов практически неограниченно, и в зависимости от выбранной степени защиты можно выбрать и сто, и тысячу, и десять тысяч циклов. Технически количество циклов ограничено числом, равным 2^32-1 = 4294967295, чего хватит для 
любого, даже самого стойкого шифрования.

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

Генерация ключа шифрования заданной длины осуществляется в следующей последовательности:
 1) создаётся вспомогательный массив, равный размеру массива ключа;
 2) обнуляется каждый элемент массива ключа и вспомогательного массива;
 3) в массив ключа и во вспомогательный массив вписываются длина пароля и последовательно каждый из символов пароля;
 4) формируются начальные значения массива перемешивания и массива сложения;
 5) над вспомогательным массивом выполняется цикл шифрования;
 6) содержимое вспомогательного массива переносится в массив ключа;
 7) на основе нового значения ключа формируются новые значения массива перемешивания и массива сложения;
 8) пункты 5-7 повторяются согласно заданному количеству циклов шифрования, но не менее 1000 раз.

Описанный алгоритм является, по своей сути, генератором псевдослучайных последовательностей [1], а фактически позволяет многократно самозашифровать начальное значение ключа (введённый пароль). Предсказать заранее, каким будет ключ, до его генерации, практически невозможно. Это позволяет достаточно близко подойти к требованию случайности ключа и к понятию «абсолютно стойкой криптосистемы».

В процессе шифрования данных над каждым блоком выполняется по очереди три типа операций. Вначале каждый байт массива заменяется результатом вычисления несложной математической функции, аргументами которой являются текущий и следующий байт блока (или нулевой, если текущий является последним), а также текущий байт ключа шифрования. После завершения такой обработки все байты текущего блока перемешиваются между собой в порядке, заданном в массиве перемешивания. После завершения перемешивания к каждому байту текущего блока прибавляется байт из массива сложения. Здесь стоит отметить, что, поскольку байт не может иметь значение больше 255 и меньше 0, будут иметь место такие преобразования:
255 + 1 = 0;
0 – 1 = 255.

Так выглядит один полный цикл шифрования блока. Если циклов несколько, все перечисленные операции повторяются вновь. Расшифровка блока производится в обратной последовательности, а блок обрабатывается от конца к началу.

Ещё одно важное отличие алгоритмов серии ESCK заключается в том, что при переходе от блока к блоку в процессе шифрования или расшифровки ключ шифрования меняется, что также призвано повысить стойкость алгоритма. Меняется он по такой же схеме, как и генерируется, но выполняется всего лишь один цикл шифрования ключа самим собой. Массив перемешивания и массив сложения также меняются в зависимости от полученного нового ключа. Этот фактор, собственно, и дал название алгоритму, который был назван шифрующей системой с меняющимися ключами (Encrypting System with Changing Keys – ESCK).

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

Алгоритмы шифрования ESCK-4 и P-Cry
Основное отличие ESCK-4 от алгоритма ESCK-3 заключается в том, что в ESCK-4 исключено применение массивов перемешивания и сложения, а вся работа осуществляется с единственным массивом ключа. Схема перемешивания определяется в процессе шифрования, исходя из значений массива ключа. Кроме того, усложнены функции шифрования. Первая в качестве аргументов принимает сразу по четыре элемента из текущего блока и массива ключа – текущий и три последующих. Если следующий элемент располагается за пределами блока (соответственно, и ключа), то элемент берётся из начала блока. Завершающая функция также для каждого шифруемого элемента принимает три аргумента: текущий элемент ключа, текущий элемент шифруемого/расшифровываемого блока и предыдущий элемент блока (или последний, если текущий находится в начале блока).

Алгоритм P-Cry (сокращение от Powerful Cryptography – мощное шифрование) практически идентичен алгоритму ESCK-4, за исключением того, что в нём при переходе от блока к блоку ключ шифрования не изменяется.

Алгоритм шифрования DME-1
Алгоритм шифрования DME-1 функционирует по принципам, сходным с принципами ESCK-3/ESCK-4, однако предназначен для шифрования исключительно текстов небольшой длины. Такое свойство бывает необходимым для шифрования паролей или коротких текстовых сообщений с последующим их сохранением или передачей именно в текстовом виде. Каждый элемент исходного и зашифрованного/расшифрованного массива здесь может иметь только символьное значение.

Алгоритм DME-1 поддерживает 6 режимов шифрования, в каждом из которых исходная и зашифрованная строка могут состоять из определённых наборов символов:
 0: Только цифры (012...);
 1: Латиница верхнего регистра (ABC...);
 2: Цифры и латиница обоих регистров (012ABCabc...);
 3: Цифры, латиница обоих регистров, спецсимволы и пробел (012ABCabc!@#...);
 4: Цифры, латиница, спецсимволы, кириллица и пробел (012ABCabc!@#АБвг...);
 5: Символы 32-255 таблицы ASCII, то есть все символы клавиатуры английской и русской раскладок, а также символы, отсутствующие на клавиатуре, например: ©,® или TM.

Перед началом шифрования/расшифровки, все символы строки преобразуются в числа и помещаются в рабочий массив. Например, выбран режим 1, где работа будет вестись только с символами латиницы. Тогда символу A будет соответствовать цифра 0, символу B – 1, а Z – 25. Всего 26 значений, согласно количеству символов латиницы. После завершения все числа снова будут преобразованы в символы латиницы.

В DME-1 применяется ключ шифрования фиксированной длины, равной 256 байт, и фиксированное количество циклов, равное 10000. Генерация ключа производится при помощи рассмотренного уже алгоритма ESCK-3, которым зашифровывается начальное значение ключа, всегда одинаковое. Пароль шифрования здесь используется только алгоритмом ESCK-3 в процессе генерации ключа.

В каждом цикле шифрования вначале выполняется перемешивание всех элементов рабочего массива по схеме, определённой ключом шифрования. Затем к каждому элементу этого массива прибавляется следующий за ним (к последнему прибавляется нулевой) элемент и текущий элемент ключа. Результат такого сложения часто выходит за пределы допустимых значений, например, больше 25 для режима 1. В таком случае в качестве результата принимается остаток от его деления на ширину диапазона (26 для режима 1).

Расшифровка происходит по такой же схеме в обратной последовательности. Если нужно шифровать текст более 256 символов длиной, следует разбить его построчно на несколько частей. Поскольку алгоритм предназначен для шифрования коротких текстов, по сути, сообщений, а сам процесс шифрования оказывается достаточно глубоким (из-за многократно повторяющихся циклов с постоянным перемешиванием шифруемых элементов), метод шифрования был назван Deep Message Encryption – глубокое шифрование сообщений.

Заключение
Комплекс мер, принятых в процессе работы над алгоритмами ESCK-3, ESCK-4, P-Cry и DME-1, позволили получить гибкие и надёжные алгоритмы шифрования, удовлетворяющие основным требованиям к таким алгоритмам. Комплексный многоцикличный процесс шифрования не позволяет найти закономерность между исходным и зашифрованным массивом. Даже самые малые изменения в пароле, ключе, его длине или количестве циклов существенно и непредсказуемо меняют вид зашифрованного массива/сообщения.

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

Основная разница алгоритмов – в деталях реализации и их назначении. Алгоритм DME-1 предназначен для шифрования исключительно текста, в то время как остальные позволяют шифровать и расшифровывать любой массив данных. ESCK-3 и ESCK-4 различаются реализацией шифрования внутри цикла, а ESCK-4 и P-Cry отличаются только тем, что в последнем отсутствует смена ключа шифрования после перехода от блока к блоку.

Источники информации
1. Абашев А.А, Жуков И.Ю., Иванов М.А., Метлицкий Ю.В., Тетерин И.И. Ассемблер в задачах защиты информации. – М.: КУДИЦ-ОБРАЗ, 2004. – 544 с.
2. Баричев С. Криптография без секретов [Электронный ресурс] // Бюро научно-технической информации. – URL:http://www.bnti.ru/dbtexts/ipks/old/analmat/1_2002/crypto4.pdf (дата обращения: 21.10.2015)
3. Трунов Д.Н. Алгоритм шифрования ESCK-2 и особенности его реализации // Геотехнології і охорона праці у гірничій промисловості: Зб. матеріалів регіональної наук.-практ. конф. / Красноармійський індустріальний інститут ДонНТУ, 14 листопада 2013 р. – Донецьк: ООО «Цифровая типография», 2013. – С. 204 – 210.

Комментариев нет:

Отправить комментарий