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.