1bpki.h(3) Library Functions Manual bpki.h(3)
2
3
4
6 bpki.h - Механизмы СТБ 34.101.78 (bpki)
7
8
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)