dstu.h - Man Page
Алгоритмы ДСТУ 4145-2002 (Украина)
Synopsis
#include 'bee2/defs.h'
Классы
struct dstu_params
Долговременные параметры dstu.
Функции
err_t dstuParamsStd (dstu_params *params, const char *name)
Загрузка стандартных долговременных параметров
err_t dstuParamsVal (const dstu_params *params)
Проверка долговременных параметров
err_t dstuPointGen (octet point[], const dstu_params *params, gen_i rng, void *rng_state)
Генерация точки
err_t dstuPointVal (const dstu_params *params, const octet point[])
Проверка точки
err_t dstuPointCompress (octet xpoint[], const dstu_params *params, const octet point[])
Сжатие точки
err_t dstuPointRecover (octet point[], const dstu_params *params, const octet xpoint[])
Восстановление точки
err_t dstuKeypairGen (octet privkey[], octet pubkey[], const dstu_params *params, gen_i rng, void *rng_state)
Генерация пары ключей
err_t dstuSign (octet sig[], const dstu_params *params, size_t ld, const octet hash[], size_t hash_len, const octet privkey[], gen_i rng, void *rng_state)
Выработка ЭЦП
err_t dstuVerify (const dstu_params *params, size_t ld, const octet hash[], size_t hash_len, const octet sig[], const octet pubkey[])
Проверка ЭЦП
Подробное описание
Реализованы алгоритмы украинского стандарта ДСТУ 4145-2002.
Поля структуры долговременных параметров обозначаются также как в ДСТУ.
Максимальная размерность DSTU_SIZE соответствуют неприводимому многочлену степени 509, указанному в ДСТУ.
Базовое поле f = GF(2^m) описывается массивом из 4 размерностей, задающих полиномиальный или нормальный базисы. Первый элемент массива p[0] -- это степень расширения m поля f, элементы массива невозрастают: p[0] >= p[1] >= p[2] >= p[3].
В полиномиальном базисе поле строится как кольцо вычетов GF(2) / (p(x)), где p(x) –- неприводимый трехчлен или пятичлен степени m. Многочлен p(x) определяется следующим образом: p(x) = x^p[0] + x^p[1] + x^p[2] + x^p[3] + 1. При p[2] == 0 должно выполняться также p[3] == 0 и p(x) -- трехчлен.
Нормальный базис задается установкой p[0] = m, p[1] = p[2] = p[3] = 0. Операции в нормальном базисе не реализованы.
Степень m базового поля f определяет используемое число октетов в массиве dstu_params::B: в этом массиве используется O_OF_B(m) октет. В буфере сжатой точки xpoint также используется O_OF_B(m) октет. В массиве dstu_params::P, в буферах открытого ключа pubkey и точки point используется 2 * O_OF_B(m) октетов.
В структуре dstu_params неиспользуемые октеты могут быть заданы произвольным образом.
Порядок группы точек dstu_params::n не превосходит (2^m + 1 + 2 * 2^{m / 2}) / c, где кофактор c >= 2. Таким образом, порядок dstu_params::n укладывается в O_OF_B(m) октетов и даже, может быть, в меньшее число октетов.
Прим.
Кофактор c >= 2, поскольку точка (0, \sqrt (dstu_params::B)) лежит на кривой и имеет порядок 2.
Для стандартных кривых, заданных в приложении Г, кофактор равняется 2 при dstu_params::A == 1 или 4 при dstu_params::A == 0.
В буфере личного ключа privkey используется order_no октетов, где order_no -- число значащих (без завершающих нулевых) октетов буфера [O_OF_B(m)]dstu_params::n, т. е. длина числа dstu_params::n в октетах.
Ожидается [ERR_BAD_INPUT]
Все входные указатели корректны.
- Регулярность
todo
Функции
err_t dstuKeypairGen (octet privkey[], octet pubkey[], const dstu_params * params, gen_i rng, void * rng_state)
Для заданных параметров params генерируются личный и открытый ключи privkey и pubkey ключи. При генерации используется генератор rng и его состояние rng_state.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_RNG]
Генератор rng (с состоянием rng_state) корректен.
Ожидается
Используется криптографически стойкий генератор rng.
- Возвращает
ERR_OK, если ключи сгенерированы, и код ошибки в противном случае.
Прим.
Реализован алгоритм из раздела 9 ДСТУ.
- Аргументы
privkey личный ключ
pubkey открытый ключ
params долговременные параметры
rng генератор случайных чисел
rng_state [in,out] состояние генератора
err_t dstuParamsStd (dstu_params * params, const char * name)
В params загружаются стандартные долговременные параметры с именем name. Поддерживаются имена '1.2.804.2.1.1.1.1.3.1.1.1.2.0', ..., '1.2.112.0.2.0.34.101.45.3.2.9'. Это имена стандартных эллиптических кривых, заданных в таблице Г.2. Первым именем названа кривая над GF(2^163), последним -- кривая над GF(2^431).
- Возвращает
ERR_OK, если параметры загружены, и код ошибки в противном случае.
Прим.
Имена (идентификаторы) параметров взяты из файла http://www.crypto.org.ua/Media/Default/patches/dstu101e.patch (patch для OpenSSL).
ДСТУ не определяет стандартные базовые точки. Их надо генерировать дополнительно, например, с помощью функции dstuPointGen().
- Аргументы
params стандартные параметры
name имя параметров
err_t dstuParamsVal (const dstu_params * params)
Проверяется корректность долговременных параметров params.
- Возвращает
ERR_OK, если параметры корректны, и код ошибки в противном случае.
Прим.
Проверяется корректность в том числе и базовой точки P.
- Аргументы
params параметры
err_t dstuPointCompress (octet xpoint[], const dstu_params * params, const octet point[])
Точка point эллиптической кривой, заданной долговременными параметрами params, сжимается в точку xpoint.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
- Возвращает
ERR_OK, если точка сжата, и код ошибки в противном случае.
Прим.
Реализован алгоритм из раздела 6.9 ДСТУ.
Буферы point и xpoint могут пересекаться.
- Аргументы
xpoint сжатая точка
params параметры
point сжимаемая точка
err_t dstuPointGen (octet point[], const dstu_params * params, gen_i rng, void * rng_state)
Генерируется точка point эллиптической кривой, заданной долговременными параметрами params. При генерации используется генератор rng и его состояние rng_state. Дополнительно проверяется, что порядок point равняется params->n.
Ожидается [ERR_BAD_PARAMS]
Параметры params (кроме базовой точки P) корректны.
- Возвращает
ERR_OK, если точка сгенерирована, и код ошибки в противном случае.
Прим.
Указатели point и params->P могут совпадать.
Реализован алгоритм из раздела 6.8 ДСТУ.
- Аргументы
point точка
params долговременные параметры
rng генератор случайных чисел
rng_state [in,out] состояние генератора
err_t dstuPointRecover (octet point[], const dstu_params * params, const octet xpoint[])
Точка point эллиптической кривой, заданной долговременными параметрами params, восстанавливается из x-координаты (point->x).
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
- Возвращает
ERR_OK, если точка восстановлена, и код ошибки в противном случае.
Прим.
Реализован алгоритм из раздела 6.10 ДСТУ.
Буферы point и xpoint могут пересекаться.
- Аргументы
point восстановленная точка
params параметры
xpoint сжатая точка
err_t dstuPointVal (const dstu_params * params, const octet point[])
Проверяется, что точка point эллиптической кривой, заданной долговременными параметрами params, удовлетворяет требованиям ДСТУ.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
- Возвращает
ERR_OK, если точка корректна, и код ошибки в противном случае.
Прим.
Реализован алгоритм из раздела 10.1 ДСТУ.
- Аргументы
params долговременные параметры
point проверяемая точка
err_t dstuSign (octet sig[], const dstu_params * params, size_t ld, const octet hash[], size_t hash_len, const octet privkey[], gen_i rng, void * rng_state)
Вырабатывается подпись [ld / 8]sig сообщения с хэш-значением [hash_len]hash. Подпись вырабатывается на личном ключе privkey. При выработке ЭЦП используются долговременные параметры params и генератор rng c состоянием rng_state.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_INPUT]
:
- ld делится на 16;
- два вычета по модулю params->n укладываются в ld битов.
Ожидается [ERR_BAD_PRIVKEY]
Личный ключ privkey корректен.
Ожидается [ERR_BAD_RNG]
Генератор rng (с состоянием rng_state) корректен.
Ожидается
Используется криптографически стойкий генератор rng.
- Возвращает
ERR_OK, если подпись выработана, и код ошибки в противном случае.
- Аргументы
sig подпись
params долговременные параметры
ld длина подписи в битах
hash хэш-значение
hash_len длина хэш-значения в октетах
privkey личный ключ
rng генератор случайных чисел
rng_state [in,out] состояние генератора
err_t dstuVerify (const dstu_params * params, size_t ld, const octet hash[], size_t hash_len, const octet sig[], const octet pubkey[])
Проверяется подпись [ld / 8]sig сообщения с хэш-значением [hash_len]hash. При проверке используются долговременные параметры params и открытый ключ pubkey.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_PUBKEY]
Открытый ключ pubkey корректен.
- Возвращает
ERR_OK, если подпись корректна, и код ошибки в противном случае.
- Аргументы
params долговременные параметры
ld длина подписи в битах
hash хэш-значение
hash_len длина хэш-значения в октетах
sig подпись
pubkey открытый ключ
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.