Криптосистема на C++ с открытым исходным кодом(симметричное шифрование)
- 2013-06-09
- Автор: admin
- Рубрика: Защита информации, Криптография
Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 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 на предыдущий блок зашифрованный блок и уже в этом виде шифруется. Таким образом обеспечивается лучшая криптостойкость, в том числе к дифференциальному криптоанализу, ведь каждый следующий блок зашифрованных данных зависит не только от того, какие данные находятся в нем, но от остальных данных.
Криптосистема осуществляет контроль правильности при расшифровании, используя функцию хеширования: с исходных данных снимается хеш, который записывается в начале зашифрованного файла, а при расшифровании снимается хеш с расшифрованных данных и результаты сравниваются.
Виды выполняемых преобразований:
- Перестановка
- Циклический битовый сдвиг
- Гаммирование(операция XOR)
- "Лавина"
О хеш-функции:
На вход хеш-функции подается значение, которое является ключем для нескольких преобразований(перестановки, лавины и циклического битового сдвига). Преобразованию подрвегается фиксированное значение, зашитое в теле функции.
Если результат вычисления хэш-функции без каких-либо изменений и дополнений снова подается на вход той же хэш-функции и так повторяется многократно (в нашей системе по такому принципу генерируются ключи), мы можем получить вырождение хэша. Вырождение возникает, когда любые входные сообщения отображаются в очень малое множество выходных значений и вероятность подбора двух сообщений с одинаковым значением хэша становится сравнительно большой.
Для того чтобы хэш не вырождался при циклическом вычислении, необходимо на каждом раунде подавать на вход хэш-функции некоторые новые данные, например номер раунда. Я поступил по другому — после каждого цикла преобразований, пускал "лавину" — делал каждый следующий символ зависимым от предыдущего.
Исходный код
Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".