Sponsor:

Your company here, and a link to your site. Click to find out more.

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):

Дополнительно поддерживается размещение в контейнере личных ключей системы ЭЦП 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

err_t bpkiShareUnwrap (octet share[], size_t * share_len, const octet epki[], size_t epki_len, const octet pwd[], size_t pwd_len)

Из контейнера [epki_len]epki извлекается частичный секрет [share_len?]share, защищенный с помощью механизма PBKDF2. Защита снимается на пароле [pwd_len]pwd.

Ожидается [ERR_BAD_SECKEY]

Если share != 0, то 1 <= share[0] <= 16.

Возвращает

ERR_OK, если частичный секрет успешно извлечен, и код ошибки в противном случае.

Прим.

Формально для определения длины share_len частичного секрета нужно снять защиту, а для этого предъявить пароль. Поэтому указатель pwd должен быть корректен даже при нулевом указателе share, т.е. во время запроса длины share_len. Здесь не учитывается, что длину частичного секрета можно определить косвенно по длине контейнера.

Аргументы

share частичный секрет  
share_len длина share  
epki контейнер с частичным секретом  
epki_len длина epki  
pwd пароль  
pwd_len длина pwd

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)

Создается контейнер [epki_len?]epki с защищенным частичным секретом [share_len]share. Ключ защищается на пароле [pwd_len]pwd. Используется механизм защиты PBKDF2 с синхропосылкой ('солью') salt и числом итераций iter.

Ожидается [ERR_BAD_SHAREKEY]

share_len ∈ {17, 25, 33}.

Ожидается [ERR_BAD_SHAREKEY]

Если share != 0, то 1 <= share[0] <= 16.

Ожидается [ERR_BAD_INPUT]

iter >= 10000.

Возвращает

ERR_OK, если контейнер успешно создан, и код ошибки в противном случае.

Прим.

В префиксе частичного секрета указывается номер соответствующего открытого ключа (из стандартного списка открытых ключей). Открытый ключ используется при сборке ключа по частичным секретам.

При нулевом epki указатели share, pwd и salt могут быть нулевыми.

Аргументы

epki контейнер с частичным секретом  
epki_len длина epki  
share частичный секрет  
share_len длина share  
pwd пароль  
pwd_len длина pwd  
salt синхропосылка ('соль') PBKDF2  
iter количество итераций в PBKDF2

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2