bpki.h - Man Page
Механизмы СТБ 34.101.78 (bpki)
Synopsis
#include 'bee2/defs.h'
Функции
err_t bpkiPrivkeyWrap (octet epki[], size_t *epki_len, const octet privkey[], size_t privkey_len, const octet pwd[], size_t pwd_len, const octet salt[8], size_t iter)
Создание контейнера с личным ключом
err_t bpkiPrivkeyUnwrap (octet privkey[], size_t *privkey_len, const octet epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
Разбор контейнера с личным ключом
err_t bpkiShareWrap (octet epki[], size_t *epki_len, const octet share[], size_t share_len, const octet pwd[], size_t pwd_len, const octet salt[8], size_t iter)
Создание контейнера с частичным секретом
err_t bpkiShareUnwrap (octet share[], size_t *share_len, const octet epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
Разбор контейнера с частичным секретом
Подробное описание
Реализованы отдельные механизмы СТБ 34.101.78 (bpki):
- управление контейнерами с личными ключами СТБ 34.101.45 (bign);
- управление контейнерами с частичными секретами СТБ 34.101.60 (bels).
Дополнительно поддерживается размещение в контейнере личных ключей системы ЭЦП bign96 (см. bign.h) с долговременными параметрами bign-curve192v1.
Формат контейнера с личным ключом описывается типом EncryptedPrivateKeyInfo, определенным в PKCS#8 (RFC 5208). Для защиты контейнера используется механизм PBKDF2, определенный в PKCS#5 (RFC 8018). Формат и механизм уточняются в СТБ 34.101.78.
Секретным параметром PBKDF2 является пароль. Для повышения гарантий защиты в качестве пароля может выступать полноценный ключ. Этот ключ разделяется на частичные секреты, которые также сохраняются в контейнерах EncryptedPrivateKeyInfo будучи защищенными на обычных паролях.
При разделении на частичные секреты используются стандартные параметры bels, в частности, стандартные открытые ключи. Номер открытого ключа (число от 1 до 16) кодируется октетом и добавляется в начало частичного секрета. Поэтому длина частичного секрета в октетах на единицу больше стандартной длины (17 вместо 16, 25 вместо 24 и 33 вместо 32).
Ожидается [ERR_BAD_INPUT]
Все входные указатели действительны. Исключение составляют случаи, когда нулевой указатель передается как запрос на определение объема памяти, которую требуется зарезервировать при повторном вызове (конструкция [len?]ptr).
Функции
err_t bpkiPrivkeyUnwrap (octet privkey[], size_t * privkey_len, const octet epki[], size_t epki_len, const octet pwd[], size_t pwd_len)
Из контейнера [epki_len]epki извлекается личный ключ [privkey_len?]privkey, защищенный с помощью механизма PBKDF2. Защита снимается на пароле [pwd_len]pwd.
- Возвращает
ERR_OK, если личный ключ успешно извлечен, и код ошибки в противном случае.
Прим.
Формально для определения длины privkey_len личного ключа нужно снять защиту, а для этого предъявить пароль. Поэтому указатель pwd должен быть корректен даже при нулевом указателе privkey, т.е. во время запроса длины privkey_len. Здесь не учитывается, что длину личного ключа можно определить косвенно по длине контейнера.
- Аргументы
privkey личный ключ
privkey_len длина privkey
epki контейнер с личным ключом
epki_len длина epki
pwd пароль
pwd_len длина pwd
err_t bpkiPrivkeyWrap (octet epki[], size_t * epki_len, const octet privkey[], size_t privkey_len, const octet pwd[], size_t pwd_len, const octet salt[8], size_t iter)
Создается контейнер [epki_len?]epki с защищенным личным ключом [privkey_len]privkey. Ключ защищается на пароле [pwd_len]pwd. Используется механизм защиты PBKDF2 с синхропосылкой ('солью') salt и числом итераций iter.
- Ожидается [ERR_BAD_PRIVKEY]
privkey_len ∈ {32, 48, 64}.
- Ожидается [ERR_BAD_INPUT]
iter >= 10000.
- Возвращает
ERR_OK, если контейнер успешно создан, и код ошибки в противном случае.
Прим.
При нулевом epki указатели privkey, pwd и salt могут быть нулевыми.
- Аргументы
epki контейнер с личным ключом
epki_len длина epki
privkey личный ключ
privkey_len длина privkey
pwd пароль
pwd_len длина pwd
salt синхропосылка ('соль') PBKDF2
iter количество итераций в PBKDF2
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.