Я пытаюсь выяснить, как найти закрытый ключ, используя форум в Википедии.
Я читал некоторые статьи на https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm, как эта.
Моя задачаэто найти закрытый ключ: я дал два сообщения и их соответствующие подписи. Чтобы сэкономить на случайности, только первый одноразовый номер генерируется случайным образом. Одноразовый номер для второй сигнатуры выводится из предыдущего одноразового номера как k = a · k + b mod n, причем (a = 2, b = 1). Восстановить закрытый ключ d.
(r1, s1) = sigdecode_string(sig1, curve.order)
(r2, s2) = sigdecode_string(sig2, curve.order)
z1 = int.from_bytes(hashfunc(f1).digest(), 'big')
z2 = int.from_bytes(hashfunc(f2).digest(), 'big')
n = curve.order
Я попытался восстановить свои два ключа с помощью:
k1 = (z1-z2) * inverse_mod(s1-s2,n) %n
k2 = (2*k1+1) % n
d = (k1 * k2) % n
Я не знаю, где моя ошибка ... Может кто-нибудь указать на это?