Segregated Witness: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
орфография, уточнение
 
(не показано 17 промежуточных версий 10 участников)
Строка 2: Строка 2:
'''Segregated Witness''' (сокращенно SegWit) — реализованное обновление протокола, призванное решить проблему [[Пластичность транзакции|пластичности транзакций]] блокчейна [[Биткойн]], а также [[Проблема масштабируемости биткойна|увеличить её пропускную способность]]. Аналогичное обновление реализовано и для некоторых других [[Криптовалюта|криптовалют]], таких как [[Litecoin]], [[DigiByte]], [[Groestlcoin]] и [[Vertcoin]].<ref name="LongRoad" />
'''Segregated Witness''' (сокращенно SegWit) — реализованное обновление протокола, призванное решить проблему [[Пластичность транзакции|пластичности транзакций]] блокчейна [[Биткойн]], а также [[Проблема масштабируемости биткойна|увеличить её пропускную способность]]. Аналогичное обновление реализовано и для некоторых других [[Криптовалюта|криптовалют]], таких как [[Litecoin]], [[DigiByte]], [[Groestlcoin]] и [[Vertcoin]].<ref name="LongRoad" />


SegWit является [[Проблема масштабируемости биткойна#Софт форк|софт форком]] и позволяет сети функционировать в прежнем режиме. Однако изменяется структура хранения данных в блоке и механизм проверки транзакций для полноценных узлов сети. Теперь подписи и сценарии выделяются в обособленную структуру, именуемую ''отдельным свидетелем'' ({{lang-en|segregated witness}}). Это позволяет основному блоку вместить больше транзакций, а также исключает вариативность идентификатора одной и той же транзакции.<ref name="LongRoad" />
SegWit является «[[Проблема масштабируемости биткойна#Софт форк|мягким форком]]» и позволяет сети функционировать в прежнем режиме. Однако изменяется структура хранения данных в блоке и механизм проверки транзакций для полноценных узлов сети. Теперь подписи и сценарии выделяются в обособленную структуру, именуемую ''отдельным свидетелем'' ({{lang-en|segregated witness}}). Это позволяет основному блоку вместить больше транзакций, а также исключает вариативность идентификатора одной и той же транзакции.<ref name="LongRoad" />


== История ==
== История ==
Строка 8: Строка 8:
=== Проблема масштабируемости ===
=== Проблема масштабируемости ===
{{main|Проблема масштабируемости биткойна}}
{{main|Проблема масштабируемости биткойна}}
[[Файл:BTC number of transactions per month.png|thumb|400px|Ежемесячное количество транзакций в сети Биткойн]]
[[Файл:Bitcoin transactions per month.svg|thumb|400px|Ежемесячное количество транзакций в сети Биткойн]]
В 2010 [[Сатоси Накамото]] ввёл ограничение на размер блока в 1 [[мегабайт]]. Ограничение позволило улучшить совместимость узлов сети, а также снизить эффективность [[DDoS]]-атак, но снизило максимальную пропускную способность сети до 3-7 транзакций в секунду. Последнее в дальнейшем оказало негативное влияние на способность сети к масштабированию. С ростом пользовательской базы и количества переводов, стали расти и задержки — некоторые транзакции ожидали очереди несколько дней. Это также привело к росту комиссий за переводы, что резко снизило привлекательность Биткойна для мелких платежей.<ref name=Satoshi>[https://cointelegraph.com/news/satoshis-best-kept-secret-why-is-there-a-1-mb-limit-to-bitcoin-block-size Satoshi’s Best Kept Secret: Why is There a 1 MB Limit to Bitcoin Block Size]</ref>
В 2010 [[Сатоси Накамото]] ввёл ограничение на размер блока в 1 [[мегабайт]]. Ограничение позволило улучшить совместимость узлов сети, а также снизить эффективность [[DDoS]]-атак, но снизило максимальную пропускную способность сети до 3-7 транзакций в секунду. Последнее в дальнейшем оказало негативное влияние на способность сети к масштабированию. С ростом пользовательской базы и количества переводов стали расти и задержки — некоторые транзакции ожидали очереди несколько дней. Это также привело к росту комиссий за переводы, что резко снизило привлекательность Биткойна для мелких платежей.<ref name=Satoshi>{{Cite web |url=https://cointelegraph.com/news/satoshis-best-kept-secret-why-is-there-a-1-mb-limit-to-bitcoin-block-size |title=Satoshi’s Best Kept Secret: Why is There a 1 MB Limit to Bitcoin Block Size |access-date=2017-12-24 |archive-date=2017-12-24 |archive-url=https://web.archive.org/web/20171224102015/https://cointelegraph.com/news/satoshis-best-kept-secret-why-is-there-a-1-mb-limit-to-bitcoin-block-size |deadlink=no }}</ref>


Предлагалось увеличить размер блока, что было реализовано в таких форках Биткойна, как [[Bitcoin XT]], [[Bitcoin Classic]], [[Bitcoin Unlimited]], [[Lightning Bitcoin]] и самом успешном [[Bitcoin Cash]].<ref name="Forks">[https://www.coindesk.com/controversial-bitcoin-alternative-seeking-comeback/ A Controversial Bitcoin Alternative is Seeking a Comeback]</ref><ref name="BCC">[https://www.bitcoin.com/info/differences-between-bitcoin-cash-bcc-and-bitcoin-btc Differences Between Bitcoin Cash and Bitcoin]</ref>
Предлагалось увеличить размер блока, что было реализовано в таких форках Биткойна, как [[Bitcoin XT]], [[Bitcoin Classic]], [[Bitcoin Unlimited]], [[Lightning Bitcoin]] и самом успешном [[Bitcoin Cash]].<ref name="Forks">{{Cite web |url=https://www.coindesk.com/controversial-bitcoin-alternative-seeking-comeback/ |title=A Controversial Bitcoin Alternative is Seeking a Comeback |access-date=2017-12-24 |archive-date=2017-12-01 |archive-url=https://web.archive.org/web/20171201131450/https://www.coindesk.com/controversial-bitcoin-alternative-seeking-comeback/ |deadlink=no }}</ref><ref name="BCC">{{Cite web |url=https://www.bitcoin.com/info/differences-between-bitcoin-cash-bcc-and-bitcoin-btc |title=Differences Between Bitcoin Cash and Bitcoin |access-date=2017-12-24 |archive-date=2017-12-24 |archive-url=https://web.archive.org/web/20171224213728/https://www.bitcoin.com/info/differences-between-bitcoin-cash-bcc-and-bitcoin-btc |deadlink=no }}</ref>


=== Пластичность транзакции ===
=== Пластичность транзакции ===
Ещё одной острой проблемой сети Биткойн являлась так называемая ''пластичность транзакции''. Обычная структура транзакции Биткойна содержит [[Электронная подпись|криптографическую подпись]], которая позволяет другим участникам сети проверить, действительно ли владелец биткойнов собрался их так потратить. Подпись рассчитывается на основе [[Закрытый ключ|приватного ключа]] для каждой транзакции, что исключает изменение данных самой транзакции. Идентификатором транзакции является её [[Хеш-сумма|хеш]], который вычисляется на основе всего блока транзакции. Малейшее изменение в транзакции изменяет её идентификатор.<ref name=ExplMal >[https://bitcointechtalk.com/transaction-malleability-explained-b7e240236fc7 Transaction Malleability Explained]</ref> На самом деле, можно изменить транзакцию, оставив её действительной (например, добавив необязательные служебные константы в подпись, которые существенно не изменяют сценарий).<ref name="Mutated transaction">[https://steemit.com/steemit/@an0nym0u5/bitcoin-transaction-malleability-theory-in-practice Bitcoin Transaction Malleability Theory in Practice]</ref> При этом изменится её идентификатор, а значит модифицированная транзакция будет считаться совершенно новой и более того, сможет пройти верификацию у других узлов сети.<ref name=ExplMal >[https://bitcointechtalk.com/transaction-malleability-explained-b7e240236fc7 Transaction Malleability Explained]</ref>
Ещё одной острой проблемой сети Биткойн являлась так называемая ''пластичность транзакции''. Обычная структура транзакции Биткойна содержит [[Электронная подпись|криптографическую подпись]], которая позволяет другим участникам сети проверить, действительно ли владелец биткойнов собрался их так потратить. Подпись рассчитывается на основе [[Закрытый ключ|закрытого ключа]] для каждой транзакции, что исключает изменение данных самой транзакции. Идентификатором транзакции является её [[Хэш-сумма|хэш]], который вычисляется на основе всего тела транзакции. Малейшее изменение в транзакции изменяет её идентификатор.<ref name=ExplMal >[https://bitcointechtalk.com/transaction-malleability-explained-b7e240236fc7 Transaction Malleability Explained]</ref> На самом деле, можно изменить транзакцию, оставив её действительной (например, добавив необязательные служебные константы в подпись, которые существенно не изменяют сценарий).<ref name="Mutated transaction">{{Cite web |url=https://steemit.com/steemit/@an0nym0u5/bitcoin-transaction-malleability-theory-in-practice |title=Bitcoin Transaction Malleability Theory in Practice |access-date=2017-12-14 |archive-date=2017-12-14 |archive-url=https://web.archive.org/web/20171214072516/https://steemit.com/steemit/@an0nym0u5/bitcoin-transaction-malleability-theory-in-practice |deadlink=no }}</ref> При этом изменится её идентификатор, а значит модифицированная транзакция будет считаться совершенно новой и более того, сможет пройти верификацию у других узлов сети.<ref name="ExplMal"/>


Любой узел сети может модифицировать транзакцию и транслировать её остальным. Если модифицированная транзакция будет включена в блок основной ветки раньше оригинальной или в дальнейшем окажется в более длинной ветке, то исходная транзакция будет отвергнута, так как будет ссылаться на использованный выход (так же будут отвергнуты и ссылающиеся на неё).<ref name=TrExpl>[https://bitcoin.org/en/developer-guide#block-height-and-forking Bitcoin Developer Guide]</ref> Это создает множество проблем, так как некоторые системы проверяли факт проведения платежа по идентификатору. Также это усложняет реализацию технологий более высокого уровня, которые основываются на [[блокчейн]]е Биткойна.<ref name="ExplMal" />
Любой узел сети может модифицировать транзакцию и транслировать её остальным. Если модифицированная транзакция будет включена в блок основной ветки раньше оригинальной или в дальнейшем окажется в более длинной ветке, то исходная транзакция будет отвергнута, так как будет ссылаться на использованный выход (так же будут отвергнуты и ссылающиеся на неё).<ref name=TrExpl>{{Cite web |url=https://bitcoin.org/en/developer-guide#block-height-and-forking |title=Bitcoin Developer Guide |access-date=2017-12-25 |archive-date=2017-12-28 |archive-url=https://web.archive.org/web/20171228151114/https://bitcoin.org/en/developer-guide#block-height-and-forking |deadlink=no }}</ref> Это создает множество проблем, так как некоторые системы проверяли факт проведения платежа по идентификатору. Также это усложняет реализацию технологий более высокого уровня, которые основываются на [[блокчейн]]е Биткойна.<ref name="ExplMal" />


Разработчики и раньше пытались решить эту проблему, но она так и не была полностью устранена до обновления SegWit.<ref name="BIP62">[https://bitcoinmagazine.com/articles/the-who-what-why-and-how-of-the-ongoing-transaction-malleability-attack-1444253640/ The Who, What, Why and How of the Ongoing Transaction Malleability Attack]</ref><ref name=BIP66>[https://bitcoin.org/en/release/v0.10.0 Bitcoin Core version 0.10.0 released]</ref>
Разработчики и раньше пытались решить эту проблему, но она так и не была полностью устранена до обновления SegWit.<ref name="BIP62">{{Cite web |url=https://bitcoinmagazine.com/articles/the-who-what-why-and-how-of-the-ongoing-transaction-malleability-attack-1444253640/ |title=The Who, What, Why and How of the Ongoing Transaction Malleability Attack |access-date=2017-12-24 |archive-date=2017-12-24 |archive-url=https://web.archive.org/web/20171224155406/https://bitcoinmagazine.com/articles/the-who-what-why-and-how-of-the-ongoing-transaction-malleability-attack-1444253640/ |deadlink=no }}</ref><ref name=BIP66>{{Cite web |url=https://bitcoin.org/en/release/v0.10.0 |title=Bitcoin Core version 0.10.0 released |access-date=2017-12-24 |archive-date=2017-11-24 |archive-url=https://web.archive.org/web/20171124135215/https://bitcoin.org/en/release/v0.10.0 |deadlink=no }}</ref>


Предполагается, что с помощью пластичности транзакции было «нелегально» выведено 64 564 BTC из популярной в своё время биржи [[MtGox]]<ref name="MtGox">[https://www.coindesk.com/study-finds-mt-gox-lost-386-bitcoins-due-transaction-malleability/ Study: Mt. Gox May Have Lost Just 386 BTC Due to Transaction Malleability]</ref>. Сеть [[Bitcoin Cash]] подверглась масштабной атаке на пластичность транзакций вскоре после [[Проблема масштабируемости биткойна#Хард форк|хард-форка]].<ref name=BCCAt>[https://hype.codes/bitcoin-cash-network-under-attack Bitcoin Cash network under attack]</ref>
Предполагается, что с помощью пластичности транзакции было «незаконно» выведено 64 564 BTC из популярной в своё время площадки [[MtGox]]<ref name="MtGox">{{Cite web |url=https://www.coindesk.com/study-finds-mt-gox-lost-386-bitcoins-due-transaction-malleability/ |title=Study: Mt. Gox May Have Lost Just 386 BTC Due to Transaction Malleability |access-date=2017-12-23 |archive-date=2017-12-23 |archive-url=https://web.archive.org/web/20171223220323/https://www.coindesk.com/study-finds-mt-gox-lost-386-bitcoins-due-transaction-malleability/ |deadlink=no }}</ref>. Сеть [[Bitcoin Cash]] подверглась масштабной атаке на пластичность транзакций вскоре после «[[Проблема масштабируемости биткойна#Хард форк|хард-форка]]».<ref name=BCCAt>[https://hype.codes/bitcoin-cash-network-under-attack Bitcoin Cash network under attack]{{Недоступная ссылка}}</ref>


=== Атака «дней рождения» ===
=== Атака «дней рождения» ===
{{main|Атака «дней рождения»}}
{{main|Атака «дней рождения»}}
[[Мультиподпись|Мультиподписные]] адреса Биткойна используют P2SH и защищены с помощью HASH160 (160-битная [[хеш-функция]]). Если злоумышленник владеет хотя бы 1 ключом из мультиподписного списка, то с учётом [[Коллизия хеш-функции|коллизии хеша]] он может снизить количество вариантов перебора до 2<sup>80</sup>, что уже осуществимо для современных вычислительных систем<ref name=SWBen>[https://bitcoincore.org/en/2016/01/26/segwit-benefits/ Segregated Witness Benefits]</ref>.
[[Мультиподпись|Мультиподписные]] адреса Биткойна используют P2SH и защищены с помощью HASH160 (хэш [[SHA-2|SHA-256]] внутри [[RIPEMD-160]]<ref>{{Cite web|url=https://en.bitcoin.it/wiki/Script#Crypto|title=Script - Bitcoin Wiki|website=en.bitcoin.it|accessdate=2021-02-05|archive-date=2021-02-04|archive-url=https://web.archive.org/web/20210204043007/https://en.bitcoin.it/wiki/Script#Crypto|deadlink=no}}</ref>). Если злоумышленник владеет хотя бы 1 ключом из мультиподписного списка, то с учётом [[Коллизия хеш-функции|коллизии хэша]] он может снизить количество вариантов перебора до 2<sup>80</sup>, что уже осуществимо для современных вычислительных систем<ref name=SWBen>{{Cite web |url=https://bitcoincore.org/en/2016/01/26/segwit-benefits/ |title=Segregated Witness Benefits |access-date=2017-12-13 |archive-date=2018-04-26 |archive-url=https://web.archive.org/web/20180426230935/https://bitcoincore.org/en/2016/01/26/segwit-benefits/ |deadlink=no }}</ref>.


== Segregated Witness ==
== Segregated Witness ==
Для решения обеих вышеупомянутых проблем было предложено обновление Segregated Witness. Суть заключается в вынесении подписей транзакций в одноименную структуру вне основной части, что значительно уменьшает последнюю, так как размер подписи составлял более 50 % от размера всей транзакции.
Также это решает проблему пластичности транзакций, ведь подписи больше не влияют на хэш-идентификатор.<ref name="LongRoad" /><ref name="SWDev" />


Но теперь, чтобы проверить все транзакции, узлу нужно загружать расширенный блок (основной блок + отделенный свидетель). О готовности принять расширенный блок узел специально сообщает соседям. Остальные узлы принимают стандартные блоки в 1МБ, считая что транзакции не нуждаются в подписи. Блок подписей связывается с основной цепочкой с помощью [[Дерево хешей|дерева Меркла]], расположенного в заголовке блока. От всех подписей так же как и от всех транзакций считаются хэши и заносятся в дерево. Суммарный хэш подписей присоединяется к хэшу первой транзакции (coinbase-транзакции) в дереве Меркла транзакций.<ref name="LongRoad" /><ref name="SWDev">[https://segwit.org/pieter-wuille-segregated-witness-and-its-impact-on-scalability-sf-bitcoin-devs-7813eebcf3de Pieter Wuille: Segregated witness and its impact on scalability @ SF Bitcoin Devs]{{Недоступная ссылка}}</ref>
Для решения обеих вышеупомянутых проблем было предложено обновление Segregated Witness. Суть заключается в вынесении подписей транзакций в одноименную структуру вне основного блока, что значительно разгружает последний, так как размер подписи составлял более 50 % от размера всего блока транзакций.
Также это решает проблему пластичности транзакций, ведь подписи больше не влияют на хеш-идентификатор.<ref name="SWDev" /><ref name="LongRoad" />


Расширенный блок теоретически ограничен 4 мегабайтами, но фактически максимальный размер блока составляет чуть менее 2 МБ.<ref name=expectSW>{{Cite web |url=https://bitcoinmagazine.com/articles/segregated-witness-activates-bitcoin-what-expect/ |title=Segregated Witness Activates on Bitcoin: This is What to Expect |access-date=2017-12-23 |archive-date=2017-12-01 |archive-url=https://web.archive.org/web/20171201145610/https://bitcoinmagazine.com/articles/segregated-witness-activates-bitcoin-what-expect/ |deadlink=no }}</ref>
Но теперь, чтобы проверить все транзакции, узлу нужно загружать расширенный блок (основной блок + отделенный свидетель). О готовности принять расширенный блок, узел специально сообщает соседям. Остальные узлы принимают стандартные блоки в 1МБ, считая что транзакции не нуждаются в подписи. Блок подписей связывается с основной цепочкой с помощью [[Дерево хешей|дерева Меркла]], расположенного в заголовке блока. От всех подписей так же как и от всех транзакций считаются хеши и заносятся в дерево. Суммарный хеш подписей присоединяется к хешу первой транзакции (coinbase-транзакции) в дереве Меркла транзакций.<ref name="SWDev">[https://segwit.org/pieter-wuille-segregated-witness-and-its-impact-on-scalability-sf-bitcoin-devs-7813eebcf3de Pieter Wuille: Segregated witness and its impact on scalability @ SF Bitcoin Devs]</ref><ref name="LongRoad" />

Расширенный блок теоретически ограничен 4 мегабайтами, но фактически максимальный размер блока составляет чуть менее 2 МБ.<ref name=expectSW>[https://bitcoinmagazine.com/articles/segregated-witness-activates-bitcoin-what-expect/ Segregated Witness Activates on Bitcoin: This is What to Expect]</ref>


В SegWit для защиты MultiSig-кошельков вместо P2SH используется P2WSH, защищенный [[SHA256]]. Это усложняет атаку «дней рождения» до 2<sup>128</sup>.<ref name="SWBen" />
В SegWit для защиты MultiSig-кошельков вместо P2SH используется P2WSH, защищенный [[SHA256]]. Это усложняет атаку «дней рождения» до 2<sup>128</sup>.<ref name="SWBen" />


=== Активация ===
=== Активация ===
Segregated Witness был предложен Питером Вюлле (Pieter Wuille) в конце 2015 года. [[Релиз (программное обеспечение)|Релиз]] состоялся в октябре 2016 года — на 6 месяцев раньше запланированного срока. Активация должна была произойти после преодоления 95%-порога участников, сигнализирующих о поддержке обновления. Но некоторые участники сети заявили, что поддержат обновление, только если в него будет добавлено увеличение размера основного блока (китайские пулы могли заблокировать введение SegWit.).<ref name="LongRoad" /> 23 мая 2017 года майнеры и разработчики подписали Нью-Йоркское соглашение<ref name=NYA>[https://medium.com/@DCGco/bitcoin-scaling-agreement-at-consensus-2017-133521fe9a77 New York Agreement]</ref>, предполагавшее увеличение размера основного блока до 2 МБ в течение 6 месяцев (это обновление назвали SegWit2x). SegWit был активирован 24 августа 2017 года.<ref name=LongRoad>[https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/ The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality]</ref>
Segregated Witness был предложен Питером Вюлле (Pieter Wuille) в конце 2015 года. Выпуск состоялся в октябре 2016 года — на 6 месяцев раньше запланированного срока. Активация должна была произойти после преодоления 95%-го порога участников, сигнализирующих о поддержке обновления. Но некоторые участники сети заявили, что поддержат обновление, только если в него будет добавлено увеличение размера основного блока (китайские пулы могли заблокировать введение SegWit.).<ref name="LongRoad" /> 23 мая 2017 года майнеры и разработчики подписали Нью-Йоркское соглашение<ref name=NYA>{{Cite web |url=https://medium.com/@DCGco/bitcoin-scaling-agreement-at-consensus-2017-133521fe9a77 |title=New York Agreement |access-date=2017-12-22 |archive-date=2017-08-07 |archive-url=https://web.archive.org/web/20170807153406/https://medium.com/@DCGco/bitcoin-scaling-agreement-at-consensus-2017-133521fe9a77 |deadlink=no }}</ref>, предполагавшее увеличение размера основного блока до 2 МБ в течение 6 месяцев (это обновление назвали SegWit2x). SegWit был активирован 24 августа 2017 года.<ref name=LongRoad>{{Cite web |url=https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/ |title=The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality |access-date=2017-12-14 |archive-date=2017-12-14 |archive-url=https://web.archive.org/web/20171214124644/https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/ |deadlink=no }}</ref>


Некоторые [[альткойн]]ы тоже решили реализовать SegWit. Так как многие альткойны основаны на базе кода Биткойна, это не доставило разработчикам особых проблем. Первым из них активировал обновление [[Groestlcoin]] в январе 2017 года.<ref name="LongRoad" />
Некоторые [[альткойн]]ы тоже решили реализовать SegWit. Так как многие альткойны основаны на коде Биткойна, это не составило для разработчиков особых трудностей. Первым из них активировал обновление [[Groestlcoin]] в январе 2017 года.<ref name="LongRoad" />


== Преимущества ==
== Преимущества ==
Строка 46: Строка 45:
* Увеличивает количество транзакций в блоке.<ref name="SWBen" />
* Увеличивает количество транзакций в блоке.<ref name="SWBen" />
* Снижает комиссионные сборы.<ref name="SWBen" />
* Снижает комиссионные сборы.<ref name="SWBen" />
* За счёт количества транзакций в блоке, общие сборы майнеров могут увеличиться.<ref name="SWBen" />
* За счёт количества транзакций в блоке общие сборы майнеров могут увеличиться.<ref name="SWBen" />
* Уменьшает время ожидания в очереди.<ref name="SWBen" />
* Уменьшает время ожидания в очереди.<ref name="SWBen" />
* Способствует масштабируемости Биткойна.<ref name="LongRoad" />
* Способствует масштабируемости Биткойна.<ref name="LongRoad" />
* Устраняет пластичность транзакций.<ref name="SWBen" />
* Устраняет пластичность транзакций.<ref name="SWBen" />
* Облегчает разработку и увеличивает эффективность и безопасность дополнительных надстроек ([[смарт-контракты]], Lightning Network и т. д.).<ref name="SWBen" />
* Облегчает разработку и увеличивает эффективность и безопасность дополнительных надстроек ([[смарт-контракты]], Lightning Network и т. д.).<ref name="SWBen" />
* Устраняет проблему квадратичного роста времени верификации транзакций.<ref name="SWBen" />
* Устраняет проблему квадратичного роста времени проверки транзакций.<ref name="SWBen" />
* Повышает надежность MultiSig-кошельков.<ref name="SWBen" />
* Повышает надежность MultiSig-кошельков.<ref name="SWBen" />


== Недостатки ==
== Недостатки ==
* Увеличивает использование ресурсов узла сети.<ref name=ProsCons>[https://bitcoincore.org/en/2016/10/28/segwit-costs/ Segregated Witness Costs and Risks]</ref>
* Увеличивает использование ресурсов узла сети.<ref name=ProsCons>{{Cite web |url=https://bitcoincore.org/en/2016/10/28/segwit-costs/ |title=Segregated Witness Costs and Risks |access-date=2017-12-24 |archive-date=2018-02-21 |archive-url=https://web.archive.org/web/20180221235615/https://bitcoincore.org/en/2016/10/28/segwit-costs/ |deadlink=no }}</ref>
* Несколько усложняется проверка транзакций.<ref name="ProsCons" />
* Несколько усложняется проверка транзакций.<ref name="ProsCons" />
* В то же время сборы майнеров могут сократится из-за введения надстроек.<ref name="ProsCons" />
* В то же время сборы майнеров могут сократится из-за введения надстроек.<ref name="ProsCons" />
* Некоторые участники считают SegWit лишь временной мерой и настаивают на увеличении размера основного блока.<ref name="LongRoad" />
* Некоторые участники считают SegWit лишь временной мерой и настаивают на увеличении размера основного блока.<ref name="LongRoad" />
* Дополнительная цепочка тоже требует обслуживания, в чём майнеры не особо заинтересованы. В сети Биткойн нет вознаграждения за верификацию транзакций (в отличие от [[Dash (криптовалюта)|Dash]]). Майнеров сдерживает только высокая вероятность [[майнинг]]а ошибочных блоков при высокой концентрации облегченных клиентов (SPV-нод).<ref name="Invalid blocks">[https://bitcoin.org/en/alert/2015-07-04-spv-mining SPV mining]</ref>
* Дополнительная цепочка тоже требует обслуживания, в чём майнеры не особо заинтересованы. В сети Биткойн нет вознаграждения за проверку транзакций (в отличие от [[Dash (криптовалюта)|Dash]]). Майнеров сдерживает только высокая вероятность [[майнинг]]а ошибочных блоков при высокой концентрации облегчённых клиентов (SPV-нод).<ref name="Invalid blocks">{{Cite web |url=https://bitcoin.org/en/alert/2015-07-04-spv-mining |title=SPV mining |access-date=2017-12-14 |archive-date=2017-12-29 |archive-url=https://web.archive.org/web/20171229163420/https://bitcoin.org/en/alert/2015-07-04-spv-mining |deadlink=no }}</ref>


== Дальнейшее развитие ==
== Дальнейшее развитие ==


8 ноября [[Проблема масштабируемости биткойна#Хард форк|хард-форк]] SegWit2x был отложен на неопределённое время из-за отсутствия [[консенсус]]а.<ref name=SW2X>[https://www.coindesk.com/2x-called-off-bitcoin-hard-fork-suspended-lack-consensus/ 2x Called Off: Bitcoin Hard Fork Suspended for Lack of Consensus]</ref>
8 ноября 2017 года «[[Проблема масштабируемости биткойна#Хард форк|хард-форк]]» SegWit2x был отложен на неопределённое время из-за отсутствия [[консенсус]]а.<ref name=SW2X>{{Cite web |url=https://www.coindesk.com/2x-called-off-bitcoin-hard-fork-suspended-lack-consensus/ |title=2x Called Off: Bitcoin Hard Fork Suspended for Lack of Consensus |access-date=2017-12-22 |archive-date=2018-01-03 |archive-url=https://web.archive.org/web/20180103061956/https://www.coindesk.com/2x-called-off-bitcoin-hard-fork-suspended-lack-consensus/ |deadlink=no }}</ref>


Благодаря обновлению SegWit существенно облегчается разработка и внедрение надстроек, а также увеличивается их безопасность и эффективность.<ref name="LongRoad" /> В ближайшее время планируется запуск [[Lightning Network]].<ref name="SWBen" /> Разрабатывается решение для увеличения гибкости смарт-контрактов [[Merklized Abstract Syntax Tree]] (MAST), которое также улучшает масштабируемость и повышает конфиденциальность.<ref name=MAST>[https://www.coindesk.com/inside-mast-little-known-plan-advance-bitcoin-smart-contracts/ Inside MAST: The Little-Known Plan to Advance Bitcoin Smart Contracts]</ref>
Благодаря обновлению SegWit существенно облегчается разработка и внедрение надстроек, а также увеличивается их безопасность и эффективность.<ref name="LongRoad" /> В ближайшее время планируется запуск [[Lightning Network]].<ref name="SWBen" /> Разрабатывается решение для увеличения гибкости смарт-контрактов [[Merklized Abstract Syntax Tree]] (MAST), которое также улучшает масштабируемость и повышает конфиденциальность.<ref name=MAST>{{Cite web |url=https://www.coindesk.com/inside-mast-little-known-plan-advance-bitcoin-smart-contracts/ |title=Inside MAST: The Little-Known Plan to Advance Bitcoin Smart Contracts |access-date=2017-12-22 |archive-date=2017-12-23 |archive-url=https://web.archive.org/web/20171223043151/https://www.coindesk.com/inside-mast-little-known-plan-advance-bitcoin-smart-contracts/ |deadlink=no }}</ref>


== Примечания ==
== Примечания ==
Строка 76: Строка 75:
* [https://bitcoincore.org/en/2016/01/26/segwit-benefits/ Segregated Witness Benefits]
* [https://bitcoincore.org/en/2016/01/26/segwit-benefits/ Segregated Witness Benefits]
* [https://bitcointechtalk.com/transaction-malleability-explained-b7e240236fc7 Transaction Malleability Explained]
* [https://bitcointechtalk.com/transaction-malleability-explained-b7e240236fc7 Transaction Malleability Explained]
* [https://segwit.org/understanding-segregated-witness-905cc712c692 Understanding Segregated Witness]
* [https://segwit.org/understanding-segregated-witness-905cc712c692 Understanding Segregated Witness]{{Недоступная ссылка|date=August 2021 |bot=InternetArchiveBot }}
* [https://blockgeeks.com/guides/what-is-segwit/ So what is Segwit?]
* [https://blockgeeks.com/guides/what-is-segwit/ So what is Segwit?]
* [https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/ The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality]
* [https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/ The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality]

Текущая версия от 15:10, 19 августа 2024

Логотип Segregated Witness, разработанный Альбертом Дроссом

Segregated Witness (сокращенно SegWit) — реализованное обновление протокола, призванное решить проблему пластичности транзакций блокчейна Биткойн, а также увеличить её пропускную способность. Аналогичное обновление реализовано и для некоторых других криптовалют, таких как Litecoin, DigiByte, Groestlcoin и Vertcoin.[1]

SegWit является «мягким форком» и позволяет сети функционировать в прежнем режиме. Однако изменяется структура хранения данных в блоке и механизм проверки транзакций для полноценных узлов сети. Теперь подписи и сценарии выделяются в обособленную структуру, именуемую отдельным свидетелем (англ. segregated witness). Это позволяет основному блоку вместить больше транзакций, а также исключает вариативность идентификатора одной и той же транзакции.[1]

Проблема масштабируемости

[править | править код]
Ежемесячное количество транзакций в сети Биткойн

В 2010 Сатоси Накамото ввёл ограничение на размер блока в 1 мегабайт. Ограничение позволило улучшить совместимость узлов сети, а также снизить эффективность DDoS-атак, но снизило максимальную пропускную способность сети до 3-7 транзакций в секунду. Последнее в дальнейшем оказало негативное влияние на способность сети к масштабированию. С ростом пользовательской базы и количества переводов стали расти и задержки — некоторые транзакции ожидали очереди несколько дней. Это также привело к росту комиссий за переводы, что резко снизило привлекательность Биткойна для мелких платежей.[2]

Предлагалось увеличить размер блока, что было реализовано в таких форках Биткойна, как Bitcoin XT, Bitcoin Classic, Bitcoin Unlimited, Lightning Bitcoin и самом успешном Bitcoin Cash.[3][4]

Пластичность транзакции

[править | править код]

Ещё одной острой проблемой сети Биткойн являлась так называемая пластичность транзакции. Обычная структура транзакции Биткойна содержит криптографическую подпись, которая позволяет другим участникам сети проверить, действительно ли владелец биткойнов собрался их так потратить. Подпись рассчитывается на основе закрытого ключа для каждой транзакции, что исключает изменение данных самой транзакции. Идентификатором транзакции является её хэш, который вычисляется на основе всего тела транзакции. Малейшее изменение в транзакции изменяет её идентификатор.[5] На самом деле, можно изменить транзакцию, оставив её действительной (например, добавив необязательные служебные константы в подпись, которые существенно не изменяют сценарий).[6] При этом изменится её идентификатор, а значит модифицированная транзакция будет считаться совершенно новой и более того, сможет пройти верификацию у других узлов сети.[5]

Любой узел сети может модифицировать транзакцию и транслировать её остальным. Если модифицированная транзакция будет включена в блок основной ветки раньше оригинальной или в дальнейшем окажется в более длинной ветке, то исходная транзакция будет отвергнута, так как будет ссылаться на использованный выход (так же будут отвергнуты и ссылающиеся на неё).[7] Это создает множество проблем, так как некоторые системы проверяли факт проведения платежа по идентификатору. Также это усложняет реализацию технологий более высокого уровня, которые основываются на блокчейне Биткойна.[5]

Разработчики и раньше пытались решить эту проблему, но она так и не была полностью устранена до обновления SegWit.[8][9]

Предполагается, что с помощью пластичности транзакции было «незаконно» выведено 64 564 BTC из популярной в своё время площадки MtGox[10]. Сеть Bitcoin Cash подверглась масштабной атаке на пластичность транзакций вскоре после «хард-форка».[11]

Атака «дней рождения»

[править | править код]

Мультиподписные адреса Биткойна используют P2SH и защищены с помощью HASH160 (хэш SHA-256 внутри RIPEMD-160[12]). Если злоумышленник владеет хотя бы 1 ключом из мультиподписного списка, то с учётом коллизии хэша он может снизить количество вариантов перебора до 280, что уже осуществимо для современных вычислительных систем[13].

Для решения обеих вышеупомянутых проблем было предложено обновление Segregated Witness. Суть заключается в вынесении подписей транзакций в одноименную структуру вне основной части, что значительно уменьшает последнюю, так как размер подписи составлял более 50 % от размера всей транзакции. Также это решает проблему пластичности транзакций, ведь подписи больше не влияют на хэш-идентификатор.[1][14]

Но теперь, чтобы проверить все транзакции, узлу нужно загружать расширенный блок (основной блок + отделенный свидетель). О готовности принять расширенный блок узел специально сообщает соседям. Остальные узлы принимают стандартные блоки в 1МБ, считая что транзакции не нуждаются в подписи. Блок подписей связывается с основной цепочкой с помощью дерева Меркла, расположенного в заголовке блока. От всех подписей так же как и от всех транзакций считаются хэши и заносятся в дерево. Суммарный хэш подписей присоединяется к хэшу первой транзакции (coinbase-транзакции) в дереве Меркла транзакций.[1][14]

Расширенный блок теоретически ограничен 4 мегабайтами, но фактически максимальный размер блока составляет чуть менее 2 МБ.[15]

В SegWit для защиты MultiSig-кошельков вместо P2SH используется P2WSH, защищенный SHA256. Это усложняет атаку «дней рождения» до 2128.[13]

Segregated Witness был предложен Питером Вюлле (Pieter Wuille) в конце 2015 года. Выпуск состоялся в октябре 2016 года — на 6 месяцев раньше запланированного срока. Активация должна была произойти после преодоления 95%-го порога участников, сигнализирующих о поддержке обновления. Но некоторые участники сети заявили, что поддержат обновление, только если в него будет добавлено увеличение размера основного блока (китайские пулы могли заблокировать введение SegWit.).[1] 23 мая 2017 года майнеры и разработчики подписали Нью-Йоркское соглашение[16], предполагавшее увеличение размера основного блока до 2 МБ в течение 6 месяцев (это обновление назвали SegWit2x). SegWit был активирован 24 августа 2017 года.[1]

Некоторые альткойны тоже решили реализовать SegWit. Так как многие альткойны основаны на коде Биткойна, это не составило для разработчиков особых трудностей. Первым из них активировал обновление Groestlcoin в январе 2017 года.[1]

Преимущества

[править | править код]
  • Совместим с предыдущими версиями ПО.[1]
  • Увеличивает количество транзакций в блоке.[13]
  • Снижает комиссионные сборы.[13]
  • За счёт количества транзакций в блоке общие сборы майнеров могут увеличиться.[13]
  • Уменьшает время ожидания в очереди.[13]
  • Способствует масштабируемости Биткойна.[1]
  • Устраняет пластичность транзакций.[13]
  • Облегчает разработку и увеличивает эффективность и безопасность дополнительных надстроек (смарт-контракты, Lightning Network и т. д.).[13]
  • Устраняет проблему квадратичного роста времени проверки транзакций.[13]
  • Повышает надежность MultiSig-кошельков.[13]

Недостатки

[править | править код]
  • Увеличивает использование ресурсов узла сети.[17]
  • Несколько усложняется проверка транзакций.[17]
  • В то же время сборы майнеров могут сократится из-за введения надстроек.[17]
  • Некоторые участники считают SegWit лишь временной мерой и настаивают на увеличении размера основного блока.[1]
  • Дополнительная цепочка тоже требует обслуживания, в чём майнеры не особо заинтересованы. В сети Биткойн нет вознаграждения за проверку транзакций (в отличие от Dash). Майнеров сдерживает только высокая вероятность майнинга ошибочных блоков при высокой концентрации облегчённых клиентов (SPV-нод).[18]

Дальнейшее развитие

[править | править код]

8 ноября 2017 года «хард-форк» SegWit2x был отложен на неопределённое время из-за отсутствия консенсуса.[19]

Благодаря обновлению SegWit существенно облегчается разработка и внедрение надстроек, а также увеличивается их безопасность и эффективность.[1] В ближайшее время планируется запуск Lightning Network.[13] Разрабатывается решение для увеличения гибкости смарт-контрактов Merklized Abstract Syntax Tree (MAST), которое также улучшает масштабируемость и повышает конфиденциальность.[20]

Примечания

[править | править код]
  1. 1 2 3 4 5 6 7 8 9 10 11 The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality. Дата обращения: 14 декабря 2017. Архивировано 14 декабря 2017 года.
  2. Satoshi’s Best Kept Secret: Why is There a 1 MB Limit to Bitcoin Block Size. Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
  3. A Controversial Bitcoin Alternative is Seeking a Comeback. Дата обращения: 24 декабря 2017. Архивировано 1 декабря 2017 года.
  4. Differences Between Bitcoin Cash and Bitcoin. Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
  5. 1 2 3 Transaction Malleability Explained
  6. Bitcoin Transaction Malleability Theory in Practice. Дата обращения: 14 декабря 2017. Архивировано 14 декабря 2017 года.
  7. Bitcoin Developer Guide. Дата обращения: 25 декабря 2017. Архивировано 28 декабря 2017 года.
  8. The Who, What, Why and How of the Ongoing Transaction Malleability Attack. Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
  9. Bitcoin Core version 0.10.0 released. Дата обращения: 24 декабря 2017. Архивировано 24 ноября 2017 года.
  10. Study: Mt. Gox May Have Lost Just 386 BTC Due to Transaction Malleability. Дата обращения: 23 декабря 2017. Архивировано 23 декабря 2017 года.
  11. Bitcoin Cash network under attack (недоступная ссылка)
  12. Script - Bitcoin Wiki. en.bitcoin.it. Дата обращения: 5 февраля 2021. Архивировано 4 февраля 2021 года.
  13. 1 2 3 4 5 6 7 8 9 10 11 Segregated Witness Benefits. Дата обращения: 13 декабря 2017. Архивировано 26 апреля 2018 года.
  14. 1 2 Pieter Wuille: Segregated witness and its impact on scalability @ SF Bitcoin Devs (недоступная ссылка)
  15. Segregated Witness Activates on Bitcoin: This is What to Expect. Дата обращения: 23 декабря 2017. Архивировано 1 декабря 2017 года.
  16. New York Agreement. Дата обращения: 22 декабря 2017. Архивировано 7 августа 2017 года.
  17. 1 2 3 Segregated Witness Costs and Risks. Дата обращения: 24 декабря 2017. Архивировано 21 февраля 2018 года.
  18. SPV mining. Дата обращения: 14 декабря 2017. Архивировано 29 декабря 2017 года.
  19. 2x Called Off: Bitcoin Hard Fork Suspended for Lack of Consensus. Дата обращения: 22 декабря 2017. Архивировано 3 января 2018 года.
  20. Inside MAST: The Little-Known Plan to Advance Bitcoin Smart Contracts. Дата обращения: 22 декабря 2017. Архивировано 23 декабря 2017 года.

Литература

[править | править код]
  • Andreas M. Antonopoulos. Mastering Bitcoin.