Как найти закрытый ключ из алгоритма цифровой подписи эллиптической кривой - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь выяснить, как найти закрытый ключ, используя форум в Википедии.

Я читал некоторые статьи на 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   

Я не знаю, где моя ошибка ... Может кто-нибудь указать на это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...