28 апреля 2024, 10:41:30

Новости:

Чтобы загрузить изображение нужно нажать кнопку "ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР".


N

Шифрование файлов случайными байтами

Автор nik-crypto, 30 августа 2005, 09:49:53

0 Пользователей и 1 гость просматривают эту тему.

nik-crypto

Изобретен и реализован в виде программы способ шифрования файлов случайными байтами. Предлагаю использовать эту программу для общения. Взлом исключен даже для горячих сердец с холодной головой. Описание алгоритма приведено ниже.
        Основная идея шифрования случайными байтами: замена исходных байтов файла на адреса этих байтов в некотором достаточно большом множестве. В качестве такого множества используется массив случайных строк длиной 256 байт, каждая строка которого содержит все 256 байтов ровно по одному  разу. Генерация таких строк осуществляется по следующему алгоритму:
        1) строке присваивается значение пусто ( L = "")
        2) с помощью функции Rnd(Timer) генерируется псевдослучайное число в интервале от 10000 до 30000 ( I = Int(Rnd*20000) + 10000);
        3) берется остаток от деления этого числа на 256 ( J = I mod 256);
        4) полученный остаток преобразуется в байт ( L1 = ChrB(J))
        5) проверяется наличие сгенерированного байта в строке L, если такого байта нет, то L=L+L1.  Если такой байт есть в строке, то переход к пункту 2. Естественно, проверка осуществляется только в том случае, если длина строки меньше 256 байт.
        Таким образом, генерируются строки со случайным расположением одних и тех же 256 байтов. Количество таких строк исчисляется как факториал от 256, что превышает 10 в степени 506. Очевидно, что использовать этот массив строк в полном объеме в программе физически невозможно в силу огромной величины числа 10 в степени 506 (1 и пятьсот шесть нулей). Поэтому мы решили использовать порции в количестве до 2000 строк. Количество вариантов генерации одной порции в 2000 строк вычисляется как биноминальный коэффициент, в числителе которого произведение 2000 чисел вида (10 в степени 506  - 0,1,2,...,1999), а в знаменателе факториал от числа 2000. Поскольку вычитание от такого гиганта, как 1 и 506 нулей, чисел 1, 2, ...,1999 никакого влияния на его величину не оказывает, то будем приближенно считать все произведения равными 1 и 506 нулей. Тогда произведение 2000 чисел 10 в степени 506 приближенно равно числу 10 в степени (506 х 2000 = 1012000). Факториал от 2000 не превышает 10 в степени 6000. Следовательно, общее количество вариантов генерации 2000 случайных строк, содержащих все 256 байт, но расположенных случайным образом в строке, превышает 10 в степени (1012000 - 6000 = 1006000, или более чем 1 и миллион нулей).
        Итак, для шифрования будем использовать массивы случайных строк в количестве до 2000. Такой массив, мы назвали складом базисов шифрования. Алгоритм зашифровки файла пользователя состоит в следующем:
        1) берем первый байт файла пользователя и случайным образом выбираем строку из склада базисов;
        2) в выбранной случайной строке ищется байт, равный байту файла пользователя. Такой байт всегда существует, так как в нашей случайной строке всего 256 байтов и все они встречаются в строке ровно по одному разу;
        3) номер расположения байта файла пользователя в случайной строке - это адрес байта файла пользователя в случайной строке. Поскольку величина байтов изменяется от 0 до 255, а номера расположения байтов в случайной строке изменяются от 1 до 256, то для записи номера байта можно использовать всего один байт. Для этого достаточно от номера отнять единицу и преобразовать полученное число в байт;
        4) заменяем байт файла пользователя на байт, характеризующий номер (адрес) расположения байта файла пользователя в случайной строке из склада базисов. Эта операция - есть ничто иное, как замена исходного файла пользователя на адрес расположения этого байта в случайной строке из склада базисов;
        5) берем второй байт файла пользователя и случайным образом выбираем другую строку из склада базисов и переходим к пункту 2;
        6) таким образом, исходный файл пользователя превращается в список адресов, по которым производится восстановление исходного файла пользователя при расшифровке;
        7) при расшифровке берем первый байт из зашифрованного файла и ту же самую строку из склада базисов, которую использовали при шифровании. Этот байт преобразуем в число и увеличиваем на единицу для вычисления номера. По этому номеру из строки находим исходный байт файла пользователя и записываем его на место первого байта. Затем берем второй байт из зашифрованного файла и вторую строку из склада базисов, использованную при шифровании второго байта, и восстанавливаем исходное состояние второго байта файла пользователя и т.д.
        Таким образом, для шифрования используется двумерный массив случайных строк. Если мы при расшифровке ошибочно используем не ту строку, что применяли при зашифровке, то вместо расшифровки мы зашифруем файл еще раз.
        Как видно из приведенного описания, какая-либо функциональная или статистическая связь между исходными байтами файла пользователя и байтами зашифрованного файла пользователя отсутствует. Это связано с тем, что отсутствует связь между величиной байта и его местом расположения в случайных строках склада базисов. Очевидно, что исходный байт файла пользователя и адрес расположения этого же байта в складе базисов никак между собой не связаны, поэтому связь между ними совершенно случайная. Остается рассмотреть возможность повторной генерации склада базисов. Необходимо заново выбрать 2000 строк из множества размером 1 и миллион нулей. Это исключено, так как количество атомов во Вселенной является бесконечно малой величиной перед числом 1 и миллион нулей - физически негде расположить все строки. Таким образом, возможность расшифровки файлов, зашифрованных по нашему алгоритму, исключена даже теоретически. Недавно, я где-то читал о квантовых вычислениях, которые должны взламывать любой шифр. Наш алгоритм дает мощный толчок для развития и совершенствования методов расшифровки. Желаем профессионалам всяческих успехов и удач в разработке методов расшифровки наших файлов. Будем надеяться на то, что наши выводы о теоретической невозможности взлома нашего метода шифрования, являются ошибочными. В противном случае профессиональные дешифровщики просто исчезнут в связи с ненадобностью.
        Далее при реализации описанного алгоритма встали вопросы:
        1) где хранить склад базисов;
        2) где хранить номера случайных строк, использованных при шифровании;
        3) где хранить пароли (ключи), позволяющие пользователю расшифровывать свои зашифрованные файлы.
        Мы применили следующие решения перечисленных вопросов:
        1) склады хранятся в коде программы и в отдельных файлах:
        а) публичный внутренний склад базисов, генерируемый программно, вшит в код программы, у всех программ один и тот же, предназначен для обмена зашифрованными файлами между различными пользователями;
        б) частный внутренний склад базисов, генерируемый в момент генерации программы, вшит в код программы, у всех пользователей индивидуален и не повторим, предназначен для защиты информации пользователя;
        в) публичный внешний склад базисов, генерируется по желанию пользователю в неограниченном количестве, записывается в отдельный файл, предназначен для обмена зашифрованными файлами между различными пользователями по предварительной договоренности;
        г) частный внешний склад базисов, генерируется по желанию пользователю в неограниченном количестве, записывается в отдельный файл, предназначен для защиты информации пользователя.
        Склады хранятся в зашифрованном виде, как в коде программы, так и во внешних файлах. Зашифровка производится тем же способом - заменой на адреса в случайных складах. Следует отметить чрезвычайную простоту и чрезвычайно большое количество вариантов шифрования одного и того же файла с одним и тем же складом базисов и одним и тем же паролем.
        2) номера строк склада базисов, использованных при шифровании, создаются, используются  и сохраняются следующим образом:
        а) поскольку длина склада базисов превышает 256, то использовать один байт невозможно. Поэтому генерируются две одинаковые по длине строки, содержащие случайные байты. Длина таких строк изменяется от 512 до 2048 байт. Строки независимы. Берем первый байт из первой строки и первый байт из второй строки. Эти байты увеличиваем на единицу и перемножаем. Находим остаток от деления полученного числа на длину склада базисов и прибавляем к нему единицу. Полученное число есть номер строки склада базисов, использованной для шифрования первого байта файла пользователя. Далее, берем второй байт из первой строки и второй байт из второй строки и вычисляем номер второй строки склада базисов, использованной для шифрования второго байта файла пользователя и т.д. и т.п.;
        б) случайные строки, используемые для генерации номеров строк склада базисов, храним в оболочке зашифрованного файла пользователя в зашифрованном виде по нашему алгоритму.
        3) пароль (ключ) пользователя непосредственно участвует в процессе шифрования. Пароль имеет длину до 1024 байта. Это связано с тем, что байты пароля через один байт записывается либо в первую, либо во вторую строку, генерирующие номера считываемых строк из склада базисов. Всего имеется четыре варианта включения пароля в процесс шифрования: запись либо в первую, либо во вторую строку, запись по четным или нечетным номерам расположения байтов в строке. Все варианты используются случайным образом. Пароль хранится в оболочке зашифрованного файла в зашифрованном виде по нашему алгоритму. Как видно, из приведенного описания в нашем случае пароль может иметь произвольное содержание, в том числе пустое. Кроме того, пароль дополнительно зашифровывается по нашему алгоритму, что увеличивает его энтропию. Никаких проблем с паролями у нас нет.
        Оболочка зашифрованного файла имеет случайную длину, у каждого пользователя свои параметры этой оболочки. Общий размер оболочки не превышает 32000 байт. В оболочке содержится информация о действительном имени исходного файла, о его размере, о структуре оболочки, об использовании при шифровании внешнем складе базисов и его имени и другая необходимая информация. Оболочка состоит из случайных областей байтов и трех областей, зашифрованных по нашему алгоритму:
        1) единая зашифрованная область длиной от 7000 байт. Расшифровывается целиком и из нее берется информация о месте расположения второй области и о параметрах ее зашифровки;
        2) единая зашифрованная область длиной от 2000 байт. Расшифровывается целиком и из нее берется информация о месте нахождения третьей области и параметрах ее зашифровки;
        3) единая зашифрованная область длиной от 9000 байт. Расшифровывается целиком и из нее берется информация о месте нахождения зашифрованного файла пользователя и параметрах его зашифровки.
        Зашифровка областей оболочки и файла пользователя производятся в разных базисах, то есть с использованием разных наборов случайных строк, взятых из одного и того же или из разных складов базисов. Оболочка свое наименование «оболочка» получила в связи с выполнением функции защиты от вирусов - она допускает в разумных пределах изменять начало и конец зашифрованного файла, так как там находятся наборы случайных байтов. Это функция защищает зашифрованный файл от вирусов.
        Внешние склады базисов структурно ничем не отличаются от зашифрованного файла пользователя. Они также окружены оболочкой из случайных байтов и зашифрованных трех областей. Единственным отличием является обязательная зашифровка областей 2 и 3 в этом же внешнем складе базисов, а сами строки склада базисов зашифровываются либо в частном внутреннем, либо в частном публичном базисах.
        В целом зашифрованный файл отличается от исходного файла наличием оболочки, не превосходящей по размеру 32000 байт. Структурно зашифрованный файл состоит из смеси областей со случайными байтами и зашифрованных 4 областей. Начинается зашифрованный файл с набора случайных байтов и заканчивается набором случайных байтов. Все зашифрованные области отделены друг от друга наборами случайных байтов. Длины случайных наборов генерируются случайным образом в процессе создания каждого зашифрованного файла.
        Поскольку зашифрованный файл представляет собой набор адресов, то допускается неограниченная повторная зашифровка. В этом случае зашифрованный файл воспринимается как единое целое. Поскольку байты зашифрованного файла и адреса этих байтов в складах никак не связаны, то повторная зашифровка увеличивает мощность зашифровки. Разумеется, при повторной зашифровке создается новая оболочка.
        Процесс зашифровки файла можно считать процессом расшифровки файла, а процесс расшифровки файла можно считать процессом зашифровки файла. Поэтому в программе эти процессы используются равновероятно, увеличивая энтропию.
        Таким образом, без наличия программы, зашифровавшей  файл, расшифровать его физически невозможно. При наличии программы, но при отсутствии внешнего склада базисов, расшифровать файл, зашифрованный во внешнем складе, физически невозможно.
        Для исключения возможности создания программы по взлому исполняемого кода программы исходные коды программы генерируются в терминах случайных наименований процедур и функций, случайного взаимного расположения процедур и функций, случайного расположения независимых частей процедур и функций. После компиляции исходных кодов двух вариантов одной и той же программы исполняемые коды настолько различны, что не позволяют создать программу по взлому нашей программы.
        Наша программа, по-видимому, является одной из самых трудно взламываемых в истории человечества на сегодняшний момент, так как изменяется случайным образом не только ее содержание, но и размер - от 8 до 16 Мегабайт. Более того, наша программа генерирует саму себя. Поэтому колоссальный труд, затраченный на анализ исполняемого кода одного варианта программы, ничего не дает для анализа другого варианта программы. Никакие хакеры, никакие программы-роботы не способны взломать исполняемый код программы, так как количество вариантов записи исходного кода программы превышает 10 в степени 3000.
        Все выше изложенное позволяет нам передавать программу пользователям вместе с исходным кодом. Все равно, едва ли кто разберется с алгоритмом. А если кто, потратив уйму времени, и разберется, то едва ли он будет свой труд даром распространять.
        Описанный алгоритм, только в общих чертах раскрывает содержание программы. Для реализации описанного алгоритма в виде законченного программного продукта пришлось найти решение еще множеству проблем.
        Автор - Андрейчиков Николай Иосифович, кандидат наук, доцент, Россия, Йошкар-Ола, телефон 211272. Электронный адрес: crypto_service собака yahoo точка com. Другие адреса контролируются людьми с холодной головой и горячим сердцем.
Программу можно скачать с сервера   http двоеточие две флэш  allfiles тока ru. Файлы имеют имена [Для просмотра ссылки зарегистрируйтесь] (24113839 байт) - исполняемый код, исходный код, описание, открытые и закрытые пароли,  [Для просмотра ссылки зарегистрируйтесь] (18241258 байт) - исполняемый код, описание, открытые и закрытые пароли, [Для просмотра ссылки зарегистрируйтесь] (7028113 байт) - исходный код, описание, открытые и закрытые пароли.

ксюшечка

Как сложно любить!...Но приходится всё терпеть...и ждать....
МоИ ФоТоОбоИ

The Debaucher

Никакое моральное удовлетворение не может сравниться с аморальным.


Frankenshtain

Молодцы. Работают люди.
Только я не очень понял как у них массив генерируется.
Не надо боятся быть одним, надо боятся быть нулём.

Говорящий не знает, а знающий не говорит.

nik-crypto

Более полная информация на сайте  [Для просмотра ссылки зарегистрируйтесь]   Здесь Вы можете скачать программу, исходный код, более полное описание алгоритма и программы CryptoService.exe  С уважением Андрейчиков Николай Иосифович.



По всем вопросам пишите по адресу gratispp@mail.ru