1pfok.h(3) Library Functions Manual pfok.h(3)
2
3
4
6 pfok.h - Протоколы Проекта РД РБ (pfok)
7
8
10 #include 'bee2/defs.h'
11
12
13 Классы
14 struct pfok_params
15 Долговременные параметры
16 struct pfok_seed
17 Затравочные данные
18
19 Определения типов
20 typedef void(* pfok_on_q_i) (const word q[], const size_t n, size_t
21 num)
22 Обработка нового числа q.
23
24 Функции
25 err_t pfokStdParams (pfok_params *params, pfok_seed *seed, const char
26 *name)
27 Загрузка стандартных долговременных параметров
28 err_t pfokGenParams (pfok_params *params, const pfok_seed *seed,
29 pfok_on_q_i on_q)
30 Генерация долговременных параметров
31 err_t pfokValParams (const pfok_params *params)
32 Проверка долговременных параметров
33 err_t pfokGenKeypair (octet privkey[], octet pubkey[], const
34 pfok_params *params, gen_i rng, void *rng_state)
35 Генерация пары ключей
36 err_t pfokValPubkey (const pfok_params *params, const octet pubkey[])
37 Проверка открытого ключа
38 err_t pfokCalcPubkey (octet pubkey[], const pfok_params *params, const
39 octet privkey[])
40 Построение открытого ключа по личному
41 err_t pfokDH (octet sharekey[], const pfok_params *params, const octet
42 privkey[], const octet pubkey[])
43 Построение общего ключа протокола Диффи -- Хеллмана
44 err_t pfokMTI (octet sharekey[], const pfok_params *params, const octet
45 privkey[], const octet privkey1[], const octet pubkey[], const
46 octet pubkey1[])
47 Построение общего ключа протокола MTI.
48
51 Реализованы протоколы Проекта РД РБ (pfok). При ссылках на протоколы,
52 таблицы, другие объекты подразумеваются разделы Проекта, в которых эти
53 объекты определены. Дополнительно используются данные, представленные в
54 СТБ П 34.101.50.
55
56 Ожидается [ERR_BAD_INPUT]
57 Все входные указатели корректны.
58
59 Регулярность
60 todo
61
63 typedef void(* pfok_on_q_i) (const word q[], const size_t n, size_t num)
64 Обрабатывается построение очередного простого числа [n]q во время
65 генерации параметра p = 2q + 1. Новое простое число получено в попытке
66 с номером num (нумерация начиная с 1).
67
68 Прим.
69 При генерации долговременных параметров функция будет вызываться с
70 возрастающим номером num до тех пор, пока p не окажется простым.
71
72 Аргументы
73 q простое число
74 n длина q в машинных словах
75 num номер попытки
76
78 err_t pfokCalcPubkey (octet pubkey[], const pfok_params * params, const
79 octet privkey[])
80 При долговременных параметрах params по личному ключу
81 [O_OF_B(r)]privkey строится открытый ключ [O_OF_B(l)]pubkey.
82
83 Ожидается [ERR_BAD_PARAMS]
84 Параметры params корректны.
85
86 Ожидается [ERR_BAD_PRIVKEY]
87 Личный ключ privkey корректен.
88
89 Возвращает
90 ERR_OK, если открытый ключ успешно построен, и код ошибки в
91 противном случае.
92
93 Прим.
94 pubkey = g^(privkey).
95
96 Аргументы
97 pubkey открытый ключ
98 params долговременные параметры
99 privkey личный ключ
100
101 err_t pfokDH (octet sharekey[], const pfok_params * params, const octet
102 privkey[], const octet pubkey[])
103 При долговременных параметрах params по личному ключу
104 [O_OF_B(r)]privkey и открытому ключу [O_OF_B(l)]pubkey противоположной
105 стороны строится общий ключ [O_OF_B(n)]sharekey. Общий ключ
106 определяется как n битов числа pubkey^(privkey), что соответствует
107 протоколу Диффи -- Хеллмана.
108
109 Ожидается [ERR_BAD_PARAMS]
110 Параметры params корректны.
111
112 Ожидается [ERR_BAD_PUBKEY]
113 Открытый ключ pubkey корректен.
114
115 Ожидается [ERR_BAD_PRIVKEY]
116 Личный ключ privkey корректен.
117
118 Возвращает
119 ERR_OK, если общий ключ успешно построен, и код ошибки в противном
120 случае.
121
122 Прим.
123 Функция поддерживает протокол без аутентификации сторон (4.1) при
124 следующих соглашениях:
125
126 privkey = ua, pubkey = vb || privkey = ub, pubkey = va.
127
128
129 Функция поддерживает односторонний протокол (4.3) при следующих
130 соглашениях:
131
132 privkey = ua, pubkey = yb || privkey = xb, pubkey = va.
133
134
135 Аргументы
136 sharekey общий ключ
137 params долговременные параметры
138 privkey личный ключ
139 pubkey открытый ключ (другой стороны)
140
141 err_t pfokGenKeypair (octet privkey[], octet pubkey[], const pfok_params *
142 params, gen_i rng, void * rng_state)
143 При долговременных параметрах params генерируются личный
144 [O_OF_B(r)]privkey и открытый [O_OF_B(l)]pubkey ключи. При генерации
145 используется генератор rng и его состояние rng_state.
146
147 Ожидается [ERR_BAD_PARAMS]
148 Параметры params корректны.
149
150 Ожидается [ERR_BAD_RNG]
151 Генератор rng (с состоянием rng_state) корректен.
152
153 Ожидается
154 Используется криптографически стойкий генератор rng.
155
156 Возвращает
157 ERR_OK, если ключи успешно сгенерированы, и код ошибки в противном
158 случае.
159
160 Прим.
161 pubkey = g^(privkey).
162
163 Аргументы
164 privkey личный ключ
165 pubkey открытый ключ
166 params долговременные параметры
167 rng генератор случайных чисел
168 rng_state состояние генератора
169
170 err_t pfokGenParams (pfok_params * params, const pfok_seed * seed,
171 pfok_on_q_i on_q)
172 По затравочным данным seed генерируются долговременные параметры
173 params. При построении очередного числа q, по которому определяется
174 params->p, вызывается функция on_q.
175
176 Возвращает
177 ERR_OK, если параметры успешно сгенерированы, и код ошибки в
178 противном случае.
179
180 Прим.
181 Указатель on_q может быть нулевым и тогда построение q не
182 обрабатывается.
183
184 Реализованы алгоритмы 5.2, 5.3. В качестве params->g выбираются
185 последовательные числа 1, 2,... до тех пор, пока не встретится
186 подходящее.
187
188 Аргументы
189 params долговременные параметры
190 seed затравочные данные
191 on_q обработчик
192
193 err_t pfokMTI (octet sharekey[], const pfok_params * params, const octet
194 privkey[], const octet privkey1[], const octet pubkey[], const octet
195 pubkey1[])
196 При долговременных параметрах params по личному ключу
197 [O_OF_B(r)]privkey, одноразовому личному ключу [O_OF_B(r)]privkey1,
198 открытому ключу [O_OF_B(l)]pubkey противоположной стороны и
199 одноразовому открытому ключу [O_OF_B(l)]pubkey противоположной стороны
200 строится общий ключ [O_OF_B(n)]sharekey. Общий ключ определяется как n
201 битов числа
202
203 pubkey1^(privkey) \xor pubkey^(privkey1).
204
205
206 что соответствует протоколу Диффи -- Хеллмана.
207
208 Ожидается [ERR_BAD_PARAMS]
209 Параметры params корректны.
210
211 Ожидается [ERR_BAD_PUBKEY]
212 Открытый ключ pubkey корректен.
213
214 Ожидается [ERR_BAD_PRIVKEY]
215 Личный ключ privkey корректен.
216
217 Возвращает
218 ERR_OK, если общий ключ успешно построен, и код ошибки в противном
219 случае.
220
221 Прим.
222 Функция поддерживает протокол с аутентификацией сторон (4.2) при
223 следующих соглашениях:
224
225 privkey = xa, privkey1 = ua, pubkey = yb, pubkey1 = vb ||
226 privkey = xb, privkey1 = ub, pubkey = ya, pubkey1 = va.
227
228
229 Протокол 4.2 построен по схеме MTI (Matsumoto, Takashima, Imai),
230 чем и объясняется название функции.
231
232 Аргументы
233 sharekey общий ключ
234 params долговременные параметры
235 privkey личный ключ
236 privkey1 одноразовый личный ключ
237 pubkey открытый ключ (другой стороны)
238 pubkey1 однораз. откр. ключ (др. стороны)
239
240 err_t pfokStdParams (pfok_params * params, pfok_seed * seed, const char *
241 name)
242 В params загружаются стандартные долговременные параметры с именем
243 name, а в seed -- затравочные данные, на которых получены params.
244 Указатель seed может быть нулевым, и в этом случае затравочные данные
245 не загружаются. Поддерживаются следующие имена:
246 '1.2.112.0.2.0.1176.2.3.3.2', '1.2.112.0.2.0.1176.2.3.6.2',
247 '1.2.112.0.2.0.1176.2.3.10.2'. Это имена стандартных параметров,
248 заданных в таблице В.3 СТБ П 34.101.50. Дополнительно поддерживается
249 имя 'test' тестовых параметров первого уровня стойкости (l == 638).
250
251 Возвращает
252 ERR_OK, если параметры успешно загружены, и код ошибки в противном
253 случае.
254
255 Аргументы
256 params стандартные параметры
257 seed затравочные данные
258 name имя параметров
259
260 err_t pfokValParams (const pfok_params * params)
261 Проверяется, что долговременные параметры params корректны. Для полей
262 params проверяются следующие условия:
263
264 • размерности l и r согласованы и соответствуют определенному уровню
265 стойкости;
266
267 • n < l;
268
269 • p -- l-битовое простое число;
270
271 • q = (p - 1) / 2 -- простое;
272
273 • g < p;
274
275 • g является образующим группы B_p.
276
277 Возвращает
278 ERR_OK, если параметры корректны, и код ошибки в противном случае.
279
280 Предупреждения
281 Не проверяется, что p построен по алгоритму 5.2.
282
283 Аргументы
284 params долговременные параметры
285
286 err_t pfokValPubkey (const pfok_params * params, const octet pubkey[])
287 При долговременных параметрах params проверяется корректность открытого
288 ключа [O_OF_B(l)]pubkey.
289
290 Ожидается [ERR_BAD_PARAMS]
291 Параметры params корректны.
292
293 Возвращает
294 ERR_OK, если ключ корректен, и код ошибки в противном случае.
295
296 Аргументы
297 params долговременные параметры
298 pubkey проверяемый ключ
299
301 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
302
303
304
305Библиотека Bee2 Ср 19 Июл 2023 00:00:00 pfok.h(3)