Инструменты исследований и разработок информационных систем
information systems research and development tools
Библиотека вычисления контрольных сумм ГОСТ 34.11-2018 (ГОСТ Р 34.11-2012)
isrdt-stribog
Описание
Библиотека содержит алгоритмы вычисления контрольных сумм ГОСТ 34.11-2018 (ГОСТ Р 34.11-2012) для платформ amd64 и ATmega328P. Поддерживаются вычисления обеих длин контрольных сумм 512 бит и 256 бит. Вычисления оптимизированы по использованию оперативной памяти и скорости обработки. Оптимизация выполнена за счёт предвычислений и алгебраических методов.
Начиная с версии 1.0 добавлен оптимизированный расчёт единственного блока 512 бит для анализа информационной безопасности парольных систем на базе ГОСТ 34.11-2018 (например Astra Linux Special Edition версии 1.3 и выше).
Авторские права
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 МиБ, мксек |
Тест 20 млн паролей, мксек |
Объём констант, байт |
---|---|---|---|---|---|---|---|---|
amd64 | 0.0.0.0.0 | 1 527 | 1 221 112 | - | - | - | - | 1 600 |
amd64 | 0.0.0.0.1 | 1 014 | 843 183 | - | - | - | - | 1 600 |
amd64 | 0.0.0.0.2 | 964 | 790 697 | - | - | - | - | 1 600 |
amd64 | 0.0.0.0.3 | 721 | 609 202 | - | - | - | - | 1 600 |
amd64 | 0.0.1.0.0 | 277 | 224 064 | 22 142 838 | - | - | - | 2 012 |
amd64 | 0.0.1.0.1 | 66 | 59 905 | 5 540 266 | - | - | - | 2 012 |
amd64 | 0.0.1.0.2 | 60 | 52 928 | 5 185 500 | - | - | - | 2 012 |
amd64 | 0.0.1.0.3 | 59 | 51 558 | 4 928 357 | - | - | - | 2 012 |
amd64 | 0.0.2.0.0 | 153 | 125 573 | 12 028 302 | - | - | - | 3 136 |
amd64 | 0.0.2.0.1 | 40 | 32 325 | 3 153 650 | - | - | - | 3 136 |
amd64 | 0.0.2.0.2 | 33 | 28 095 | 2 711 273 | - | - | - | 3 136 |
amd64 | 0.0.2.0.3 | 31 | 27 418 | 2 513 546 | - | - | - | 3 136 |
amd64 | 0.0.3.0.0 | 84 | 73 006 | 6 763 338 | - | - | - | 17 472 |
amd64 | 0.0.3.0.1 | 26 | 24 034 | 2 330 037 | - | - | - | 17 472 |
amd64 | 0.0.3.0.2 | 21 | 17 963 | 1 789 219 | - | - | - | 17 472 |
amd64 | 0.0.3.0.3 | 20 | 19 300 | 1 671 131 | - | - | - | 17 472 |
amd64 | 0.0.4.0.0 | 70 | 64 900 | 5 998 57 | - | - | - | 17 216 |
amd64 | 0.0.4.0.1 | 32 | 28 003 | 2 510 595 | - | - | - | 17 216 |
amd64 | 0.0.4.0.2 | 17 | 15 971 | 1 567 156 | - | - | - | 17 216 |
amd64 | 0.0.4.0.3 | 14 | 12 303 | 1 198 134 | - | - | - | 17 216 |
amd64 | 0.0.5.0.0 | 62 | 52 631 | 5 049 807 | 12 640 953 | 25 276 353 | - | 17 216 |
amd64 | 0.0.5.0.1 | 17 | 14 236 | 1 368 097 | 3 425 993 | 6 855 039 | - | 17 216 |
amd64 | 0.0.5.0.2 | 14 | 12 588 | 1 254 369 | 3 146 270 | 6 283 869 | - | 17 216 |
amd64 | 0.0.5.0.3 | 13 | 11 854 | 1 179 690 | 2 995 344 | 6 010 826 | - | 17 216 |
amd64 | 0.0.6.0.0 | 61 | 51 567 | 4 968 303 | 12 446 337 | 24 802 891 | - | 17 152 |
amd64 | 0.0.6.0.1 | 13 | 10 520 | 994 337 | 2 507 819 | 5 066 533 | - | 17 152 |
amd64 | 0.0.6.0.2 | 11 | 9 660 | 899 893 | 2 262 147 | 4 539 694 | - | 17 152 |
amd64 | 0.0.6.0.3 | 11 | 9 340 | 914 794 | 2 291 163 | 4 581 247 | - | 17 152 |
amd64 | 0.0.7.0.0 | 53 | 47 590 | 4 741 342 | 11 891 433 | 23 774 477 | - | 16 384 |
amd64 | 0.0.7.0.1 | 11 | 8 829 | 867 286 | 2 176 428 | 4 378 868 | - | 16 384 |
amd64 | 0.0.7.0.2 | 10 | 8 844 | 870 056 | 2 175 025 | 4 350 688 | - | 16 384 |
amd64 | 0.0.7.0.3 | 11 | 9 600 | 914 339 | 2 284 312 | 4 570 518 | - | 16 384 |
amd64 | 0.1.0.0.0 | 49 | 41 402 | 3 919 981 | 9 825 560 | 19 647 150 | - | 16 448 |
amd64 | 0.1.0.0.1 | 10 | 8 973 | 866 879 | 2 180 541 | 4 365 497 | - | 16 448 |
amd64 | 0.1.0.0.2 | 10 | 8 392 | 820 354 | 2 049 849 | 4 096 603 | - | 16 448 |
amd64 | 0.1.0.0.3 | 11 | 9 169 | 891 547 | 2 225 930 | 4 449 730 | - | 16 448 |
amd64 | 1.0.0.0.0 | 44 | 40 399 | 3 899 576 | 9 823 821 | 19 640 712 | 14 257 749 | 16 448 |
amd64 | 1.0.0.0.1 | 11 | 9 439 | 906 202 | 2 267 127 | 4 533 565 | 2 994 423 | 16 448 |
amd64 | 1.0.0.0.2 | 11 | 8 732 | 823 044 | 2 052 943 | 4 107 954 | 3 003 002 | 16 448 |
amd64 | 1.0.0.0.3 | 12 | 9 279 | 922 889 | 2 301 312 | 4 604 026 | 3 419 007 | 16 448 |
Основная ветка ATmega328P
Содержит реализацию для платфоры ATmega328P, покрытие кода тестами 100%. Параметры испытательного стенда:
- процессор ATmega328P 16 МГц;
- оперативная память 2048 байт;
- максимальный объём микропрограммы 32 КиБ.
Результаты испытаний
Ветка | Версия | Тест 512 байт, мксек |
Объём микропрограммы, байт |
Объём ОЗУ, байт |
---|---|---|---|---|
ATmega328P | 0.0.0.0.0 | 526 184 | 3 732 (11%) | 402 (19%) |
ATmega328P_tiny | 0.1.0.0.0 | 526 172 | 3 656 (11%) | 398 (19%) |
ATmega328P_tiny | 0.2.0.0.0 | 526 164 | 3 622 (11%) | 396 (19%) |
ATmega328P | 0.0.1.0.0 | 375 444 | 4 674 (14%) | 402 (19%) |
ATmega328P | 0.0.2.0.0 | 339 632 | 4 382 (13%) | 402 (19%) |
ATmega328P | 0.2.2.0.0 | 339 580 | 4 160 (12%) | 396 (19%) |
ATmega328P | 0.2.3.0.0 | 218 948 | 5 186 (16%) | 396 (19%) |
ATmega328P | 0.2.4.0.0 | 214 196 | 5 148 (15%) | 396 (19%) |
ATmega328P | 0.2.5.0.0 | 137 608 | 19 138 (59%) | 396 (19%) |
Нумерация версий
Версия сборки проекта включает четыре компоненты и признак оптимизации
<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.11-2018 (ГОСТ Р 34.11-2012) для платформ amd64 и ATMega328P