Спасибо за важное замечание. А как вообще можно разрешать менять подпись? Разве не в этом должна быть суть битка? Упрощенно говоря, подпись- приватключ+публичный ключ,т.е. адрес, пропущенный через некую функцию. Если вам кто угодно может менять ЭЦП или паспортные данные, то о какой критостойкости вообще идет речь?
Вы не понимаете сути электронной подписи ECDSA
У вас есть приватный ключ. Ну что такое приватный ключ - вы в общих чертах понимаете.
У приватного ключа есть публичный ключ. Вы мне передали свой публичный ключ.
Публичный - он потому и называется публичный, что он несекретный.
И, наконец, есть некоторое сообщение.
Ну, допустим, это строка "встречаемся в ГУМЕ у фонтана в 6 часов вечера".
Вы хотите чтобы я точно был уверен, что это сообщение отправили именно вы, а не какой-то Вася Пупкин.
Поэтому вы подписываете свое сообщение
электронной подписью.Электронная подпись в данном случае - это просто некий набор байтов. Примерно 64 байта для ECDSA secp256k1
И по этой электронной подписи я, имея также ваш публичный ключ могу однозначно сказать - вы это сообщение мне отправили или нет.
До сюда понятно? Должно быть понятно.
Проблема в том, что таких электронных подписей одного и того же сообщения вы можете сгенерировать туеву хучу.
В зависимости от того - какой программой вы будете их генерировать - у вас будут получаться разные подписи.
Они все будут правильные, но они будут разные. И по их внешнему виду вы ничего не сможете сказать - они все будут как случайный набор байтов выглядеть.
Так уж устроена цифровая подпись.
Если вы будете генерировать подпись "честной программой" - то никто вашим приватным ключом не завладеет.
А если вы будете генерировать подпись "жульнической программой", то злоумышленник сможет определить ваш приватный ключ.
Вас такой вариант событий не устраивает чем-то?
Ну, изобретите свой собственный алгоритм цифровой подписи. Лишенный этого недостатка.
Сразу скажу - на этом заработаете миллионы, если не миллиарды.