Введение в технологию Блокчейн. Тимур Сергеевич Машнин
Чтение книги онлайн.
Читать онлайн книгу Введение в технологию Блокчейн - Тимур Сергеевич Машнин страница 4
И операция просто возвращает «да», если подпись действительна, или «нет», если она не действительна.
Таким образом, есть три операции, три алгоритма, которые составляют схему подписи.
Причем, первые два алгоритма могут быть рандомизированными алгоритмами.
Проверка всегда будет детерминированным алгоритмом.
Метод generateKeys должен быть рандомизированным, потому что он должен генерировать разные ключи для разных людей.
И подписи также должны отличаться для разных сообщений.
Подписи должны удовлетворять следующим двум требованиям.
Прежде всего, действительные подписи должны пройти проверку.
Если подпись действительна, т. е. если я подпишу сообщение с моим секретным ключом, и, если кто-то затем позже попытается проверить ее, используя мой открытый ключ и то же самое сообщение, подпись будет корректно проверяться.
Второе требование, это то, что невозможно подделать подписи.
То есть, злоумышленник, который знает ваш открытый ключ, ключ проверки, и может видеть подписи на некоторых других сообщениях, не сможет подделать вашу подпись на каком-либо другом сообщении.
На практике существует ограничение на размер сообщения, который вы можете подписать, поскольку реальные схемы работают с битовыми строками ограниченной длины.
Поэтому используется хэш сообщения, а не сам текст сообщения.
Таким образом, сообщение может быть действительно большим, но хэш будет только 256 бит.
И поскольку функции хэша не имеют коллизий, хэш сообщения безопасно использовать в качестве входного сигнала для схемы цифровой подписи, а не само сообщение.
И, кстати, забавный трюк, который мы будем использовать позже, заключается в том, что вы можете подписать хэш-указатель.
И если вы подписываете хэш-указатель, то подпись покрывает или защищает всю структуру, а не только сам указатель хеширования, но и все, на что он указывает.
Например, если вы подписываете хеш-указатель, который был в конце цепочки блоков, результатом будет то, что вы эффективно подписываете весь контент этой цепочки блоков.
Это пример цифровой подписи с использованием алгоритма RSA.
Биткойн использует определенную схему цифровой подписи, которая называется ECDSA.
Это алгоритм эллиптической кривой Elliptic Curve Digital Signature Algorithm.
И это стандарт правительства США.
Мы не будем вдаваться во все детали того, как работает ECDSA.
Он полагается на сложную математику.
И поверьте мне, вы не хотите видеть все детали того, как это работает. Поэтому мы это пропустим.
Одна вещь, которую я хочу заметить, это то, что для ECDSA важна хорошая рандомизация. Хорошая случайность особенно важна для ECDSA.
Если вы используете плохую рандомизацию для генерации ключей или