Как можно разобраться / реализовать этот раздел задачи дискретного логарифмирования в ECDSA
В задаче дискретного логарифмирования кривой secp256k1 мне действительно любопытно, как будут реализованы точка генератора и открытый ключ (на том основании, что существует две версии параметров).
Мне было интересно, следует ли применять открытый ключ и точку генератора "в сжатом виде"02
" или же "03
"Или без сжатия с"04
".
Я нигде не мог найти на это ответа.
1 ответ
Префикс «02», «03», «04» обозначает тип сжатия точки.
«04» означает, что точка несжатая , то есть в таком виде указаны и координаты x, и y. «02» и «03» означают, что точка сжата . В этом представлении присутствует только координата x. Координата y может быть вычислена из координаты x (путем решения
y^2 = x^3 + ax + b (mod n)
). Поскольку существует 2 возможных значения y, «02» означает положительное значение, а «03» — отрицательное. (Отрицательный на самом деле не отрицательный, потому что мы используем операцию по модулю).
Например, для secp256k1 у нас есть -
Gx = 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
Gy = 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
// Which can be written as
G_compressed = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
G_uncompressed = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Внутренне обе эти формы представляют одну и ту же точку, т. е.
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
Кстати, это не имеет ничего общего с проблемой дискретного журнала.