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)
Разбор контейнера с частичным секретом
err_t bpkiCSRRewrap (octet csr[], size_t csr_len, const octet privkey[], size_t privkey_len)
Перевыпуск запроса на выпуск сертификата
err_t bpkiCSRUnwrap (octet pubkey[], size_t *pubkey_len, const octet csr[], size_t csr_len)
Разбор запроса на выпуск сертификата
Подробное описание
Реализованы отдельные механизмы СТБ 34.101.78 (bpki):
- управление контейнерами с личными ключами СТБ 34.101.45 (bign);
- управление контейнерами с частичными секретами СТБ 34.101.60 (bels).
Дополнительно поддерживается размещение в контейнере личных ключей системы ЭЦП bign96 (см. bign.h) с долговременными параметрами bign-curve192v1.
Дополнительно реализован перевыпуск запросов на получение сертификата (Cerificate Signing Request, CSR).
Формат контейнера с личным ключом описывается типом EncryptedPrivateKeyInfo, определенным в PKCS#8 (RFC 5208). Для защиты контейнера используется механизм PBKDF2, определенный в PKCS#5 (RFC 8018). Формат и механизм уточняются в СТБ 34.101.78.
Секретным параметром PBKDF2 является пароль. Для повышения гарантий защиты в качестве пароля может выступать полноценный ключ. Этот ключ разделяется на частичные секреты, которые также сохраняются в контейнерах EncryptedPrivateKeyInfo будучи защищенными на обычных паролях.
При разделении на частичные секреты используются стандартные параметры bels, в частности, стандартные открытые ключи. Номер открытого ключа (число от 1 до 16) кодируется октетом и добавляется в начало частичного секрета. Поэтому длина частичного секрета в октетах на единицу больше стандартной длины (17 вместо 16, 25 вместо 24 и 33 вместо 32).
Формат запроса на получение сертификата определен в СТБ 34.101.17 (PKCS#10). Запрос содержит идентификационные данные будущего владельца сертификата, его открытый ключ, технические расширения, а также подпись всех этих полей на личном ключе. Идентификационные данные, открытый ключ, а также некоторые расширения переносятся в сертификат. Подпись доказывает владение открытым ключом сертификата, т.е. знание соответствующего личного ключа. Перевыпуск запроса позволяет доказать владение на новой паре ключей при сохранении (громоздких) идентификационных данных и расширений.
Ожидается [ERR_BAD_INPUT]
Все входные указатели действительны. Исключение составляют случаи, когда нулевой указатель передается как запрос на определение объема памяти, которую требуется зарезервировать при повторном вызове (конструкция [len?]ptr).
Функции
err_t bpkiCSRRewrap (octet csr[], size_t csr_len, const octet privkey[], size_t privkey_len)
В запрос на выпуск сертификата [csr_len]csr вкладывается новый открытый ключ, построенный по личному ключу [privkey_len]privkey, а затем запрос подписывается на privkey.
Ожидается [ERR_NOT_IMPLEMENTED]
privkey_len == 32.
Ожидается [ERR_BAD_FORMAT]
Формат запроса соответствует СТБ 34.101.17.
Ожидается [ERR_BAD_FORMAT]
В запросе используются стандартные долговременные параметры bign-curve256v1 и алгоритм bign-with-hbelt.
- Возвращает
ERR_OK, если запрос успешно перевыпущен, и код ошибки в противном случае.
- Аргументы
csr [in/out] запрос на выпуск сертификата
csr_len длина csr
privkey личный ключ
privkey_len длина privkey
err_t bpkiCSRUnwrap (octet pubkey[], size_t * pubkey_len, const octet csr[], size_t csr_len)
Подпись запроса на выпуск сертификата [csr_len]csr проверяется на открытом ключе, вложенном в запрос. В случае успеха из запроса извлекается открытый ключ [pubkey_len?]pubkey.
Ожидается [ERR_BAD_FORMAT]
Формат запроса соответствует СТБ 34.101.17.
Ожидается [ERR_BAD_FORMAT]
В запросе используются стандартные долговременные параметры bign-curve256v1 и алгоритм bign-with-hbelt.
- Возвращает
ERR_OK, если разбор прошел успешно, и код ошибки в противном случае.
- Аргументы
pubkey открытый ключ
pubkey_len длина pubkey
csr запрос на выпуск сертификата
csr_len длина csr
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 из исходного текста.