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 pfokSeedVal (const pfok_seed *seed)
Проверка затравочных параметров
err_t pfokSeedAdj (pfok_seed *seed)
Настройка затравочных параметров
err_t pfokParamsStd (pfok_params *params, pfok_seed *seed, const char *name)
Загрузка стандартных долговременных параметров
err_t pfokParamsGen (pfok_params *params, const pfok_seed *seed, pfok_on_q_i on_q)
Генерация долговременных параметров
err_t pfokParamsVal (const pfok_params *params)
Проверка долговременных параметров
err_t pfokKeypairGen (octet privkey[], octet pubkey[], const pfok_params *params, gen_i rng, void *rng_state)
Генерация пары ключей
err_t pfokPubkeyVal (const pfok_params *params, const octet pubkey[])
Проверка открытого ключа
err_t pfokPubkeyCalc (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 не окажется простым.
По окончании вычислений окончательное простое [n]q передается в функцию еще раз с нулевым num. В этом обращении можно выполнить завершающие служебные действия.
- Аргументы
q простое число
n длина q в машинных словах
num номер попытки
Функции
err_t pfokKeypairGen (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 [in,out] состояние генератора
err_t pfokParamsGen (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 pfokParamsStd (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 pfokParamsVal (const pfok_params * params)
Проверяется, что долговременные параметры params корректны. Для полей params проверяются следующие условия:
- размерности l и r согласованы и соответствуют определенному уровню стойкости;
- n < l;
- p -- l-битовое простое число;
- q = (p - 1) / 2 -- простое;
- g < p;
- g имеет порядок p - 1 в группе Монтгомери mod p.
- Возвращает
ERR_OK, если параметры корректны, и код ошибки в противном случае.
Предупреждения
Не проверяется, что p построен по алгоритму 5.2.
- Аргументы
params долговременные параметры
err_t pfokPubkeyCalc (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 pfokPubkeyVal (const pfok_params * params, const octet pubkey[])
При долговременных параметрах params проверяется корректность открытого ключа [O_OF_B(l)]pubkey.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
- Возвращает
ERR_OK, если ключ корректен, и код ошибки в противном случае.
- Аргументы
params долговременные параметры
pubkey проверяемый ключ
err_t pfokSeedAdj (pfok_seed * seed)
В структуре seed незаполненным (нулевым) параметрам seed->zi и seed->li присваиваются значения по умолчанию. Эти значения определяются с участием seed->l следующим образом:
- zi[0] = 1,..., zi[30] = 31;
- li[0] = l - 1, li[1] = li[0] / 2 + 1, ..., li[t] = li[t - 1] / 2 + 1 ∈ {17,..., 32}, 0, ...., 0.
- Возвращает
ERR_OK, если итоговые параметры корректны, и код ошибки в противном случае.
- Аргументы
seed [in/out] затравочные параметры
err_t pfokSeedVal (const pfok_seed * seed)
Проверяется, что затравочные параметры seed корректны:
- размерность l соответствует определенному уровню стойкости;
- zi[i] ∈ {1, 2,..., 65256};
- массив (цепочка) li начинается с числа li[0] = l - 1 и заканчивается числом li[t] ∈ {17,...,32}, после которого идут нули;
- 5 * li[i + 1] / 4 + 4 < li[i] <= 2 * li[i + 1], 0 <= i < t.
- Возвращает
ERR_OK, если параметры корректны, и код ошибки в противном случае.
- Аргументы
seed затравочные параметры
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.