Инструменты исследований и разработок информационных систем
information systems research and development tools
Библиотека симметричного шифрования Кузнечик OFB по ГОСТ 34.12-2018 и ГОСТ 34.13-2018
isrdt-kuznechik
Описание
Библиотека содержит алгоритм шифрования Кузнечик в режиме гаммирования с обратной связью по выходу (OFB, Output Feedback) с параметрами: усечения длины строки гаммы s=128 бит (без усечения) и размером регистра гаммы z=1 и m=256 бит (две минимальные гаммы) согласно ГОСТ 34.12-2018 (ГОСТ Р 34.12-2015) и ГОСТ 34.13-2018 (ГОСТ Р 34.13-2015) для платформ amd64 и ATmega328P. Вычисления оптимизированы по использованию оперативной памяти и скорости обработки. Оптимизация выполнена за счёт предвычислений и алгебраических методов.
Согласно требованиям ГОСТ 34.13-2018 (ГОСТ Р 34.13-2015) для режима гаммирования с обратной связью по выходу (OFB, Output Feedback) на одном ключе для каждого отдельного открытого текста используется значение уникальной или непредсказуемой (случайной или псевдослучайной) синхрополыски.
Авторские права
Copyright © 2025 Anatolii M. Kukartsev amkukarcev@yandex.ru. All rights reserved.
Основные файлы проекта предоставляются под лицензией Mozilla Public License Version 2.0, полный текст лицензии можно получить по адресу https://mozilla.org/MPL/2.0/.
Файлы тестов предоставляются под лицензией The MIT License (MIT), полный текст лицензии можно получить по адресу https://mit-license.org/.
Пожертвования
Проект является свободным программным обеспечением и не имеет финансирования кроме пожертвований. Если у Вас есть желание и возможность поддержать проект, то можно воспользоваться:
Ветки, версии и значения производительности
Основная ветка amd64
Содержит реализацию для платфоры amd64, покрытие кода тестами 100%. Параметры испытательного стенда:
- процессор Intel(R) Core(TM) i7-7820X CPU @ 3.60GHz, 2 ядра;
- оперативная память 8 ГиБ;
- подкачка отключена;
- операционная система Astra Linux Special Edition 1.7.5.9;
- компилятор gcc version 8.3.0 (AstraLinuxSE 8.3.0-6).
Результаты испытаний
Ветка | Версия | Тест 1 КиБ, мксек |
Тест 1 МиБ, мксек |
Тест 100 МиБ, мксек |
Тест 250 МиБ, мксек |
Тест 500 МиБ, мксек |
Объём констант, байт |
---|---|---|---|---|---|---|---|
amd64 | 0.0.0.0.0 | 9 660 | 10 019 347 | - | - | - | 768 |
amd64 | 0.0.0.0.1 | 2 015 | 2 002 685 | - | - | - | 768 |
amd64 | 0.0.0.0.2 | 1 857 | 1 904 539 | - | - | - | 768 |
amd64 | 0.0.0.0.3 | 1 463 | 1 446 894 | - | - | - | 768 |
amd64 | 1.0.0.0.0 | 10 137 | 9 915 399 | - | - | - | 768 |
amd64 | 1.0.0.0.1 | 2 033 | 1 999 696 | - | - | - | 768 |
amd64 | 1.0.0.0.2 | 1 802 | 1 841329 | - | - | - | 768 |
amd64 | 1.0.0.0.3 | 1 441 | 1 444 453 | - | - | - | 768 |
amd64 | 1.0.1.0.0 | 227 | 213 027 | 21 259 585 | - | - | 2 560 |
amd64 | 1.0.1.0.1 | 107 | 103 965 | 10 390 755 | - | - | 2 560 |
amd64 | 1.0.1.0.2 | 93 | 99 697 | 9 892 831 | - | - | 2 560 |
amd64 | 1.0.1.0.3 | 92 | 98 934 | 9 863 168 | - | - | 2 560 |
amd64 | 1.0.2.0.0 | 206 | 198 999 | 20 185 394 | - | - | 4 352 |
amd64 | 1.0.2.0.1 | 90 | 87 194 | 8 765 082 | - | - | 4 352 |
amd64 | 1.0.2.0.2 | 83 | 93 710 | 8 947 373 | - | - | 4 352 |
amd64 | 1.0.2.0.3 | 84 | 89 488 | 8 987 542 | - | - | 4 352 |
amd64 | 1.0.3.0.0 | 164 | 174 723 | 17 420 806 | - | - | 4 352 |
amd64 | 1.0.3.0.1 | 31 | 34 580 | 3 321 074 | - | - | 4 352 |
amd64 | 1.0.3.0.2 | 34 | 33 659 | 3 336 607 | - | - | 4 352 |
amd64 | 1.0.3.0.3 | 34 | 37 475 | 3 640 831 | - | - | 4 352 |
Основная ветка ATmega328P
Содержит реализацию для платфоры ATmega328P, покрытие кода тестами 100%. Параметры испытательного стенда:
- процессор ATmega328P 16 МГц;
- оперативная память 2048 байт;
- максимальный объём микропрограммы 32 КиБ.
Результаты испытаний
Ветка | Версия | Тест 512 байт, мксек |
Объём микропрограммы, байт |
Объём ОЗУ, байт |
---|---|---|---|---|
ATmega328P | 0.0.0.0.0 | 1 284 004 | 4 350 (13%) | 268 (13%) |
ATmega328P | 0.0.1.0.0 | 145 238 | 6 100 (18%) | 268 (13%) |
ATmega328P | 0.0.2.0.0 | 89 976 | 11 954 (37%) | 268 (13%) |
ATmega328P | 0.0.3.0.0 | 63 742 | 10 714 (33%) | 268 (13%) |
Нумерация версий
Версия сборки проекта включает четыре компоненты и признак оптимизации
<major>.<minor>.<revision>.<patch>.<optimization>
где компоненты определяют:
- <major> - добавление новых объектов и методов обработки (происходит изменение интерфейса библиотеки);
- <minor> - добавление дополнительных методов обработки к имеющимся объектам (происходит изменение интерфейса библиотеки);
- <revision> - изменение существующих объектов и методов обработки (рефакторинг и оптимизация);
- <patch> - исправление ошибок в существующих объектах и методах.
- <optimization> - признак оптимизации компилятором
При изменении компонент <major> и <minor> меняется интерфейс библиотеки. Поэтому при изменении этих компонент должен пересобираться пакет разработки isrdt-stribog.
Управление сборкой
Основной файл сборки makefile специального содержимого. Для взаимодействия со средой разработки qrcreator прилагается файл .pro.user, который уже подготовлен для работы со специальным makefile.
Важно! При миграции проекта на другую машину создаётся новый файл .pro.user. Для эффективной работы нужно получить из него EnvironmentId и вручную переписать этот параметр в старом файле .pro.user. В этом случае все настройки среды, включая этапы сборки, отладки и запуска, qtcreator мигрируют.
Компиляция производится с помощью g++ (версия не ниже 4).
Сборка осуществляется с помощью make:
- make - сборка проекта (программы или библиотеки);
- make release-test - сборка тестов;
- make debug - сборка отладочной версии для GDB;
- make debug-test - сборка отладочной версии тестов;
- make build-coverage - сборка версии для анализа покрытия gcov;
- make build-coverage-test - сборка версии для анализа покрытия gcov тестов.
Важно! При сборке для работы с тестами исключается одноимённый с проектом файл исходных текстов, содержащий функцию main(). Для библиотеки этот файл обычно пуст.
Версия сборки содержится в файле changelog и включает в себя параметр оптимизации, который непосредственно задаёт параметр g++ -On. Допустимые значения:
- 0 - без оптимизации;
- 1 - оптимизация -O1;
- 2 - оптимизация -O2;
- 3 - оптимизация -O3.
Запуск собранной версии:
- make start - запускает проект;
- make test - запускает тесты;
- make start-coverage - запускает анализ покрытия кода программы;
- make coverage - запускает анализ покрытия кода тестов.
Сборка deb-пакетов осуществляется:
- make deb - собирает бинарную библиотеку;
- make deb-dev - собирает заголовочные файлы библиотеки.
Сборка документации осуществляется:
- make doc - собирает doxygen документацию в виде html и в виде pdf.
Служебные цели:
- make clean - вычищает проект.
Описание
Реализации оптимизированного математическими и техническими методами алгоритма шифрования Кузнечик согласно ГОСТ 34.12-2018 (ГОСТ Р 34.12-2015) для платформ amd64 и ATMega328P