Я выполняю задание по криптографии, и мне нужна подсказка (ПОЖАЛУЙСТА, НЕТ РЕШЕНИЯ).
Задача:
Я могу отправлять сообщения (цифровые номера) в контейнер Docker. Ответом являются значения p,q,g,z1,s,r и хэш-значение (m+z1). Итак... когда я ввожу число 1, я получаю значения DSA, используемые для подписи.
Неизвестно значение k, z2 и x (закрытый ключ).
Известно, что p,q,g,z1,z2 фиксированы для каждого сообщения. Так что они одинаковые каждый раз.
Известно, что значение k вычисляется:
k = g^(hashvalue + z2) по модулю q
Итак, в моем понимании: чтобы узнать значение k, мне нужно найти 2 сообщения, которые используют одно и то же k. Если мне это удалось, я могу вычислить ключ с помощью
k = (M1 - M2) / (s1 - s2)
Но как я могу узнать, что 2 сообщения используют одно и то же k с заданными значениями?
Что я на самом деле делаю:
Я написал программу Python, которая перебирает каждое сообщение, начиная с сообщения = 0. Затем вычисляет k по формуле и игнорирует z2 (что, я думаю, абсолютно неправильно...). Сохранение значений из вычисленного k в массиве. Затем поднимаем сообщение += 1 и делаем то же самое. После этого я сравниваю k из фактического сообщения с сохраненными значениями из сообщений ранее, если они совпадают. Но я сейчас на сообщении 2000000. Так что - я думаю, что делаю неправильные вещи.
Я совсем на неправильном пути?
Я могу получить больше значений с другими сообщениями, если это необходимо. Кто-нибудь может мне помочь?