README.md

ESCK-7

Авторский алгоритм блочного шифрования.

Автор: Д.Н. Трунов

Общее описание

Особенности алгоритма

  • Все операции в шифре выполняются над 64-битными целыми беззнаковыми числами, потому все байты данных и ключа объединяются в группы по 8 байт, образующих 64-битные числа
  • Внутренний ключ имеет размер 256 64-битных чисел
  • Ключ пользователя или пароль могут иметь любую приемлемую длину (до 2048 байт для байтового ключа или 256 символов для пароля) и преобразуются во внутренний ключ по специальной схеме
  • Допустимо преобразовать несколько ключей пользователя и/или паролей в один внутренний ключ
  • Данные шифруются блоками по 128 бит (два 64-битных числа)
  • Шифрование блока выполняется в несколько проходов (циклов) и их количество не является фиксированным, а может быть задано пользователем

Режимы шифрования

Возможные режимы шифрования:

  • простой – ключ не меняется и все блоки шифруются одинаково
  • счётчик блоков – шифрование с зависимостью от номера блока
  • смена ключа – после шифрования каждого блока внутренний ключ меняется по специальной схеме
  • счётчик блоков + смена ключа

Схема шифрования и идея шифра

Порядок шифрования блока:

  1. Для каждого из двух 64 битных чисел вычисляется специальная 64-битная адресная переменная. При её вычислении принимают участие значение соседнего элемента, номер блока (в простом режиме он всегда равен нулю), а также значение одного из 256 элементов ключа (номер зависит от значения соседнего элемента блока).
  2. Адресная переменная делится на 8 8-битных номеров, по которым берутся элементы внутреннего ключа для данного этапа шифрования.
  3. Текущий элемент блока шифруется с участием отобранных элементов ключа с помощью операций сложения (+) исключающего ИЛИ (xor, ^), побитового отрицания (not, ~) и циклических побитовых сдвигов.
  4. Операции 1-3 выполняются многократно установленное количество раз. Расшифровка происходит по той же схеме, только чувствительные к порядку операции выполняются в обратной последовательности: если шифруется сначала первый элемент, а потом второй, то расшифровывается сначала второй, а потом первый. Если для шифрования выполняется сначала сложение с K[Num1], потом сдвиг и сложение с K[Num2], то для расшифровки выполняется вычитание K[Num2], обратный сдвиг и вычитание K[Num1].

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

Генерация и смена ключа

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

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

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

Структура файлов

ESCK7.cpp – основной код шифра реализованный в виде объектного класса.

ESCK7.h – заголовочный файл для объектного класса.

esck7cyp.cpp – пример простой консольной программы для шифрования файлов шифром ESCK-7.

Makefile – файл для сборки программы esck7cyp.

Описание

Авторский алгоритм блочного шифрования.

Конвейеры
0 успешных
0 с ошибкой