Почему для биткоина важны подписи Schnorr в грядущем обновлении?

4245
Просмотры

В этой статье объясним технологию, по которой работают подписи Шнорра, а также расскажем, что это дает для экосистемы биткоина и как решает проблему масштабирования.

Что такое схема Шнорра в BTC

Названная в честь своего изобретателя, Клауса-Петера Шнорра, схема Шнорра, или подпись, — это метод улучшения пропускной способности сети посредством агрегирования подписей, необходимых для транзакции BTC (применительно к биткоину). Подписи — это метод доказательства того, что пользователь действительно является владельцем приватных ключей, связанных с адресом BTC, и, таким образом, может легитимно тратить свои балансы.

Подпись требуется для каждого входа (ввода, инпута). Вход — это просто ссылка на вывод из предыдущей транзакции биткоина, и поскольку транзакция может иметь несколько входов, это означает, что каждая из них потребует свою собственную подпись.

Давайте на примере. Я хочу отправить 1 BTC Ване С. Моя транзакция может состоять как бы из суммы моих балансов, которые собраны из вводов на счет (подробнее в этой статье). Такая транзакция может представлять собой:

Ввод 1 — 0,25 BTC,

Ввод 2 — 0,25 BTC,

Ввод 3 — 0,25 BTC,

Ввод 4 — 0,25 BTC.

Все вместе они будут равны 1 BTC, каждый из них должен иметь свою собственную подпись. Поскольку каждый вход требует своей собственной подписи, они увеличивают размер транзакции, следовательно, транзакция раздувается и занимает дополнительное пространство в блоке. И именно подпись Schnorr работает на объединение всех этих подписей, поэтому для транзакции требуется только одна, общая.

schnorr signatures by cryptofox
Без использования подписи Шнорра: каждая транзакция подписывается отдельно

По оценкам, внедрение схемы Шнорра в каждой транзакции Bitcoin может увеличить пропускную способность сети Bitcoin не менее чем на 25%.

schnorr signature криптофокс
С использованием подписи Шнорра: множественные транзакции объединяются одной подписью

Экономия данных еще больше, когда подписи Schnorr применяются к мультисиг- транзакциям, где требуется больше одной подписи для подтверждения права собственности на фонды.

Например, вы занимаетесь общим делом с двумя друзьями. Вы очень честные и дальновидные, поэтому при трате денег вашего совместного предприятия через биктоин-транзакции требуется подпись вашей троицы, пусть это будет по схеме 2-из-3 (три открытых ключа и две подписи). Если вы хотите с общего кошелька купить пиццу за биткоины, чтобы отметить годовщину вашей компании, для осуществления перевода нужно попросить хотя бы еще одного друга подписаться в транзакции.

Таким образом, вместо одной получаем две подписи. Это, опять же, занимает место в блоке. А если входов было, например, 200, то подписей уже требуется 400, что представляет ~28,5 кБ данных.

Шнорр в этом сценарии объединяет эти множественные подписи в одну. Но эта настройка требует авторизации всех исходных подписей, чтобы транзакция была действительной.

Преимущества подписей Schnorr

  • Улучшенная масштабируемость.

Благодаря экономии данных через агрегирование нескольких подписей размер транзакции становится меньше. Это оставляет больше места в блоке для добавления дополнительных транзакций, тем самым увеличивая емкость сети. Кроме того, это экономия для тех, кто проводит транзакцию, потому что комиссия высчитывается за байт.

  • Повышенная конфиденциальность.

В отношении транзакций с мультиподписью агрегированная подпись повышает безопасность лиц, участвующих в транзакции, поскольку их собственная подпись не требуется. Кроме того, в сочетании с CoinJoin, методом сжатия транзакций Bitcoin, также может быть улучшена конфиденциальность отдельного участника.

  • Спам-атаки.

Мемпул биткоина спамят, и часто это акции, связанные со взглядами на развитие сети. Например, чтобы указать на недостаточную масштабируемость.

Один из методов заспамить сеть — включить в транзакции десятки подписей, постоянно отправляя транзакции из многих источников. Пример можно увидеть своими глазами в обозревателе блоков по ссылке: https://www.blockchain.com/ru/btc/block/00000000000000000182aabc399d2daec86b50d510701a5fd098793a4eadead4

Подписи Schnorr борятся с подобным спамом. Если есть только одна подпись на транзакцию, больше транзакций будет попадать в блоки, и спамеру нужно будет отправлять гораздо больше транзакций и, следовательно, тратить больше денег.

Техническая часть

Биткоин-подписи создаются с использованием алгоритма с открытым ключом для создания цифровой подписи в группе точек с эллиптической кривой (ECDSA).

Подписи Schnorr — это еще одна форма цифровых подписей. Подписи основаны на тех же предположениях безопасности, что и ECDSA, и совместимы с эллиптической кривой, которую уже использует биткоин. Ее название SECP256k1. Это означает, что схемы Schnorr могут создаваться с теми же приватными ключами и совместимыми с используемыми в настоящее время схемами деривации (формирования) ключей.

Подписи ECDSA немного отличаются по размеру, но большинство из них около 71-73 байта, максимум 75 байт, а теоретический минимум 8 байт.

Подписи Schnorr более компактны: максимальная длина каждой подписи составляет 64 байта.

Блоки BTC включают в себя тысячи подписей, они составляют более трети данных блокчейна. Значит, будучи просто более компактным, подписи Schnorr уменьшат количество блоков данных на несколько процентов.

Касательно объединения мультиподписей, подписи Schnorr имеют математическое свойство, которое позволяет объединять несколько объектов в один, получая размер одной подписи и не теряя авторизацию оригинальных отдельных подписей.

Например, транзакционный вход 3 из 15 и 10 из 15 теперь может иметь одинаковый вес.

Также есть новые работы, которые предлагают передовые идеи. Например, с агрегацией Шнорра компактно кодировать смарт-контракты. Условия контракта будут скрыты от других пользователей и прозрачны для его участников, но будут применяться всей сетью Bitcoin.

Благодаря этому же свойству, атомарные свопы с перекрестными цепями тоже можно выражать в одной подписи Шнорра.

Внедрение Schnorr в биткоин требует нового OP_CODE для проверки подписи. После принятия Segwit поддержка новых подписей может быть активирована с помощью софтфорка.