Как я могу преобразовать спецификацию кривой ECDSA из формы SEC2 в форму, необходимую для Go? - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь реализовать ECDSA на кривой secp256k1 в Google Go.

Secp256k1 определяется стандартом SECG (SEC 2, часть 2, Рекомендуемые параметры домена эллиптической кривой более ? p , стр. 15) в терминах параметров p, a, b , G сжатый, G несжатый, n и h.

В криптографической библиотеке Go кривые определяются параметрами P, N, B, Gx, Gy и BitSize. Как мне преобразовать параметры, заданные SECG, в те, которые нужны Go?

1 Ответ

3 голосов
/ 20 сентября 2011

В пакете Go elliptic,

A Curve представляет собой короткую кривую Вейерштрасса с = -3.

Итак, мыимеют кривые вида y² = x³ - 3·x + B (где x и y принимают значения в P ).P и B, таким образом, являются параметрами для идентификации кривой, остальные необходимы только для операций над элементами кривой, которые будут использоваться для криптографии.

Стандарт SECG SEC 2 определяет кривую secp256k1как y² = x³ + a·x + b с a = 0, то есть фактически y² = x³ + b.

Эти кривые не одинаковы, независимо от того, какие b и B. здесь выбраны.

Ваше преобразованиеневозможно с Curve пакетом elliptic класса , поскольку он поддерживает только некоторый специальный класс кривых (с a = -3), в то время как SEC 2 рекомендует кривые из других классов (a = 0 для ...k1кривые).


С другой стороны, кривые с ...r1 в названии кажутся a = -3.И на самом деле, secp256r1 кажется такой же кривой, которая доступна в elliptic как p256().(Я не доказал это, но, по крайней мере, некоторые шестнадцатеричные цифры несжатой формы базовой точки в SEC 2 являются координатами базовой точки в эллиптической форме.)

...