1pfok.h(3)                  Library Functions Manual                  pfok.h(3)
2
3
4

NAME

6       pfok.h - Протоколы Проекта РД РБ (pfok)
7
8

SYNOPSIS

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

Подробное описание

Проект РД РБ (pfok): Общие положения

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                 Пт 23 Июн 2023                       pfok.h(3)
Impressum