2 месяца назад
История
README.md
Short-2
Авторский алгоритм потокового шифрования, основанный на блочном шифре ESCK-7 и текущей версии генератора случайных чисел DeepRand (коммит «Обновление алгоритма» от 26.07.2024).
Автор: Д.Н. Трунов
Краткое описание
Генерация ключа (идентично шифру ESCK-7)
- Ключ состоит из 256 64-битных чисел.
- Генерация ключа возможна по паролю или байтовому массиву.
- Возможна как замещающая генерация (с инициализацией ключа), так и дополняющая (без инициализации), позволяющая генерировать ключ по нескольким паролям и/или массивам.
- Основная генерирующая функция (GFunc) выполняет несколько циклов шифрования самого ключа, в котором каждый отдельный элемент ключа шифруется с участием других элементов, номера и порядок которых определяются динамически в процессе шифрования.
Шифрование потока байтов
- Шифруемый поток может размещаться в одном или нескольких байтовых массивах.
- Рекомендуемый формат массива – байтовый массив типа vector.
- Допустимый формат – указатель на данные любого типа (будут трактоваться как байты).
- Шифрование выполняется путём применения побитовой операции XOR (исключающее ИЛИ) над шифруемыми и специально генерируемыми шифрующими байтами.
- Расшифровка выполняется повторным шифрованием зашифрованных данных с тем же ключом.
Шифрующие байты
- Шифрующие байты генерируются по ключу идентично «случайным» числам в алгоритме DeepRand.
- Очередное «случайное» 64-битное число вычисляется по текущему элементу ключа (они берутся по очереди) с участием других элементов по определяемым в процессе номерам. Вычисленное число также прибавляется к текущему элементу ключа, чтобы обеспечить сменяемость самого ключа.
- Вычисленное 64-битное число разбивается на 8 отдельных байт, с помощью которых шифруются очередные 8 байт шифруемого потока.
- Вычисление очередного 64-битного числа и разбивка на байты повторяется по мере необходимости, пока не закончится шифруемый поток.
Пример применения алгоритма
Файл Example.cpp содержит пример шифрования файла по описанному алгоритму: шифрует файл исходных текстов алгоритма Short2.cpp, сохраняя результат в файл Data.enc, а затем расшифровывает его с сохранением в Data.txt.
В примере показана генерация ключа по двум паролям, один из которых секретный и многоразовый, а второй – одноразовый, созданный на основе случайного числа и текущего времени. Также реализована проверка соответствия ключа по контрольному коду, вычисляемому путём шифрования числа сгенерированным ключом.
Конвейеры
0 успешных
0 с ошибкой