Подпись кривой Secp256k1 близка к ожидаемой, но отсутствует 2 сегмента - PullRequest
1 голос
/ 17 марта 2020

Закрытый ключ:

7a01628988d23fae697fa05fcdae5a82fe4f749aa9f24d35d23f81bee917dfc3

Сообщение:

1019 * 101967668668668668668564564564564568564664564164664264664264664264664664664 *

1015 * 205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743
04ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36

Ожидаемый результат:

304402205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f7430220 04ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36

Как вы можете видеть, что ожидать у результата есть 2 сегмента, в которых не было моего результата:

304402 205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743 0220 04ee40d9fe8dd03e6ed36f5 происходит с моим результатом.

Спасибо!

1 Ответ

1 голос
/ 17 марта 2020

Я не знаю, как вы получили полученный результат, но ожидаемый результат выглядит как стандартная ECDSA подпись в ASN.1 / DER кодирование.

Чтобы разбить его:

  • 30: указывает, что ASN.1 SEQUENCE будет следовать
  • 44: длина последовательности, в данном случае 68 байтов
  • 02: указывает, что ASN.1 INTEGER будет следовать
  • 20: указывает длину целого числа, в данном случае 32 байта
  • 55 ... 43: 32 байта сигнатуры r значение
  • 02: указывает, что ASN.1 INTEGER будет следовать
  • 20: указывает длину целого числа, в данном случае 32 байта
  • 04 ... 36: 32 байта значения s

Как я уже сказал, я не уверен, какой тип кодирования используется для того результата, который у вас есть в настоящее время. Кажется, он содержит минимальную информацию, необходимую для извлечения значений r и s из байтового массива, но отбрасывает все остальное. (Я подозреваю, что это может быть какой-то вариант кодировки PER или пользовательской схемы кодирования.)

Особенно интересным является тот факт, что индикатор длины для целого числа r (20) присутствует в вашем результате. Помимо фактических значений r и s, это единственная дополнительная информация, которая строго необходима для успешного анализа подписи. Поскольку r и s могут иметь длину 32 или 33 байта, вам нужен один индикатор длины, чтобы знать, где заканчивается r и начинается s.

...