Сила Шнорра: Улучшаем масштабируемость и конфиденциальность Биткойна

30
ПОДЕЛИТЬСЯ

Сила Шнорра масштабирование криптовалют
Segregated Witness был включен в релиз Bitcoin Core 0.13.0, начинается подготовка к его развертыванию в сети Биткойн. Это хорошие новости, главным образом потому, что нововведение позволяет увеличить пропускную способность – количество транзакций, проходящих через сеть. Также, оно решает проблему пластичности транзакций.

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

Одно из таких долгожданных усовершенствований у части разработчиков Биткойна некоторое время стояло в начале списка пожеланий. Речь о подписях Шнорра.

Реализация алгоритма криптографической подписи Шнорра может последовать вскоре после грядущей активации Segregated Witness, что обещает одним махом улучшить масштабирование, эффективность и конфиденциальность в сети Биткойна.

И вот каким образом.

Подписи

Для начала, вкратце повторим: что такое подписи?

В основу Биткойна положен математический фокус, называемый “криптографией с открытым ключом” – криптографическая система, которая использует два типа “ключей” (на практике – два набора чисел): закрытый ключ и открытый ключ.

Закрытый и открытый ключи связаны математическим соотношением. Но хотя очень легко получить открытый ключ из закрытого, практически невозможно получить закрытый ключ из открытого. Это “улица с односторонним движением”.

Чтобы потратить биткойны с какого-либо биткойн-адреса, нужно доказать “владение” (то есть знание) закрытым ключом, который соответствует открытому ключу, связанному с этим адресом. И для доказательства владения закрытым ключом без необходимости обнародовать этот закрытый ключ и служит криптографическая подпись.

Подпись создается путем вычислений, в которых участвуют данные транзакции и закрытый ключ. И здесь вступает в игру магия криптографии с открытым ключом: зная открытый ключ, любой может убедиться, что для создания подписи использовался правильный закрытый ключ. Для этого даже не нужно знать сам закрытый ключ.

“Владелец” закрытого ключа может, таким образом, подписать транзакцию и потратить биткойны, не волнуясь о том, что кто-то другой может увидеть закрытый ключ и украсть эти биткойны – закрытый ключ никогда не раскрывается, а подпись годится только для этой конкретной транзакции.

(Подробности работы криптографии с открытым ключом в системе Биткойна изложены в этой статье. Или просто читайте дальше. Чтобы понять то, что изложено ниже, достаточно общего представления о подписях.)

Схема Шнорра

Так что такое подписи Шнорра?

Схема Шнорра, по имени ее создателя Клауса-Петера Шнорра – это набор математических правил, связывающих между собой закрытый ключ, открытый ключ и подпись. Многие криптографы считают подписи Шнорра лучшими в своей области, поскольку они гарантируют высокий уровень защиты от ошибок, не пластичны и сравнительно быстро проверяемы. И – что важно – поддерживают мультиподпись: несколько подписей могут быть объединены в новую единую подпись.

Несмотря на это, до сих пор не было возможности задействовать схему Шнорра для Биткойна. Другая схема подписи, Алгоритм цифровой подписи на основе эллиптических кривых (Elliptic Curve Digital Signature Algorithm – ECDSA) встроен в протокол Биткойна, и чтобы изменить это, понадобился бы хардфорк.

И тут вступает в игру Segregated Witness.

С Segregated Witness все данные подписи убраны в отдельную часть транзакции – свидетельство – отсутствующую в “старом” биткойн-протоколе. И благодаря наличию разных версий скриптов, практически любое правило, касающееся свидетельства, можно изменить путем софтфорка. Включая используемую схему подписи.

Это открывает двери для Шнорра.

Пропускная способность

Самое полезное для Биткойна свойство схемы Шнорра – это объединение множества подписей в одну.

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

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

Например:

Segregated Witness, как было предложено Bitcoin Core, делает (примерно) 75% скидку на все данные, включенные в свидетельство, а не в основной блок. Один мегабайт данных свидетельства таким образом “весит” как 0,25 мегабайта, что оставляет место для 0,75 мегабайт данных в основном блоке, давая в сумме 1 мегабайт.

Если комбинированные подписи Шнорра уменьшат общий объем данных свидетельства, скажем, с 1 мегабайта до 0,5 мегабайта, эти 0,5 мегабайта после скидки превратятся в 0,125 мегабайта, оставляя до 0,875 мегабайт на данные в основном блоке. (Увеличение пропускной способности примерно на 17%.)

Дополнительный объем зависит от типа транзакций, включенных в блок. Эрик Ломброзо (Eric Lombrozo), разработчик Bitcoin Core, предполагает, что подписи Шнорра могут, в конечном счете, дать прибавку в 40% к общей пропускной способности, увеличенной до того на 60-100% за счет Segregated Witness.

Мультиподпись

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

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

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

Конфиденциальность

И в-третьих, подписи Шнорра могут дать еще одно интересное преимущество: заинтересованность в конфиденциальности. Как уже упоминалось, у одной транзакции может быть несколько входов. Чаще всего эти входы ссылаются на адреса, контролируемые одним лицом. (Как в примере с несколькими купюрами и монетами.)

CoinJoin – трюк, придуманный разработчиком Bitcoin Core Грегори Максвеллом (Gregory Maxwell) – позволяет разным пользователям объединить все их транзакции в одну. Эта одна транзакция будет включать множество входов от разных плательщиков, которые отправляют деньги на множество выходов, принадлежащих разным адресатам.

(Это можно сравнить с группой людей, которые сложили все свои купюры и монеты в общую корзину, и ходят с ней по магазинам, чтобы купить все нужные им товары. Каждый получит товары, за которые он заплатил, но маловероятно, что за нужный ему товар будет уплачено именно его “собственной” купюрой.)

При правильной реализации CoinJoin – отличный способ усилить конфиденциальность в сети Биткойн, поскольку становится непонятно, с какого именно входа пришла оплата на данный выход, не говоря уже о том, кто кому заплатил.

Идея CoinJoin не нова. Но до сих пор он был делом хлопотным. Как правило, людям все равно. И поскольку большинству людей все равно, те, кому не все равно, автоматически попадают под подозрение, сводя на нет пользу от применения CoinJoin.

Но подписи Шнорра могут подарить CoinJoin дополнительное преимущество. Они позволяют всем участникам CoinJoin-транзакции не только объединить сами транзакции, но и объединить их подписи. Это означает, что размер полученной транзакции будет меньше, чем сумма размеров всех транзакций по отдельности. Что, в свою очередь, означает, что майнеры будут брать меньшую комиссию за обработку такой транзакции.

Таким образом, при использовании схемы Шнорра CoinJoin не только усилит конфиденциальность, но и, что важно, снизит затраты для каждого из участников. И в самом деле, экономическое преимущество получит самый конфиденциальный вариант, благодаря чему он станет для каждого выбором по умолчанию – значительно усилив конфиденциальность Биткойна для всех.

Примечание: Реализация подписей Шнорра в Биткойне все еще находится на этапе разработки идеи. Хотя большинство разработчиков Bitcoin Core уверены в том, что подписи Шнорра могут быть без особого риска развернуты в сети Биткойна, еще слишком рано говорить об этом с полной уверенностью.

Оригинал статьи: Bitcoinmagazine

30 КОММЕНТАРИИ

  1. существующие асики нормально будут обрабатывать алгоритм Шнорра ?

  2. Возникает закономерный вопрос: Увеличение числа транзакций в сети Биткойн на 40% (ведь такое увеличение “съест” весь ожидаемый положительный эффект от внедрения) наступит быстрее, чем произойдёт внедрение “подписей Шнорра”?
    И положительный, и отрицательный ответы на этот вопрос не вселяют оптимизма, увы.

    • Увеличение количества транзакций в блоке снизит цену одной транзакции. И этот эффект никуда не денется. Если же вы ждете, что блоки будут незаполненными, то такого не будет никогда. Если транзакций за 10 минут будет меньше, чем места для них в блоке, цена места в блоке снизится по простым рыночным законам. Это значит, что транзакции, помещение которых в блокчейн ранее было нерентабельным, теперь будут отправляться, количество транзакций станет увеличиваться – до тех пор, пока блоки опять не заполнятся. Закон Сэя.

    • Поэтому, увеличение вместимости, это лишь одна сторона многогранника. Поглощение свободного места в блоке это неизбежная реальность, при этом, простое, постоянное увеличение, это лишь костыль. Подписи Шнорра оптимизируют использование мультиподписей, которые в свою очередь необходимы для создания “умных контрактов” – слоев типа Lightning network, или Tumblebit. Эти слои, это магия, которая недоступна базовой технологии блокчейн, т.к их функции это уже блокчейн-инфраструктура. А это уже больше чем простое увеличение числа транзакций, это практически все, что можно только придумать…

      • “при этом, простое, постоянное увеличение, это лишь костыль.”
        То в одной обсуждении, то в другом постоянно вбрасываются такого рода утверждения:
        “увеличение блоков – тупиковый путь, это не решение проблемы, костыль и т.п.”

        Но простой вопрос, ПОЧЕМУ, вводит авторов утверждений в ступор.

        Может Вы расскажете это нам подробно, раз и навсегда, и я перестану задавать этот вопрос. 🙂

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

          У тебя есть глаза и поисковики, незачем очередной раз жевать жвачку.

        • Может быть, ты расскажешь подробно, каким именно должен быть размер блока, и почему?

        • При создании Биткоин-системы было продекларировано, что любой желающий может пользоваться системой.
          Значит, размер блока должен быть таким, чтобы вместить всех желающих.
          Но, так как мы живем в реальном мире, размер должен быть еще и таким, чтобы система могла нормально, бесперебойно функционировать.
          Решение очевидно, размер берется, исходя из этих условий.

          Но так как у нас сложная децентрализованная система, просто вычислить минимальное значение вряд ли получится. В таких случаях обычно поступают так. Для каждого важного параметра системы фиксируется допустимое значение с запасом: количество фулл-нод, количество орфанов, время распространения блока и т.д.
          На примере пресловутого количества фулл-нод. Минимальное допустимое 1000, с запасом 3000 (цифры условные). И условие, размер блока можно увеличивать, если количество фулл-нод превышает 3000. Увеличиваем блок, система развивается. Потребовалось следующее увеличение, проверяем показатели. Если какой-то хуже необходимого, значит, надо сначала решить эту проблему. Только потом увеличение.
          Вполне возможно, что на каком-то этапе нам больше не понадобится увеличение, или не чаще , чем в 10 лет.
          Обычная рациональная, безопасная схема работы.

          Теперь, как это выглядит со стороны разработчиков ядра:
          “Если мы один раз увеличим блок, мы будем ВЫНУЖДЕНЫ БЕСКОНЕЧНО увеличивать. В конце концов сломаем систему.
          Поэтому, мы не можем увеличить блок.”

          Это утверждает нам ОСНОВНОЙ разработчик команды Core. То есть, кроме такого плана, он лучше предложить не может? За ним стоят еще 100 (сто !!!) разработчиков, которые молчаливо соглашаются с этим.

        • У вас все карты на руках. Вот адрес сайта github.com, здесь можно все реализовать. Только там любят практическую сторону вопроса – реальный код, а не просто слова. При этом, сами разработчики именно таки способом доказывают свою позицию. Пока что ничего лучше, чем предложили 100 + 1 разработчик  Bitcoin Core, там нет. Вперед на баррикады! И тогда, возможно, я так же буду поддерживать Вас.

        • Ну, раз отправляете на баррикады, значит, план хорош. 🙂

        • То, что любой желающий может пользоваться системой, совсем не означает, что делать это он может, за счёт других пользователей.

        • Не совсем понял, что значит “за счет других пользователей” ?

        • А что тут понимать. Давным давно, сложилась ситуация, почему другой вопрос, при которой, те кто покупают биткойн, фактически оплачивают порядка 98% комиссионных тем, кто осуществляет транзакции. Естественно, что такое положение, привело к тому, что места в блоке, особенно для бесплатных транзакций, стало не хватать и комиссионные гарантирующие попадание транзакции в блок стали расти. Вполне нормально, что в перспективе для совершения транзакций придётся оплачивать полную их стоимость, на сегодня это около 5$. Если бы сложилась ситуация при которой пользователи полностью оплачивают стоимость транзакций, а места в блоке не хватает, то вопрос об увеличении размера блока, был бы по крайней мере логичным.
          Но поскольку, на сегодняшний день, совершенно не ясно, возможна ли такая ситуация, в принципе, то и вопрос об увеличении размера блока просто лишён логики.

        • То есть, Вы хотите дождаться ситуации, когда пользователи будут полностью оплачивать транзакции (напомню, что это будет лет через так 12-20), и если при этом не будет хватать места в блоке, то только тогда увеличить размер.

          Боюсь, что с 5$ комиссиями мы никогда не дойдет до ситуации нехватки блока. Вернее, мы никогда не дойдем до ситуации, когда комиссии будут больше 5$. 🙂 Платежная система с 5$ комиссиями обречена на провал.

          А вот если мы увеличим пропускную способность системы в 100 раз, тогда, чтобы заплатить полную стоимость транзакций, достаточно иметь комиссию 5 центов. Вот такая платежная система имеет шансы на успех.
          Поэтому, утверждение, что увеличение блока лишено логики, кажется лишенным логики. 🙂

        • Да не я хочу. А так работают естественные саморегулирующиеся системы, вмешательство в которые, чревато самыми не предсказуемыми последствиями. Естественность, невозможность вмешательства и как следствие саморегуляция – ключевые ценности биткойна. Сохранятся эти ценности сохранится и биткойн, и будут со временем и миллионы транзакций, и их дешевизна, и много чего ещё. Не сохранятся ценности – не сохранится и биткойн. Регулируемого, с самыми благими целями, барахла, в этом мире, начиная с фиата и далее везде, вагон и маленькая тележка. Почему, да потому, что одно вмешательство, влечёт за собой второе и третье, и так в бесконечность. Вот увеличили, например блок, а цена возьми, да и упади в два раза, майнеры повышают комиссию, а в результате падает и число транзакций и цена, и всё это носит цепной и обвальный характер и не остаётся ничего другого, кроме как снова вмешиваться и изменять лимит в 21млн. или ещё что то менять и менять, вмешиватся и вмешиватся. Ну и кому нужен этот цирк, если никто не может дать 100% гарантии, что так не произойдёт и биткойн не будет в результате угроблен.

        • То есть, в Биткоин-системе нельзя ничего менять, и это ценность.
          Если так, то утверждение “Сохранятся эти ценности сохранится и биткойн, и будут со временем и миллионы транзакций,” – извините, ложное. При 1мб блоке не может быть миллионов транзакций в блокчейне.

          Причем тут понятие – регулирование.
          И почему установка размера блока – 2мб – это регулирование системы.
          А установка размера блока – 1мб – это НЕ регулирование.

          ” Почему, да потому, что одно вмешательство, влечёт за собой второе и третье, и так в бесконечность” – это ничем не доказанное утверждение. Такими утверждениями можно оправдать любое бездействие. 🙂

          И Ваш пример – полная туфта.

          Событие 1: ” Вот увеличили, например блок”

          Событие 2: “цена возьми, да и упади в два раза, майнеры повышают комиссию, а в результате падает и число транзакций и цена”

          Так вот, событие 1 и событие 2 никак не связаны между собой.
          Событие 2 может произойти без всякого увеличения блока. А Вы на основании того, что может произойти мифическое событие 2, делаете вывод, что нельзя увеличивать блок.

          Дальше предполагаете какую-то логическую цепочку , которая потребует увеличения 21 млн. Причем никаких реальных оснований для этого, конечно, не приводите.

          Одни предположения и гадания.

        • Это мое мнение. Я знаю, что у вас противоположный взгляд. Поэтому не вижу смысла вести холивар. Если у вас есть аргументы, просто выскажите их, но пожалуйста, не нужно вот этих “может расскажите, может докажите”. Все, что я хотел сказать описано выше. Хотя, если есть конкретный вопрос, то возможно, если у меня будет ответ, я напишу.

        • Да, мое мнение отличается от Вашего. Но, у нас немножко разные ситуации. Я не вижу причин, почему мы не можем масштабироваться путем увеличения блоков. (На данном этапе. Вполне допускаю, что на каком-то уровне мы можем столкнуться с трудностями по этому пути.А может и нет.)
          А Вы ждете от меня аргументов. Каких? Трудно дать доказательства отсутствия. 🙂

          Вы же утверждаете, что увеличение блоков- плохой путь. Значит, у Вас есть достаточно убедительные основания для этого. Вы же не руководствуетесь такими соображениям, как “чует мое сердце, это плохой путь”. 🙂

          Да, я пытаюсь узнать от противников увеличения блоков доказательства. Но в итоге, кроме детского лепета, напободие: “разработчики Core профессионалы, им лучше знать, когда можно увеличить”, “вы думаете, так просто, взять и увеличить блок”, “вы не профессионал, не вам решать” и т.п. в ответ ничего вразумительного не получаю.

        • “Вы же утверждаете, что увеличение блоков- плохой путь.” Это не мое утверждение, это рассуждения в тон разработчикам Bitcoin Core. Возможно есть некоторые личные допущения, но это никак не влияет на заданный вектор. Так вот, как минимум развитие реализуемое этими людьми работает стабильно, и продолжает развиваться, а это меня вполне устраивает.

        • “при этом, простое, постоянное увеличение, это лишь костыль.”
          Здесь никаких рассуждений, Вы преподносите это как факт.
          И нет никаких ссылок, что это не Ваше мнение.

          Удивительно, что я выше угадал Ваш ответ.
          В принципе понятно, что у Вас нет доказательств. Просто, у Вас такой стиль обсуждения. 🙂

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here