dstu.h - Man Page

Алгоритмы ДСТУ 4145-2002 (Украина)

Synopsis

#include 'bee2/defs.h'

Классы

struct dstu_params
Долговременные параметры dstu.

Функции

err_t dstuStdParams (dstu_params *params, const char *name)
Загрузка стандартных долговременных параметров
err_t dstuValParams (const dstu_params *params)
Проверка долговременных параметров
err_t dstuGenPoint (octet point[], const dstu_params *params, gen_i rng, void *rng_state)
Генерация точки
err_t dstuValPoint (const dstu_params *params, const octet point[])
Проверка точки
err_t dstuCompressPoint (octet xpoint[], const dstu_params *params, const octet point[])
Сжатие точки
err_t dstuRecoverPoint (octet point[], const dstu_params *params, const octet xpoint[])
Восстановление точки
err_t dstuGenKeypair (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 dstuCompressPoint (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 dstuGenKeypair (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 состояние генератора

err_t dstuGenPoint (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 состояние генератора

err_t dstuRecoverPoint (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 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 состояние генератора

err_t dstuStdParams (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).

ДСТУ не определяет стандартные базовые точки. Их надо генерировать дополнительно, например, с помощью функции dstuGenPoint().

Аргументы

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

err_t dstuValParams (const dstu_params * params)

Проверяется корректность долговременных параметров params.

Возвращает

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

Прим.

Проверяется корректность в том числе и базовой точки P.

Аргументы

params параметры

err_t dstuValPoint (const dstu_params * params, const octet point[])

Проверяется, что точка point эллиптической кривой, заданной долговременными параметрами params, удовлетворяет требованиям ДСТУ.

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

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

Возвращает

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

Прим.

Реализован алгоритм из раздела 10.1 ДСТУ.

Аргументы

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

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 из исходного текста.

Info

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