Sponsor:

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

pfok.h - Man Page

Протоколы Проекта РД РБ (pfok)

Synopsis

#include 'bee2/defs.h'

Классы

struct pfok_params
Долговременные параметры
struct pfok_seed
Затравочные данные

Определения типов

typedef void(* pfok_on_q_i) (const word q[], const size_t n, size_t num)
Обработка нового числа q.

Функции

err_t pfokStdParams (pfok_params *params, pfok_seed *seed, const char *name)
Загрузка стандартных долговременных параметров
err_t pfokGenParams (pfok_params *params, const pfok_seed *seed, pfok_on_q_i on_q)
Генерация долговременных параметров
err_t pfokValParams (const pfok_params *params)
Проверка долговременных параметров
err_t pfokGenKeypair (octet privkey[], octet pubkey[], const pfok_params *params, gen_i rng, void *rng_state)
Генерация пары ключей
err_t pfokValPubkey (const pfok_params *params, const octet pubkey[])
Проверка открытого ключа
err_t pfokCalcPubkey (octet pubkey[], const pfok_params *params, const octet privkey[])
Построение открытого ключа по личному
err_t pfokDH (octet sharekey[], const pfok_params *params, const octet privkey[], const octet pubkey[])
Построение общего ключа протокола Диффи -- Хеллмана
err_t pfokMTI (octet sharekey[], const pfok_params *params, const octet privkey[], const octet privkey1[], const octet pubkey[], const octet pubkey1[])
Построение общего ключа протокола MTI.

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

Проект РД РБ (pfok): Общие положения

Реализованы протоколы Проекта РД РБ (pfok). При ссылках на протоколы, таблицы, другие объекты подразумеваются разделы Проекта, в которых эти объекты определены. Дополнительно используются данные, представленные в СТБ П 34.101.50.

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

Все входные указатели корректны.

Регулярность

todo

Типы

typedef void(* pfok_on_q_i) (const word q[], const size_t n, size_t num)

Обрабатывается построение очередного простого числа [n]q во время генерации параметра p = 2q + 1. Новое простое число получено в попытке с номером num (нумерация начиная с 1).

Прим.

При генерации долговременных параметров функция будет вызываться с возрастающим номером num до тех пор, пока p не окажется простым.

Аргументы

q простое число  
n длина q в машинных словах  
num номер попытки

Функции

err_t pfokCalcPubkey (octet pubkey[], const pfok_params * params, const octet privkey[])

При долговременных параметрах params по личному ключу [O_OF_B(r)]privkey строится открытый ключ [O_OF_B(l)]pubkey.

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

Параметры params корректны.

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

Личный ключ privkey корректен.

Возвращает

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

Прим.

pubkey = g^(privkey).

Аргументы

pubkey открытый ключ  
params долговременные параметры  
privkey личный ключ

err_t pfokDH (octet sharekey[], const pfok_params * params, const octet privkey[], const octet pubkey[])

При долговременных параметрах params по личному ключу [O_OF_B(r)]privkey и открытому ключу [O_OF_B(l)]pubkey противоположной стороны строится общий ключ [O_OF_B(n)]sharekey. Общий ключ определяется как n битов числа pubkey^(privkey), что соответствует протоколу Диффи -- Хеллмана.

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

Параметры params корректны.

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

Открытый ключ pubkey корректен.

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

Личный ключ privkey корректен.

Возвращает

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

Прим.

Функция поддерживает протокол без аутентификации сторон (4.1) при следующих соглашениях:

privkey = ua, pubkey = vb || privkey = ub, pubkey = va.

Функция поддерживает односторонний протокол (4.3) при следующих соглашениях:

privkey = ua, pubkey = yb || privkey = xb, pubkey = va.
Аргументы

sharekey общий ключ  
params долговременные параметры  
privkey личный ключ  
pubkey открытый ключ (другой стороны)

err_t pfokGenKeypair (octet privkey[], octet pubkey[], const pfok_params * params, gen_i rng, void * rng_state)

При долговременных параметрах params генерируются личный [O_OF_B(r)]privkey и открытый [O_OF_B(l)]pubkey ключи. При генерации используется генератор rng и его состояние rng_state.

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

Параметры params корректны.

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

Генератор rng (с состоянием rng_state) корректен.

Ожидается

Используется криптографически стойкий генератор rng.

Возвращает

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

Прим.

pubkey = g^(privkey).

Аргументы

privkey личный ключ  
pubkey открытый ключ  
params долговременные параметры  
rng генератор случайных чисел  
rng_state состояние генератора

err_t pfokGenParams (pfok_params * params, const pfok_seed * seed, pfok_on_q_i on_q)

По затравочным данным seed генерируются долговременные параметры params. При построении очередного числа q, по которому определяется params->p, вызывается функция on_q.

Возвращает

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

Прим.

Указатель on_q может быть нулевым и тогда построение q не обрабатывается.

Реализованы алгоритмы 5.2, 5.3. В качестве params->g выбираются последовательные числа 1, 2,... до тех пор, пока не встретится подходящее.

Аргументы

params долговременные параметры  
seed затравочные данные  
on_q обработчик

err_t pfokMTI (octet sharekey[], const pfok_params * params, const octet privkey[], const octet privkey1[], const octet pubkey[], const octet pubkey1[])

При долговременных параметрах params по личному ключу [O_OF_B(r)]privkey, одноразовому личному ключу [O_OF_B(r)]privkey1, открытому ключу [O_OF_B(l)]pubkey противоположной стороны и одноразовому открытому ключу [O_OF_B(l)]pubkey противоположной стороны строится общий ключ [O_OF_B(n)]sharekey. Общий ключ определяется как n битов числа

pubkey1^(privkey) \xor pubkey^(privkey1).

что соответствует протоколу Диффи -- Хеллмана.

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

Параметры params корректны.

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

Открытый ключ pubkey корректен.

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

Личный ключ privkey корректен.

Возвращает

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

Прим.

Функция поддерживает протокол с аутентификацией сторон (4.2) при следующих соглашениях:

privkey = xa, privkey1 = ua, pubkey = yb, pubkey1 = vb || 
privkey = xb, privkey1 = ub, pubkey = ya, pubkey1 = va.

Протокол 4.2 построен по схеме MTI (Matsumoto, Takashima, Imai), чем и объясняется название функции.

Аргументы

sharekey общий ключ  
params долговременные параметры  
privkey личный ключ  
privkey1 одноразовый личный ключ  
pubkey открытый ключ (другой стороны)  
pubkey1 однораз. откр. ключ (др. стороны)

err_t pfokStdParams (pfok_params * params, pfok_seed * seed, const char * name)

В params загружаются стандартные долговременные параметры с именем name, а в seed -- затравочные данные, на которых получены params. Указатель seed может быть нулевым, и в этом случае затравочные данные не загружаются. Поддерживаются следующие имена: '1.2.112.0.2.0.1176.2.3.3.2', '1.2.112.0.2.0.1176.2.3.6.2', '1.2.112.0.2.0.1176.2.3.10.2'. Это имена стандартных параметров, заданных в таблице В.3 СТБ П 34.101.50. Дополнительно поддерживается имя 'test' тестовых параметров первого уровня стойкости (l == 638).

Возвращает

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

Аргументы

params стандартные параметры  
seed затравочные данные  
name имя параметров

err_t pfokValParams (const pfok_params * params)

Проверяется, что долговременные параметры params корректны. Для полей params проверяются следующие условия:

  • размерности l и r согласованы и соответствуют определенному уровню стойкости;
  • n < l;
  • p -- l-битовое простое число;
  • q = (p - 1) / 2 -- простое;
  • g < p;
  • g является образующим группы B_p.
Возвращает

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

Предупреждения

Не проверяется, что p построен по алгоритму 5.2.

Аргументы

params долговременные параметры

err_t pfokValPubkey (const pfok_params * params, const octet pubkey[])

При долговременных параметрах params проверяется корректность открытого ключа [O_OF_B(l)]pubkey.

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

Параметры params корректны.

Возвращает

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

Аргументы

params долговременные параметры  
pubkey проверяемый ключ

Автор

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

Info

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