Перейти к контенту
timour

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

Рекомендуемые сообщения

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

Основная идея шифрования случайными байтами состоит в замене исходных байтов файла на адреса исходных байтов файла в некотором достаточно большом множестве. В качестве такого множества используется двумерный массив, состоящий из случайных строк байтов длиной по 256 байт. Каждая строка содержит все 256 байтов ровно по одному разу. Количество строк в двумерном массиве является случайной величиной и достигает 2048 строк.

Научная новизна алгоритма и программы:

1)Опровергается чудовищное заблуждение, которое звучит примерно так: если известен алгоритм зашифровки файла, то всегда этот файл можно расшифровать. Наш алгоритм открыт, а расшифровка невозможна.

2)Опровергается чудовищное заблуждение, которое звучит примерно так: следует считать, что нападающей стороне известны алгоритмы шифрования и все данные, кроме ключа. В этом утверждение ошибочно суждение относительно всех данных. Наша программа и алгоритм доказывают ошибочность этого суждения фактом своего существования.

3)Выявлена сущность понятия случайности. Случайность – это способ доступа к бесконечности в целом. Именно только случайность позволяет выбрать абсолютно все элементы из бесконечного множества элементов. Через случайность бесконечность становится доступной человеку.

4)По существу, нами предложен механизм генерирования случайных последовательностей байтов произвольной длины. Иными словами, наш алгоритм можно рассматривать и использовать как генератор случайных наборов байтов произвольной длины.

5)Генерация случайных байтов производится с использованием функции RND(Timer). Количество возможных псевдослучайных значений составляет 4294967296 (2 в степени 32). Однако, отображение этих всех значений через механизм взятия модуля по основанию 256 приводит к равномерному, но уже случайному распределению байтов.

Достоинства алгоритма и программы:

1)Чрезвычайная простота алгоритма.

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

3)Чрезвычайная легкость в использовании алгоритма.

4)Использование в качестве ключей произвольных по содержанию и размеру файлов.

5)Хранение ключей и другой необходимой информации в зашифрованном файле в зашифрованном виде. Невозможность установления места нахождения в зашифрованном файле ключа и другой информации, в том числе места нахождения самого зашифрованного файла. Хакерам придется отдохнуть.

6)Невозможность взлома зашифрованного файла без наличия программы, зашифровавшей файл.

7)Открытость исходного кода программы и алгоритма шифрования.

8)Невозможность создания программы по взлому исполняемого кода программы. Хакерам придется отдохнуть.

9)Защита зашифрованного файла от любых вирусов.

Генерация случайных строк осуществляется по следующему алгоритму:

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 и пятьсот шесть нулей). Поэтому мы решили использовать порции в количестве до 2048 строк. Количество вариантов генерации одной порции в 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 и миллион нулей).

Итак, для шифрования будем использовать массивы случайных строк в количестве до 2048. Такой массив, мы назвали складом базисов шифрования. Алгоритм зашифровки файла пользователя состоит в следующем:

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.

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

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

Юридические основания использования программы. В соответствии с п. 2 ст. 1 Закона РФ "О лицензировании отдельных видов деятельности" действие этого закона не распространяется на использование результатов интеллектуальной деятельности.

В соответствии со ст. 7 Закона РФ "Об авторском праве и смежных правах" программа для ЭВМ является объектом авторского права и относится к категории литературных произведений. Литературная деятельность не может лицензироваться или сертифицироваться. Аналогичные нормы права содержит Закон РФ "О правовой охране программ для электронных вычислительных машин и баз данных". В соответствии с этим же законом программы для ЭВМ не подлежат обязательной государственной регистрации. Таким образом, для приобретения и использования настоящей программы ничьих разрешений, сертификатов или государственной регистрации не требуется.

Обращаться к автору: Андрейчикову Николаю Иосифовичу, тел.: (8362)-211272 дом., 412112 раб., почтовый адрес: 424033, г. Йошкар-Ола, ул. Эшкинина, д. 6, кв. 89, E-mail: nikolay@mari-el.ru, nik-andrejchikov@rambler.ru, crypto_service@yahoo.com

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

А в чем собственно говоря пожелания к разработчикам?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрите ниже какой простой и маленький алгоритм шифрования. Вот эта процедура шифрует или расшифровывает строку cs351. Алгоритм не взламывается даже теоритически. Очень просто вшить алгоритм в железо. Может быть пожелаете использовать?

Public Sub cs591(cs244 As Integer, cs351 As String, Optional cs236 As String, Optional cs389 As String)

Dim cs261 As Integer, cs042 As Integer, cs101 As Integer, cs009 As Long

Dim cs394 As Integer, cs110 As Integer, cs326 As Integer, cs149 As Integer, cs086 As Integer

Select Case cs244

Case 0, 1

cs394 = UBound(cs875)

cs042 = LenB(cs351)

cs261 = LenB(cs236)

For cs326 = 1 To cs042

cs149 = cs326 Mod cs261 + 1

cs110 = AscB(MidB(cs236, cs149, 1))

cs009 = CLng(cs110 + 1)

cs110 = AscB(MidB(cs389, cs149, 1))

cs009 = cs009 * CLng(cs110 + 1)

cs101 = cs009 Mod cs394 + 1

Select Case cs244

Case 0

cs086 = InStrB(cs875(cs101), MidB(cs351, cs326, 1))

MidB(cs351, cs326, 1) = ChrB(cs086 - 1)

Case Else

cs086 = AscB(MidB(cs351, cs326, 1))

MidB(cs351, cs326, 1) = MidB(cs875(cs101), cs086 + 1, 1)

End Select

Next cs326

Case Else

End Select

End Sub

Случайная величина генерируется по следующему алгоритму:

Randomize Timer

cs001 = Int(20000*Rnd) + 10000

cs001 = cs001 Mod 256

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Во всех наших продуктах используется алгоритм шифрования ГОСТ по-умолчанию. Криптостойкость этого алгоритма очень высока. Предложенный Вами алгоритм возможно интересен с точки зрения программирования и реализации, но одна беда - он не сертифицирован. Следовательно его нельзя применять для шифрования данных согласно РД Гостехкомиссии и ФСБ. Так же вызывает сомнение возможность сертифицирования всего комплекса в целом с таким алгоритмом шифрования.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

К сожалению в России не поддерживается патентование алгоритмов и программ. Эти объекты относятся по закону к литературной деятельности. Поэтому сертификация программ - это бред росийской бюрократии, а не требование закона. Да, для использования для государственных нужд чиновники от ФСБ могут устраивать сертификацию и еще чего-нибудь. Если же требовать сертификации программ в рамках общества, то тогда нужно требовать сертификации литературных произведений. Представляю, как происходит сертификация Войны и мира Л.Н. Толстого. Поэтому аргументы о лицензировании и сертификации отклоняю как незаконные.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе утро timour

Незаконные говорите? Тогда попробуйте организовать компанию занимающуюся разработкой и продажей (или хотя бы предоставлением услуг) средств криптографической защиты информации БЕЗ лицензии ФСТЭК на работу в этой сфере и попытаться продать Ваш программный продукт в любую, даже самую "незначительную" ГосОрганизацию. Да куда угодно!!! Практически все более-менее заинтересованые в сохранности своей информации компании в первую очередь спросят Вас о наличии соответствующих лицензий и сертификатов. И это, простите, не "бред российской бюрокаратии", а вполне законные требования. И ни про какие сертификации в рамках общества не идет речь. На ту же "Войну и Мир" можно было-бы поставить копирайт (к сожалению, в то время с этим было туго), как это делается сейчас. Так что, приведенное Вами сравнение некорректно, т.к. это АБСОЛЮТНО разные вещи.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я говорю о законности, а Вы говорите о том, что незаконные требования Вы желаете исполнять. Да, исполняйте, ради бога. Я придерживаюсь всегда следующей тактики действий: я не исполняю незаконные требования госдарственных органов. Они часто пытаются провести их в жизнь и быстро выясняется, что их требования незаконны. Я готов оздать любую фирму и торговать своей и аналогичной продукцией и никто мне ничего не сделает. Сейчас у меня проблема в другом, наш алгоритм опередил время на несколько десятилетий. Поэтому сейчас приходится на форумах объяснять содержание алгоритма. Все равно очень много людей, для которых открытый алгоритм шифрования является глупостью в смысле стойкости. В этом все дело, а не в отсутствии правовых механизмов.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе утро timour

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

Да и с таким подходом к нашим регулирующим госорганам Вы скорее всего не сможете вывести Ваш продукт на рынок.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вы правы, у меня отношения с органами никак не складываются. Наверное, вина во мне. С другой стороны, почему-то реализуется пословица: куда органы не целуй, везде задница.

Самое главное, что я вынес из общения - это алгоритм действительно уникален и чрезвычайно эффективен. Ну а практическая реализация возможна только тогда, когда поверят в это достаточно большое число людей.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый вечер timour

Я бы не стал делать столь громких выводов. Не все простое - гениально, и, увы, не все генальное - просто.

Да, и еще, коль скоро, как Вы утверждаете, Ваш алгоритм настолько криптостоек, почему же он нигде не применяется? Насколько мне известно, талантливых крипторафов сразу берут под свою опеку соответствующие службы (в хорошем смысле слова) и они неплохо зарабатывают.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

К сожалению я уже не молод. Соответствующие службы я не люблю. Поздно мне в шпионы играть. А соответствующим службам нужно только это. Если хотите я могу выслать Вам описание программы - файл в формате zip объемом 740 кбайт, могу выслать исполняемый код варианта программы - файл в формате zip объемом около 3 мегабайт, исходный код - файл в формате zip объемом около 3 мегабайт. Только имейте в виду, что исходный код генерируется программой, поэтому очень сложен в восприятии. Программа при создании тестировалась на файлах объемом 1 байт и файлах объемом 200000 байт, но состоящих из одинаковых байтов. Результат великолепен. Представьте - файл объемом 200 кбайт, состоящий из всех одинаковых байтов 255, превращается в абсолютную абракадабру, не сжимаемую архиваторами.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я вот извиняюсь, но зачем тебе шифрование логов? ну маленький примерчик

Ты боишься что кто то их прочитает и узнает что ты матом ругаешься? Тогда не ругайся матом.

Ты боишься что кто то их прочитает и узнает что то такое чего ему не надо знать, так может просто отключать эту функцию?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Коллеги,

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

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

-----------------------------------------

C уважением,

администрация форума Infotecs.ru

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×

Важная информация

By using this site, you agree to our Условия использования.