README.md

CSA-4

Авторский алгоритм криптографической хеш-функции.

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

Краткое описание

Алгоритм хеширования CSA-4 основан на схеме генерации ключа в алгоритме шифрования ESCK-7, но с некоторыми отличиями. Поскольку ключ в ESCK-7 слишком большой, его применение для хеширования (особенно всего нескольких байт) становится достаточно неудобным. Вместо этого в CSA-4 ключ инициализируется константами и потом не меняется, а данные для хеширования добавляются в отдельный массив, который потом шифруется и результат шифрования становится хешем.

Массив хеша имеет размер восемь 64-битных целых беззнаковых чисел (всего 512 бит = 64 байта). Функция его шифрования похожа на функцию шифрования ключа в ESCK-7, за исключением того, во-первых, что она адаптирована под размеры массива (8 чисел вместо 256). Во-вторых, что шифруется отдельный массив, а не ключ, хотя ключ также принимает участие в шифровании.

Подобно ESCK-7 для шифрования каждого числа массива вычисляется адресная переменная, которая зависит от самого шифруемого числа и двух соседних (предыдущего и следующего в массиве). Далее адресная переменная разбивается на 8 номеров, по которым берутся элементы ключа и по ним это число шифруется. И так повторяется на протяжении нескольких циклов, что обеспечивает как необратимость подобного шифрования, так и значительное изменение конечного результата даже при незначительных изменениях хешируемых данных.

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

Конечный хеш может иметь размер 512 или 256 бит. В первом случае массив перед хешированием инициализируется нулями и весь берётся в качестве хеша, а во втором – инициализируется единицами (8 единиц) и в конце берётся только половина массива. Результат может возвращаться в виде массива байтов или строки символов (значения байтов в виде шестнадцатеричных чисел).

В данном алгоритме применяется фиксированное количество циклов шифрования и повторений добавления данных. Принято 5 повторений добавления, 5 циклов шифрования после каждого добавления и дополнительно 10 циклов шифрования перед закрытием хеша. То есть, схема имеет вид 5x5+10. Тем не менее, в случае необходимости, допускается применение других схем.

csa4sum

Программа csa4sum является примером реализация алгоритма CSA-4 и позволяет вычислять хеш-сумму для файлов или стандартного потока ввода. Файл csa4sum.cpp содержит исходный текст программы, а Makefile – сведения для её сборки с помощью системы make.

Критические изменения алгоритма

29.04.2025. В функции Enc() шифрования рабочего массива прибавление константы заменено прибавлением номера цикла. Также заменена таблица (ключ) шифрования K.

16.05.2025. Подсчёт количества хешированных байтов заменён подсчётом битов.

Описание

Авторский алгоритм криптографической хеш-функции.

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