id: Гость   вход   регистрация
текущее время 20:50 10/11/2024
Автор темы: nik-andrejchikov, тема открыта 28/07/2005 00:11 Печать
http://www.pgpru.com/Форум/Криптография/ШифрованиеФайловСлучайнымиБайтами
создать
просмотр
ссылки

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


Изобретен и реализован в виде программы способ шифрования файлов случайными байтами. Взлом исключен.

Основная идея шифрования случайными байтами: замена исходных байтов файла на адреса этих байтов в некотором достаточно большом множестве. В качестве такого множества используются строки длиной 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) при расшифровке берем первый байт из зашифрованного файла и ту же самую строку из склада базисов, которую использовали при шифровании. Этот байт преобразуем в число и увеличиваем на единицу для вычисления номера. По этому номеру из строки находим исходный байт файла пользователя и записываем его на место первого байта. Затем берем второй байт из зашифрованного файла и строку из склада базисов, использованную при шифровании второго байта, и восстанавливаем исходное состояние второго байта файла пользователя и т.д.
Как видно из приведенного описания, какая-либо функциональная или статистическая связь между исходными байтами файла пользователя и байтами зашифрованного файла пользователя отсутствует. Это связано с тем, что отсутствует связь между величиной байта и его местом расположения в случайных строках склада базисов. Таким образом, возможность расшифровки файлов, зашифрованных по нашему алгоритму, исключена даже теоретически. Недавно, я где-то читал о квантовых вычислениях, которые должны взламывать любой шифр. Наш алгоритм дает мощный толчок для развития и совершенствования методов расшифровки. Желаем профессионалам всяческих успехов и удач в разработке методов расшифровки наших файлов. Будем надеяться на то, что наши выводы о теоретической невозможности взлома нашего метода, являются ошибочными. В противном случае профессиональные дешифровщики просто исчезнут в связи с ненадобностью.
Далее при реализации описанного алгоритма встали вопросы:
1) где хранить склад базисов;
2) где хранить номера случайных строк, использованных при шифровании;
3) где хранить пароли (ключи), позволяющие пользователю расшифровывать свои зашифрованные файлы.
Мы применили следующие решения перечисленных вопросов:
1) склады хранятся в коде программы и в отдельных файлах:
а) публичный внутренний склад базисов, генерируемый программно, вшит в код программы, у всех программ один и тот же, предназначен для обмена зашифрованными файлами между различными пользователями;
б) частный внутренний склад базисов, генерируемый в момент генерации программы, вшит в код программы, у всех пользователей индивидуален и не повторим, предназначен для защиты информации пользователя;
в) публичный внешний склад базисов, генерируется по желанию пользователю в неограниченном количестве, записывается в отдельный файл, предназначен для обмена зашифрованными файлами между различными пользователями по предварительной договоренности;
г) частный внешний склад базисов, генерируется по желанию пользователю в неограниченном количестве, записывается в отдельный файл, предназначен для защиты информации пользователя.
Склады хранятся в зашифрованном виде, как в коде программы, так и во внешних файлах. Зашифровка производится тем же способом – заменой на адреса в случайных складах. Следует отметить чрезвычайную простоту и чрезвычайно большое количество вариантов шифрования одного и того же файла с одним и тем же складом базисов и одним и тем же паролем.
2) номера строк склада базисов, использованных при шифровании, создаются и сохраняются следующим образом:
а) поскольку длина склада базисов превышает 256, то использовать один байт невозможно. Поэтому генерируются две одинаковые по длине строки, содержащие случайные байты. Длина таких строк изменяется от 512 до 2048 байт. Строки независимы. Берем первый байт из первой строки и первый байт из второй строки. Эти байты увеличиваем на единицу и перемножаем. Находим остаток от деления полученного числа на длину склада базисов и прибавляем к нему единицу. Полученное число есть номер строки склада базисов, использованной для шифрования первого байта файла пользователя. Далее берем второй байт из первой строки и второй байт из второй строки и вычисляем номер второй строки склада базисов, использованной для шифрования второго байта файла пользователя и т.д. и т.п.;
б) случайные строки, используемые для генерации номеров строк склада базисов, храним в оболочке зашифрованного файла пользователя в зашифрованном виде по нашему алгоритму.
3) пароль (ключ) пользователя непосредственно участвует в процессе шифрования. Пароль имеет длину до 1024 байта. Это связано с тем, что байты пароля через один байт записывается либо в первую, либо во вторую строку, генерирующие номера считываемых строк из склада базисов. Всего имеется четыре варианта включения пароля в процесс шифрования: запись либо в первую, либо во вторую строку, запись по четным или нечетным номерам расположения байтов в строке. Все варианты используются случайным образом. Пароль хранится в оболочке зашифрованного файла в зашифрованном виде по нашему алгоритму. Как видно, из приведенного описания в нашем случае пароль может иметь произвольное содержание, в том числе пустое. Кроме того, пароль дополнительно зашифровывается по нашему алгоритму, что увеличивает его энтропию. Никаких проблем с паролями у нас нет.
Оболочка зашифрованного файла имеет случайную длину, у каждого пользователя свои параметры этой оболочки. Общий размер оболочки не превышает 32000 байт. В оболочке содержится информация о действительном имени исходного файла, о его размере, о структуре оболочки, об использовании при шифровании внешнем складе базисов и его имени и другая необходимая информация. Оболочка состоит из трех областей, зашифрованных по нашему алгоритму:
1) единая зашифрованная область длиной от 7000 байт. Расшифровывается целиком и из нее берется информация о месте расположения второй области и о параметрах ее зашифровки;
2) единая зашифрованная область длиной от 2000 байт. Расшифровывается целиком и из нее берется информация о месте нахождения третьей области и параметрах ее зашифровки;
3) единая зашифрованная область длиной от 9000 байт. Расшифровывается целиком и из нее берется информация о месте нахождения зашифрованного файла пользователя и параметрах его зашифровки.
Зашифровка областей оболочки и файла пользователя производятся в разных базисах. Оболочка свое наименование получила в связи с выполнением функции защиты от вирусов – она допускает в разумных пределах изменять начало и конец зашифрованного файла, так как там находятся наборы случайных байтов. Это функция защищает зашифрованный файл от вирусов.
Внешние склады базисов структурно ничем не отличаются от зашифрованного файла пользователя. Они также окружены оболочкой из случайных байтов и зашифрованных трех областей. Единственным отличием является обязательная зашифровка областей 2 и 3 в этом же внешнем складе базисов, а сами строки склада базисов зашифровываются либо в частном внутреннем, либо в частном публичном базисах.
Поскольку зашифрованный файл представляет собой набор адресов, то допускается неограниченная повторная зашифровка. В этом случае зашифрованный файл воспринимается как единое целое. Поскольку байты зашифрованного файла и адреса этих байтов в складах никак не связаны, то повторная зашифровка увеличивает мощность зашифровки. Разумеется, при повторной зашифровке создается новая оболочка.
Процесс зашифровки файла можно считать процессом расшифровки файла, а процесс расшифровки файла можно считать процессом зашифровки файла. Поэтому в программе эти процессы используются равновероятно, увеличивая энтропию.
Таким образом, без наличия программы, зашифровавшей файл, расшифровать его физически невозможно. При наличии программы, но при отсутствии внешнего склада базисов, расшифровать файл, зашифрованный во внешнем складе, физически невозможно.

Для исключения возможности создания программы по взлому исполняемого кода программы исходные коды программы генерируются в терминах случайных наименований процедур и функций, случайного взаимного расположения процедур и функций, случайного расположения независимых частей процедур и функций. После компиляции исходных кодов двух вариантов одной и той же программы исполняемые коды настолько различны, что не позволяют создать программу по взлому нашей программы.

Наша программа, по-видимому, является одной из самых трудно взламываемых в истории человечества, так как изменяется случайным образом не только ее содержание, но и размер – от 8 до 16 Мегабайт. Более того, наша программа генерирует саму себя. Поэтому колоссальный труд, затраченный на анализ исполняемого кода одного варианта программы, ничего не дает для анализа другого варианта программы. Никакие хакеры, никакие программы-роботы не способны взломать исполняемый код программы, так как количество вариантов записи исходного кода программы превышает 10 в степени 3000.
Все выше изложенное позволяет нам передавать программу пользователям вместе с исходным кодом. Все равно, едва ли кто разберется с алгоритмом. А если кто, потратив уйму времени, и разберется, то едва ли он будет свой труд даром распространять.
Описанный алгоритм, только в общих чертах раскрывает содержание программы. Для реализации описанного алгоритма в виде законченного программного продукта пришлось найти решение еще множеству проблем.

 
Комментарии
— unknown (28/07/2005 22:48)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Вот и до нас добрались... Вы бы уж лучше сразу на www.cryptography.ru. Там Вам ответят более компетентно.

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

Мне вспомнилось как на конкурсе AES учавствовал один уважаемый математик, но некомпетентый в криптографии (кажется его шифр назывался HPC). Всерьез его даже никто не анализировал.
Можно быть даже хочень хорошим математиком и программистом, но плохим криптографом.

Еще вспомнилось как Шнайер на обвинения в плагиате отвечал, что поначалу он читал шифры, присылаемые ему любителями, но затем просто выбрасывал.

Можно быть абсолютным гением, но если не знать основ криптографии, не уметь излагать свои мысли так, как это принято в профессиональной (или хотя бы полупрофессиональной) среде, то нет смысла этим заниматься.

Если бы специалист излагал подобный алгоритм, то он бы оперировал другими понятиями – "шифры Маурера" (чем Ваши исследования в этой области превосходят работы Маурера?). Последние исследования показали безперспективность мауреровских и псевдомауреровских шифров.

Никаких попыток криптоанализа, дилентантский язык, провокационно-самоуверенная манера (и скорее всего незнание даже элементарных основ криптографии) тоже не добавляют доверия к Вашим изысканиям.

Почитайте старую работу Шнайера -"Memo to amateur cipher designer". Если сможете выполнить те задания которые там есть (взломать упрощенные версии DES, RC5), то можете считать себя практикующим криптографом. Только таких людей полно. И любительских шифров полно. И никто их не будет изучать, если они хотя бы внешне не будут походить на серьезные работы.

А интерес к работам возникает, только если у человека много исследований или даже открытий в области криптоанализа, опубликованных в научной среде и получивших признание. Только тогда кто-то может обратить внимание на его шифр.


P. S. Судя даже по достаточно нелогичному описанию Ваш алгоритм должен элементарно вскрываться.
Использование таймера Rnd(Timer) позволяет перебрать все ключи "генерации базисов" (< 2^32 если не ошибаюсь?).
После этого расшифруется пароль, раз его так заботливо еще и подложили в файл.
Сама генерация происходит по абсолютно примитивному линейному алгоритму. Манипуляция с вложенными "друг в друга" или какими-то "самомодифицирующимися складами базисов" ситуацию не спасут и дадут примитивный аналог псевдомауреровского шифра. "Случайность" или "псевдослучайность гаммы" не означает ее криптостойкости. Мое лично мнение: устарело, непрактично, некриптостойко. Уступает практически всем известным потоковым шифрам.

P. S. S. Сравните свой шифр с шифрами Маурера или RC4 (даже в нем спустя годы открыли отклонения в начальном периоде гаммы).

P. S. S. S. В связи с широким распространением криптографии в последнее время участились случаи острой и хронической криптомании среди населения (как всегда, прошу не обижаться). Но если ветка будет такой же неконструктивной с Вашей стороны, как на других сайтах мы будем вынуждены ее закрыть.
— Гость (31/07/2005 01:15)   <#>
цитата " связи с широким распространением криптографии в последнее время участились случаи острой и хронической криптомании среди населения"
ха
точно сказано
— Гость (17/08/2005 10:54)   <#>
Программу можно скачать с сервера: http двоеточие две флэш allfiles точка ru имена файлов kompFull.zip (24113839 байт) – исполняемый код, исходный код, описание, открытые и закрытые пароли, kompKod.zip (18241258 байт) – исполняемый код, описание, открытые и закрытые пароли, kompProg.zip (7028113 байт) – исходный код, описание, пароли. Всем привет.
— Гость (25/11/2005 17:08)   <#>
Более полную информацию можно получить на сайте http://crypto-service.narod.ru Здесь можно скачать программу, исходный код, наиболее полное описание алгоритма и программы. С уважением Андрейчиков Николай Иосифович.
— unknown (25/11/2005 17:54)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Какая прелесть! Программа еще и продается за деньги:
http://crypto-service.narod.ru/buy.html


В ее дистрибутив в качестве приложения к инструкции можно было бы включить файл:
http://www.pgpru.com/articles/.....neier_snakeoil.shtml
— Observer (26/11/2005 17:23)   профиль/связь   <#>
комментариев: 111   документов: 9   редакций: 22
Соображения.
Я бы не стал скачивать софт для защиты с паблик-хоста коим является народ.ру
Здесь выходит на первое место вопрос доверия к автору софта. Мой личный, шкурный, подлый, эгоистичный вопрос доверия. Кто даст гарантию отсутствия в кодах бэкдора? Кто даст гарантию отсутствия элементарных ошибок, которые могут привести к вскрытию защиты?

Откуда такой пессимизм? А я себе задаю вопрос:"что бы сделал ты, получив задание ослабить защиту субъекта?" – вот именно это всё я бы и сделал... И ни в коем случае не давал бы исходники на просмотр спецам. Ну, написал бы..., мол посмотрели – мин нет. Если бы припёрло, то подсунул бы спецам чистый вариант, без закладок... и сразу бы выложил "хакерский" патч вскрывающий защиту триала, который делает из триала фулл версию с.... да, с закладками, конечно... Мол, хакеры, сволочи, а я весь в белом...

Эх... во мне такой подлец погибает... даже обидно.
— unknown (26/11/2005 20:00)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Эх... во мне такой подлец погибает... даже обидно.

Вы себе немного льстите. Подлецов и без вас хватает. И думаю еще более изощренных. Так что лучше оставайтесь честным и весь в белом.
— Lustermaf (24/02/2006 12:33)   профиль/связь   <#>
комментариев: 225   документов: 8   редакций: 2
Теперь автор предлагает деньги за расшифровку. Впрочем, это подпадает под симптом №9.
— Mell (24/02/2006 16:18)   профиль/связь   <#>
комментариев: 9   документов: 1   редакций: 0
Бугага :D жюлик
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3