"Оцифровка" бизнес-процессов.

   
     г. Владимир, г. Гусь-Хрустальный, +7 (910) 778-05-31
Коснитесь для звонка

Криптосистема на C++ с открытым исходным кодом(симметричное шифрование)

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

Качество шифрования:

Качество шифрования очень хорошее, алгоритмы просты и прозрачны. Была проведена проверка по статистическим тестам NIST, которые прямо говорят о качестве шифрования информации и наличии/отсутствии видимых зависимостей. Следует заметить, что  эти тесты разработанны Лабораторией информационных технологий (Information Technology Laboratory), являющейся главной исследовательской организацией Национального института стандартов и технологий (NIST). Более подробно о применении этих тестов для криптографии можно посмотреть в  диссертации "Построение новых статистических тестов и их применение в криптографии"(автор — кандидат физико-математических наук Монарев В.А.). Небольшая выдержка из введения:

Некоторые проблемы современной криптографии также связаны с тестами на случайность. Прежде всего это относится к так называемым блоковым и потоковым шифрам. Приведем их краткое описание. Блоковые шифры обычно используют некоторое преобразования к блокам данных фиксированной длины (обычно 64 бита или 128 бит). К современным блоковым шифрам предъявляется обязательное требование: они в некотором режиме использования (описанном ниже) должны работать, как "хороший" генератор псевдослучайных чисел. Для проверки же "качества" построенных шифров в этом режиме используют статистические тесты. Если же это условие не выполняется, то такой шифр не рекомендуют к применению (в частности, это требование предъявлялось в проводимом В США в 1999-2000 г.г. конкурсе на "блоковый шифр 21-го века").
 

Также можно почитать А. И. Миненко "Экспериментальное исследование эффективности тестов для проверки генераторов случайных чисел".

По итогам могу сказать, что по всем проведенным тестам криптосистема получила оценку "Отлично".

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

Выполнена программа в виде консольного приложения, но есть версия и в виде dll + оболочка на Delphi. Здесь эта версия исполнения не представлена, поскольку консольный вариант на мой взгляд самый универсальный и удобный.

Используется внешний архиватор(7zip) для предварительного сжатия файла и для обеспечения возможности шифрования каталогов. Архиватор должен лежать в том же каталоге, что и исполняемый файл программы.

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

О том, что внутри:

Ключ генерируется с помощью хеш-функции, которая вычисляется от пароля. Хеш-функция используется своя(работает по тому же принципу, что и шифрование — описано ниже), длина выходного значения хеш-функции 2048 бит. Первое значение хеш-функции сохраняется в качестве ключа для первого преобразования алгоритма, а ее значение снова подается на вход хеш-функции. Таким образом получаем следующее значение и сохраняем его в качестве ключа для второго преобразования алгоритма. И так далее — всего генерируется 12 ключей по 2048 бит, итого общая длина ключа: 24576 бит.

Всего алгоритм шифрования включает в себя 4 разновидности преобразований, выполняемых по кругу, друг за другом, 3 раза: итого 12 преобразований(соответственно 12 ключам — на каждое преобразование по ключу). В случае, если длина пароля больше 8 символов, то число преобразований удваивается(всего 24 преобразования), но используются все те же 12 ключей. А если длина пароля больше 16 символов, то утраивается(всего 36 преобразований).

Каждый следующий бит выходных данных зависит от тех, которые были до него. Это одно из четырех возможных преобразований: каждый следующий байт блока изменяется операцией XOR с предыдущим байтом и в таком виде сохраняется. Я назвал этот алгоритм "лавина". При расшифровании выполняется обратная операция.

Кроме того, каждый следующий блок (2048 бит) зашифрованных данных,  накладывается побайтово с помощью опреации XOR на предыдущий блок зашифрованный блок и уже в этом виде шифруется. Таким образом обеспечивается лучшая криптостойкость, в том числе к дифференциальному криптоанализу, ведь каждый следующий блок зашифрованных данных зависит не только от того, какие данные находятся в нем, но от остальных данных.

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

 

Виды выполняемых преобразований:

  1. Перестановка
  2. Циклический битовый сдвиг
  3. Гаммирование(операция XOR)
  4. "Лавина"

 

О хеш-функции:

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

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

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

Исходный код

Исполняемые файлы

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code