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

NAME

6       bpki.h - Механизмы СТБ 34.101.78 (bpki)
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11
12
13   Функции
14       err_t bpkiPrivkeyWrap (octet epki[], size_t *epki_len, const octet
15           privkey[], size_t privkey_len, const octet pwd[], size_t pwd_len,
16           const octet salt[8], size_t iter)
17           Создание контейнера с личным ключом
18       err_t bpkiPrivkeyUnwrap (octet privkey[], size_t *privkey_len, const
19           octet epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
20           Разбор контейнера с личным ключом
21       err_t bpkiShareWrap (octet epki[], size_t *epki_len, const octet
22           share[], size_t share_len, const octet pwd[], size_t pwd_len, const
23           octet salt[8], size_t iter)
24           Создание контейнера с частичным секретом
25       err_t bpkiShareUnwrap (octet share[], size_t *share_len, const octet
26           epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
27           Разбор контейнера с частичным секретом
28

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

30       Реализованы отдельные механизмы СТБ 34.101.78 (bpki):
31
32       • управление контейнерами с личными ключами СТБ 34.101.45 (bign);
33
34       • управление контейнерами с частичными секретами СТБ 34.101.60 (bels).
35
36       Дополнительно поддерживается размещение в контейнере личных ключей
37       системы ЭЦП bign96 (см. bign.h) с долговременными параметрами bign-
38       curve192v1.
39
40       Формат контейнера с личным ключом описывается типом
41       EncryptedPrivateKeyInfo, определенным в PKCS#8 (RFC 5208). Для защиты
42       контейнера используется механизм PBKDF2, определенный в PKCS#5 (RFC
43       8018). Формат и механизм уточняются в СТБ 34.101.78.
44
45       Секретным параметром PBKDF2 является пароль. Для повышения гарантий
46       защиты в качестве пароля может выступать полноценный ключ. Этот ключ
47       разделяется на частичные секреты, которые также сохраняются в
48       контейнерах EncryptedPrivateKeyInfo будучи защищенными на обычных
49       паролях.
50
51       При разделении на частичные секреты используются стандартные параметры
52       bels, в частности, стандартные открытые ключи. Номер открытого ключа
53       (число от 1 до 16) кодируется октетом и добавляется в начало частичного
54       секрета. Поэтому длина частичного секрета в октетах на единицу больше
55       стандартной длины (17 вместо 16, 25 вместо 24 и 33 вместо 32).
56
57       Ожидается [ERR_BAD_INPUT]
58           Все входные указатели действительны. Исключение составляют случаи,
59           когда нулевой указатель передается как запрос на определение объема
60           памяти, которую требуется зарезервировать при повторном вызове
61           (конструкция [len?]ptr).
62
63

Функции

65   err_t bpkiPrivkeyUnwrap (octet privkey[], size_t * privkey_len, const octet
66       epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
67       Из контейнера [epki_len]epki извлекается личный ключ
68       [privkey_len?]privkey, защищенный с помощью механизма PBKDF2. Защита
69       снимается на пароле [pwd_len]pwd.
70
71       Возвращает
72           ERR_OK, если личный ключ успешно извлечен, и код ошибки в противном
73           случае.
74
75       Прим.
76           Формально для определения длины privkey_len личного ключа нужно
77           снять защиту, а для этого предъявить пароль. Поэтому указатель pwd
78           должен быть корректен даже при нулевом указателе privkey, т.е. во
79           время запроса длины privkey_len. Здесь не учитывается, что длину
80           личного ключа можно определить косвенно по длине контейнера.
81
82       Аргументы
83           privkey личный ключ
84           privkey_len длина privkey
85           epki контейнер с личным ключом
86           epki_len длина epki
87           pwd пароль
88           pwd_len длина pwd
89
90   err_t bpkiPrivkeyWrap (octet epki[], size_t * epki_len, const octet
91       privkey[], size_t privkey_len, const octet pwd[], size_t pwd_len, const
92       octet salt[8], size_t iter)
93       Создается контейнер [epki_len?]epki с защищенным личным ключом
94       [privkey_len]privkey. Ключ защищается на пароле [pwd_len]pwd.
95       Используется механизм защиты PBKDF2 с синхропосылкой ('солью') salt и
96       числом итераций iter.
97
98       Ожидается [ERR_BAD_PRIVKEY]
99           privkey_len ∈ {32, 48, 64}.
100
101       Ожидается [ERR_BAD_INPUT]
102           iter >= 10000.
103
104       Возвращает
105           ERR_OK, если контейнер успешно создан, и код ошибки в противном
106           случае.
107
108       Прим.
109           При нулевом epki указатели privkey, pwd и salt могут быть нулевыми.
110
111       Аргументы
112           epki контейнер с личным ключом
113           epki_len длина epki
114           privkey личный ключ
115           privkey_len длина privkey
116           pwd пароль
117           pwd_len длина pwd
118           salt синхропосылка ('соль') PBKDF2
119           iter количество итераций в PBKDF2
120
121   err_t bpkiShareUnwrap (octet share[], size_t * share_len, const octet
122       epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
123       Из контейнера [epki_len]epki извлекается частичный секрет
124       [share_len?]share, защищенный с помощью механизма PBKDF2. Защита
125       снимается на пароле [pwd_len]pwd.
126
127       Ожидается [ERR_BAD_SECKEY]
128           Если share != 0, то 1 <= share[0] <= 16.
129
130       Возвращает
131           ERR_OK, если частичный секрет успешно извлечен, и код ошибки в
132           противном случае.
133
134       Прим.
135           Формально для определения длины share_len частичного секрета нужно
136           снять защиту, а для этого предъявить пароль. Поэтому указатель pwd
137           должен быть корректен даже при нулевом указателе share, т.е. во
138           время запроса длины share_len. Здесь не учитывается, что длину
139           частичного секрета можно определить косвенно по длине контейнера.
140
141       Аргументы
142           share частичный секрет
143           share_len длина share
144           epki контейнер с частичным секретом
145           epki_len длина epki
146           pwd пароль
147           pwd_len длина pwd
148
149   err_t bpkiShareWrap (octet epki[], size_t * epki_len, const octet share[],
150       size_t share_len, const octet pwd[], size_t pwd_len, const octet
151       salt[8], size_t iter)
152       Создается контейнер [epki_len?]epki с защищенным частичным секретом
153       [share_len]share. Ключ защищается на пароле [pwd_len]pwd. Используется
154       механизм защиты PBKDF2 с синхропосылкой ('солью') salt и числом
155       итераций iter.
156
157       Ожидается [ERR_BAD_SHAREKEY]
158           share_len ∈ {17, 25, 33}.
159
160       Ожидается [ERR_BAD_SHAREKEY]
161           Если share != 0, то 1 <= share[0] <= 16.
162
163       Ожидается [ERR_BAD_INPUT]
164           iter >= 10000.
165
166       Возвращает
167           ERR_OK, если контейнер успешно создан, и код ошибки в противном
168           случае.
169
170       Прим.
171           В префиксе частичного секрета указывается номер соответствующего
172           открытого ключа (из стандартного списка открытых ключей). Открытый
173           ключ используется при сборке ключа по частичным секретам.
174
175           При нулевом epki указатели share, pwd и salt могут быть нулевыми.
176
177       Аргументы
178           epki контейнер с частичным секретом
179           epki_len длина epki
180           share частичный секрет
181           share_len длина share
182           pwd пароль
183           pwd_len длина pwd
184           salt синхропосылка ('соль') PBKDF2
185           iter количество итераций в PBKDF2
186

Автор

188       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
189
190
191
192Библиотека Bee2                 Пт 23 Июн 2023                       bpki.h(3)
Impressum