Comments 4
Существует множество криптографических алгоритмов, которые используются для шифрования и которые можно применять для создания цифровой подписи. Например RSA и AES.
AES (Advanced Encryption Standard) - это алгоритм шифрования, он не используется для подписей. Более того, это алгоритм симметричного шифрования и не работает с парами открытый-закрытый ключ.
Но для создания цифровой подписи уже придуман отдельный криптографический алгоритм под названием DSA (Digital Signature Algorithm). Он основан на использовании пары открытого и закрытого ключа. Подпись создается секретно при помощи закрытого ключа, а проверяется публично открытым ключом. Тем самым закрытый ключ остается никому неизвестным.
Это не какой-то алгоритм, который один придуман специально для подписей и полностью решает проблему. Есть множество алгоритмов подписей, один из которых - DSA. RSA - это тоже схема подписи с публичным ключом, в этом плане DSA и RSA подписи ничем не отличаются.
в Sign message and verify using ECDSA описаны 4 пункта, но нигде не описано как используется приватный ключ. как используется приватный ключ в подписи?
Хорошо подмечено, потому что я опустил там формулы для расчета значений {r, s, v}.
Добавлю сюда шаги с формулами.
Приватный ключ обозначим в расчетах, как d
.
Упрощенный алгоритм подписи сообщения:
1. Рассчитывается хеш сообщения e
2. Создается случайное безопасное значение k
3. Рассчитывается точка (x1, y1)
на эллиптической кривой, путем умножения k на G (это константа эллиптической кривой)
4. Рассчитывается значение r
сигнатуры по формуле: r = x1 mod n
. Если r = 0
, то вернуться на шаг 2.
5. Рассчитывается значение s
сигнатуры по формуле: s = (k ** -1) * (e + r*d)
mod n. Если r = 0
, то вернуться на шаг 2.
Ответ: получается, что приватный ключ используется для вычисления значения s
для получения подписи сообщения.
Цифровые подписи в Ethereum: как с ними работать?