ECDSA
Для улучшения этой статьи желательно?:
|
ECDSA (Elliptic Curve Digital Signature Algorithm) — алгоритм с открытым ключом для создания цифровой подписи, аналогичный, по своему строению, DSA, но определённый, в отличие от него, не над полем целых чисел, а в группе точек эллиптической кривой.
Содержание |
Особенности [править]
Стойкость алгоритма шифрования основывается на проблеме дискретного логарифма в группе точек эллиптической кривой. В отличие от проблемы простого дискретного логарифма и проблемы факторизации целого числа, не существует субэкспонециального алгоритма для проблемы дискретного логарифма в группе точек эллиптической кривой. По этой причине «сила на один бит ключа» существенно выше в алгоритме, который использует эллиптические кривые.[1]
Д. Брауном (Daniel R. L. Brown) было доказано, что алгоритм ECDSA не является более безопасным, чем DSA. Им было сформулировано ограничение безопасности для ECDSA, которое привело к следующему заключению:
«Если группа эллиптической кривой может быть смоделирована основной группой и ее хэш-функция удовлетворяет определенному обоснованному предположению, то ECDSA устойчива к chosen-message атаке с существующей фальсификацией.»[2]
Алгоритм ECDSA в 1999 г. был принят, как стандарт ANSI, в 2000 г. — как стандарт IEEE и NIST. Также в 1998 г. алгоритм был принят стандартом ISO. Несмотря на то, что стандарты ЭЦП созданы совсем недавно и находятся на этапе совершенствования, одним наиболее перспективных из них на сегодняшний день является ANSI X9.62 ECDSA от 1999 — DSA для эллиптических кривых.
Выбор параметров [править]
Для подписывания сообщений необходима пара ключей — открытый и закрытый. При этом закрытый ключ должен быть известен только тому, кто подписывает сообщения, а открытый — любому желающему проверить подлинность сообщения. Также общедоступными являются параметры самого алгоритма.
Параметры алгоритма [править]
- Выбор хэш-функции
. Для использования алгоритма необходимо, чтобы подписываемое сообщение являлось числом. Хеш-функция должна преобразовать любое сообщение в последовательность битов, которые можно потом преобразовать в число. - Выбор большого простого числа
— порядок одной из циклических подгрупп группы точек эллиптической кривой.
- Замечание: Если размерность этого числа в битах меньше размерности в битах значений хэш-функции
то используются только левые биты значения хэш-функции.
- Замечание: Если размерность этого числа в битах меньше размерности в битах значений хэш-функции
- Простым числом
обозначается характеристика поля координат
.
Генерирование ключей ECDSA [править]
Для простоты будем рассматривать эллиптические кривые над полем
, где
— конечное простое поле. Причем, если необходимо, конструкцию можно легко адаптировать для эллиптических кривых над другим полем.
Пусть
— эллиптическая кривая, определенная над
, и
— точка простого порядка
кривой
. Кривая
и точка
являются системными параметрами. Число
— простое. Каждая пользовательница Алиса конструирует свой ключ посредством следующих действий:
- Выбирает случайное или псевдослучайное целое число
из интервала
. - Вычисляет произведение (кратное)
=
·
.
Открытым ключом пользовательницы Алисы
является точка
, а закрытым —
.
Вместо использования
и
в качестве глобальных системных параметров, можно фиксировать только поле
для всех пользователей и позволить каждому пользователю выбирать свою собственную эллиптическую кривую
и точку 
. В этом случае определенное уравнение кривой
, координаты точки
, а также порядок
этой точки
должны быть включены в открытый ключ пользователя. Если поле
фиксировано, то аппаратная и программная составляющие могут быть построены так, чтобы оптимизировать вычисления в том поле. В то же время имеется огромное количество вариантов выбора эллиптической кривой над полем
.
Вычисление цифровой подписи [править]
Для того, чтобы подписать какое-либо сообщение, для которого подсчитано значение
хэш-функции
, пользователь
должен сделать следующее:
- Выбрать случайное целое число
. - Вычислить
и положить в
, где
получается из целого числа
между
и
приведением по модулю
.
- Замечание: если
, то уравнение подписи
не зависит от секретного ключа
, и следовательно,
не подходит в качестве цифровой подписи. Значит, в случае
необходимо вернуться к шагу 1.
- Замечание: если
- Вычислить
и положить
, где h — значение хеш-функции подписываемого сообщения.
- Замечание: если
, то значение
, нужное для проверки, не существует. Значит, в случае
необходимо вернуться к шагу 1.
- Замечание: если
Подписью для сообщения является пара целых чисел
.
Проверка цифровой подписи [править]
Для того, чтобы проверить подпись пользовательницы Алисы
на сообщение, пользователь Борис
должен сделать следующее:
- Получить подтвержденную копию открытого ключа
пользовательницы А; - Проверить, что числа
и
являются целыми числами из интервала
, и вычислить значение хеш-функции
от сообщения; - Вычислить
и
; - Вычислить
, и относительно
, как целого числа между
и
, положить
; - Принять подпись, если и только если
.
Заметим, что, если пользовательница Алиса вычислила свою подпись правильно, то
, так как
, и поэтому
.
Для подтверждения публичного ключа Q нужно проделать следующее (
здесь обозначает бесконечно удалённую точку):
- Проверить, что
не равно
и координаты верны; - Проверить, что
лежит на кривой; - Проверить, что
;
ECDSA согласно стандарту ANSI X9.62 [править]
Для практического применения алгоритма ECDSA налагают ограничения на поля, в которых определены эллиптические кривые. Более того для избежания некоторых известных атак, ограничения накладываются и на уравнения, задающие эллиптические кривые, и на порядок базовых точек. Для простоты в данном разделе будем рассматривать только конечные
.
Требования к эллиптической кривой [править]
Для того, чтобы избежать известных атак, основанных на проблеме дискретного логарифма в группе точек эллиптической кривой, необходимо, чтобы число точек эллиптической кривой
делилось на достаточно большое простое число
. Стандарт ANSI X9.62 требует
. Уравнение эллиптической кривой строится специфическим образом, используя случайные/псевдослучайные коэффициенты.
Главными параметрами при построении эллиптической кривой являются:
- размерность поля
, где
явлется простым числом; - два элемента поля
—
и
, определенные уравнением эллиптической кривой
, где
имеет вид:
-
, - где
,
, и
+
0
.
-
- два элемента поля
—
и
, которые определяют конечную точку
— генератор группы 
- порядок
точки
, где
и
> 4 
- сомножитель
= #
/
, где обозначение #
означает порядок группы точек эллиптической кривой
.
Генерация главных параметров [править]
Один из способом генерирования криптографически надежных параметров заключается в следующем:
- Выбираем коэффициенты
и
специфическим образом используя в вычислениях случайные/псевдослучайные числа. Пусть
— эллиптическая кривая —
; - Вычисляем
; - Проверяем, что
имеет делитель, который является большим простым числом
и
. Если нет, то нужно вернуться на шаг 1. - Проверяем, что
не делит
для каждого
,
. Если нет, то нужно вернуться на шаг 1; - Проверяем, что
. Если нет, то нужно вернуть на шаг 1; - Берем случайную точку
и положить
. Повторяем до тех пор пока
.
В 1985 г. Скооф (Schoof) представил алгоритм, работающий за полимиальное время, для подсчета
, число точек эллиптической кривой определенная над полем
(p — нечетное простое число). Алгоритм Скоофа является достаточно не эффективным на практике для значений
, которые действительно представляют интерес, то есть
. В последние несколько лет было проделано много работы по улучшению и ускорению алгоритма Скоофа, сейчас он называется SEA (Schoof-Elkies-Atkin) алгоритм. С такими улучшениями криптографически пригодные эллиптические кривые, определенные над полями, чьи порядки более, чем
, могут быть сгенерированы за несколько часов на рабочих станциях.
Преимущества ECDSA перед DSA [править]
ECDSA является очень привлекательным алгоритмом для реализации ЭЦП. Самым важным преимуществом ECDSA является возможность его работы на значительно меньших полях
. Как, в общем, с криптографией эллиптической кривой, предполагается, что битовый размер открытого ключа, который будет необходим для ECDSA, равен двойному размеру секретного ключа в битах. Для сравнения, при уровне безопасности в 80 бит (то есть атакующему необходимо примерно
версий подписи для нахождения секретного ключа), размер открытого ключа DSA равен, по крайней мере, 1024 бит, когда как открытого ключа ECDSA — 160 бит. С другой стороны размер подписи одинаков и для DSA, и для ECDSA:
бит, где
— уровень безопасности, измеренный в битах, то есть — примерно 320 бит для уровня безопасности в 80 бит.
Практическая реализация [править]
На сегодняшний день реализация электронных цифровых подписей осуществляются программным образом. Для создания подобных продуктов используют специальные программные пакеты, позволяющие создавать криптографические приложения с использованием различных внешних устройств безопасности.
Примечания [править]
- ↑ Коржев В. Цифровая подпись. Эллиптические кривые. «Открытые системы» (8 августа 2002). Архивировано из первоисточника 22 февраля 2012. Проверено 16 ноября 2008.
- ↑ D. Brown Generic groups, collision resistance, and ECDSA. «Codes and Cryptography» (26 февраля 2002). Архивировано из первоисточника 27 февраля 2012. Проверено 27 ноября 2008.
Ссылки [править]
- Neal Koblitz and Alfred Menezes (1995). — Another Look at Generic Groups. Архивировано из первоисточника 27 февраля 2012. Проверено 27 ноября 2008.
| Это заготовка статьи по криптографии. Вы можете помочь проекту, исправив и дополнив её. |


. Для использования алгоритма необходимо, чтобы подписываемое сообщение являлось числом. Хеш-функция должна преобразовать любое сообщение в последовательность битов, которые можно потом преобразовать в
.
.
и положить в
, где
получается из целого числа
между
и
приведением по модулю
, то уравнение подписи
не зависит от секретного ключа
и положить
, то значение
, нужное для проверки, не существует. Значит, в случае
являются целыми числами из интервала
и
;
, и относительно
, как целого числа между
;
;
и
, определенные уравнением эллиптической кривой
,
+
0
.
и
, которые определяют конечную точку
— генератор группы
, где
и 
;
имеет делитель, который является большим простым числом
и
. Если нет, то нужно вернуться на шаг 1.
для каждого
,
. Если нет, то нужно вернуться на шаг 1;
. Если нет, то нужно вернуть на шаг 1;
и положить
. Повторяем до тех пор пока
.