SEGWIT

Что такое SegWit Биткоина

Segregated Witness (SegWit) — это реализованный в августе 2017 года софт-форк Биткоина, который сделал его экосистему еще более быстрой и безопасной, а также решил проблему пластичности транзакций. В статье мы расскажем, как Сегвит работает и почему он важен для Биткоина.

Как работает обновление SegWit

Блок блокчейна Bitcoin содержит информацию о некотором количестве транзакций, каждая из которых до внедрения обновления Сегвит выглядела следующим образом:

Структура транзакции сети Биткоин

Выделенное красным — цифровая подпись отправителя и публичный ключ, необходимые для проверки баланса счета отправителя (есть ли нужная сумма) и подтверждения корректности операции. Около 60% веса (кода) транзакции отвечает за эти параметры. Сегвит выносит информацию о цифровой подписи из транзакции и добавляет ее в расширенный блок (Extended block), что на 47% сокращает место в основном блоке и позволяет добавить в него больше транзакций.

Схема транзакции Bitcoin без SegWit (вверху) и с ним (внизу)

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

Проблема transaction malleability

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

Рассмотрим на примере, как это работало. Допустим, Алиса хочет отправить три биткоина Бобу. Она создает транзакцию на адрес Боба и ожидает ее подтверждения.

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

Если транзакция с измененным ID подтвердится и добавится в блок быстрее транзакции Алисы, то транзакция Алисы будет отменена и перезаписана измененной транзакцией. В этом случае Боб получает три биткоина и может сказать Алисе, что он не получил никаких денег. Алиса действительно увидит, что ее транзакция не подтверждена, и отправит ее снова. Таким образом, Боб получает шесть монет вместо трех.

После SegWit этого нельзя сделать, поскольку транзакция, отправленная Бобу, не содержит цифровую подпись, а потому он не может ее изменить.

Предполагается, что именно таким образом в свое время было нелегально выведено около 65000 BTC из популярной MtGox. Кроме того, такой атаке подвергалась сеть Bitcoin Cash сразу после хард-форка.

Leave a comment