1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
*******************************************************************************
\file info.h
\brief Common info
\project bee2 [cryptographic library]
\created 2012.04.01
\version 2023.02.12
\copyright The Bee2 authors
\license Licensed under the Apache License, Version 2.0 (see LICENSE.txt).
*******************************************************************************
*/
/*!
*******************************************************************************
\file info.h
\brief Общая информация
*******************************************************************************
*/
/*!
*******************************************************************************
\mainpage Библиотека Bee2
\version 2.1.8
\section toc Содержание
-# \ref descr
-# \ref make
-# \ref license
\section descr Описание
Библиотека Bee2 реализует алгоритмы и протоколы криптографических
стандартов Республики Беларусь (СТБ 34.101.31,45,47,60,66,77,78,79).
Библиотека написана на языке Си, без ассемблерных вставок и поэтому
компилируется практически на любой аппаратно-программной платформе.
В низкоуровневые функции передаются указатели на память, в которой
размещаются состояния алгоритмов / протоколов и локальные переменные.
Память может содержать критические объекты (ключи), и поэтому взята под
контроль. Память выделяется только в высокоуровневых функциях и только
одним блоком: в нем размещаются и состояние, и стек всех подчиненных
функций. Блок может защищаться от попадания в файл подкачки. При
завершении работы с блоком его очистка выполняется так, что не может
показаться бесполезной оптимизатору, и он ее не исключит из кода
библиотеки.
В Bee2 реализуется программа полной регуляризации. Регуляризация состоит в
отказе от ветвлений, условия которых определяются критическими данными.
Отказ от ветвлений блокирует атаки, основанные на замерах времени или
питания.
Выделены предусловия -- они названы ожиданиями, -- проверить которые
вычислительно трудно: простота числа, неприводимость многочлена,
корректность эллиптической кривой. Функции не полагаются на безусловное
выполнение ожиданий и корректно работают даже при их нарушении.
Высокоуровневые функции объединяются в связки. Функции связки используют
общее состояние и стек, они похожи на методы класса C++. В необходимых
случаях объявляются ожидания относительно последовательности вызовов
функций связки.
Большое внимание уделено выбору оптимальных арифметических алгоритмов.
Разработаны новые алгоритмы арифметики больших чисел.
Работа с алгебраическими структурами реализована через достаточно общие
интерфейсы. Например, интерфейс qr описывает работу с абстрактным кольцом
вычетом по модулю его идеала. Интерфейс qr инстанциируется многими
способами: zm -- кольцо вычетов целых чисел, pp -- кольцо многочленов, gfp --
простое поле из p > 2 элементов, gf2 -- поле характеристики 2.
\section make Сборка
Подготовка конфигурационных файлов:
\verbatim
mkdir build
cd build
cmake [-DCMAKE_BUILD_TYPE={Release|Debug|Coverage|ASan|ASanDbg|MemSan|MemSanDbg|Check}]\
[-DBUILD_FAST=ON]\
[-DBASH_PLATFORM={BASH_32|BASH_64|BASH_AVX2|BASH_AVX512|BASH_NEON}] ..
\endverbatim
Конфигурации:
- Release -- окончательная (по умолчанию);
- Debug -- отладочная;
- Coverage -- со средствами мониторинга покрытия;
- ASan, ASanDbg -- со средствами проверки адресов (AddressSanitizer);
- MemSan, MemSanDbg -- со средствами проверки памяти (MemorySanitizer);
- Check -- строгие правила компиляции.
Опция BUILD_FAST (по умолчанию отключена) переключает между безопасными
(constant-time) и быстрыми (non-constant-time) редакциями функций.
Сборка:
\verbatim
make
\endverbatim
Тестирование:
\verbatim
make test
\endverbatim
Установка:
\verbatim
make install
\endverbatim
\section license Лицензия
Библиотека распространяется на условиях Apache License, Version 2.0.
*******************************************************************************
*/
// __BEE2_INFO