README.md

DeepRand

Авторский алгоритм генерации (псевдо)случайных чисел.

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

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

Текущая версия алгоритма DeepRand основана на блочном шифре ESCK-7, специально модифицированном для генерации труднопредсказуемой последовательности чисел. Ключ шифрования (в данном случае – рандомизации) здесь генерируется аналогичным образом, но с условием, что данные для генерации ключа обладают некоторой степенью случайности. Вычисление каждого следующего «случайного» числа выполняется путём шифрования предыдущего с помощью ключа по необратимой функции.

Рандомизация (генерация ключа) возможна по 64-битному целому числу или по байтовому массиву и может выполняться несколько раз с данными из разных источников, а каждая следующая дополняет и «углубляет» предыдущую. Рандомизация является достаточно затратной по времени операцией из-за необходимости шифрования ключа большой длины, но зато позволяет рассеять в ключе любые неслучайности исходных данных и обеспечивает непредсказуемость генерируемых чисел.

Генерация случайного числа напоминает шифрование блока в ESCK-7, только «блок» состоит всего из одного 64-битного числа и его шифрование выполняется в один проход. В качестве «блока» берётся копия элемента ключа (каждого по очереди), а в его шифровании принимают участие другие элементы ключа по динамической (заранее неопределённой) схеме, зависящей от самого «блока» и соседних в ключе чисел. Зашифрованное число возвращается в качестве результата генерации, но также прибавляется к текущему элементу ключа, обеспечивая сменяемость как отдельных элементов, так и всего ключа в целом.

Алгоритм позволяет генерировать целые числа размером до 64 бит, числа с плавающей точкой двойной точности (double) в промежутке между 0 и 1, а также заполнять байтовые массивы случайными байтами.

PassGen

Программа PassGen является примером применения алгоритма DeepRand для генерации паролей (строк случайных символов). Программа предлагает пользователю вводить желаемую длину пароля (1..256, 0 - для выхода из программы) и генерирует пароль указанной длины. Реализована рандомизация при запуске программы по текущему времени, затем по байтам, прочитанным из файла /dev/urandom (Linux), а перед каждой генерацией пароля – по значению функции clock() счётчика времени работы программы (является труднопредсказуемым, поскольку зависит от ввода пользователя).

Numbers

Программа Numbers - ещё один пример применения алгоритма. Генерирует ряд чисел заданной длины. Байтовый размер чисел, длину ряда и формат отображения (hex/dec) можно указать в пераметрах при запуске. В программе реализована рандомизация по локальному Seed-файлу, часам chrono::high_resolution_clock и файлу /dev/urandom.

Описание

Авторский генератор (псевдо)случайных чисел.

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