Проблема изменяемости транзакций

Проблема изменяемости транзакций (англ. transaction malleability problem) — это уязвимость в блокчейн-системах, которую можно использовать посредством изменения криптографического хеша, например, цифровой подписи, используемой для идентификации транзакции с криптовалютой[1][2]. В 2026 году проблема в значительной степени решена благодаря внедрению SegWit[3] и больше не входит в число приоритетных угроз блокчейн-безопасности по версии OWASP[4].

История и инциденты

Проблема изменяемости транзакций стала известна сообществу биткойна (англ. bitcoin) в 2011 году.

В феврале 2014 года японская биржа биткойнов Mt. Gox объявила, что стала жертвой эксплойта в протоколе биткойна, получившего название «изменяемость транзакций». В то время Mt. Gox была крупнейшей в мире биткойн-биржей и обрабатывала около 70 % всех транзакций в сети биткойн. Хотя компания заявляла о потере биткойнов на сотни миллионов долларов из-за этой ошибки [5], независимые расследования показали, что с помощью данного эксплойта было украдено лишь около 386 биткойнов, а реальной причиной краха стали махинации и халатность руководства[6][7]. После неудачных попыток привлечь инвесторов для покрытия убытков Mt. Gox приостановила вывод средств и закрыла свой веб-сайт[8]. Вскоре компания подала заявление о банкротстве, а генеральный директор Марк Карпелес ушёл в отставку[9].

Вскоре после заявления Mt. Gox администрация Silk Road 2.0 заявила о потере биткойнов на сумму 2,7 млн долларов из-за действий неизвестного хакера, который воспользовался уязвимостью изменяемости транзакций. Однако эксперты заподозрили, что уязвимость была использована как предлог для сокрытия хищения средств самими администраторами (экзит-скама)[10].

В феврале 2014 года атаке также подверглась биржа Bitstamp, однако в этом случае уязвимость применялась не для кражи средств, а для организации DDoS-атаки, что вынудило площадку временно приостановить транзакции[11].

Согласно исследованию 2014 года, опубликованному Кристианом Декером и Роджером Ваттенхофером, до инцидента с Mt. Gox значительных случаев эксплуатации изменяемости транзакций не фиксировалось[12].

Механизм уязвимости

Изменяемость транзакций позволяет изменять уникальный идентификатор (ID) денежной транзакции до её подтверждения[13]. В раннем коде Bitcoin уязвимость была обусловлена несколькими техническими причинами. Во-первых, подпись исключалась из подписываемого хеша: при её создании поле scriptSig временно заменялось на scriptPubKey из предыдущей транзакции, из-за чего подпись не защищала целостность самого поля scriptSig[14][15]. Во-вторых, библиотека OpenSSL, использовавшаяся для проверки подписей, нестрого валидировала DER-кодирование и принимала нестандартные форматы (например, с добавлением лишних нулей)[16][14]. В-третьих, математические свойства алгоритма ECDSA позволяли для любой валидной подписи с параметрами (r, s) вычислить альтернативную валидную подпись (r, -s (mod N))[15]. В legacy-транзакциях возможны несколько форм манипуляций: ECDSA-комплемент (флип S-значения), нестандартное DER-кодирование (добавление лишних байтов) и избыточные операции scriptSig (добавление лишних данных или нестандартных опкодов без влияния на валидацию)[17].

Векторы атак

Злоумышленник может с помощью манипуляций с идентификатором транзакции (TXID) в сети биткойн ввести компьютерную систему в заблуждение, вынудив её ошибочно провести несколько транзакций[18].

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

  • Злоумышленник запрашивает легитимный вывод средств со своего баланса на собственный кошелёк[19].
  • Биржа формирует транзакцию, подписывает её, присваивает ей уникальный идентификатор (TXID) и транслирует в сеть[19].[20]
  • Злоумышленник перехватывает эту транзакцию до её подтверждения майнерами и вносит незначительные технические изменения, которые не нарушают криптографическую подпись, но меняют итоговый хеш (TXID)[21].[20]
  • Изменённая транзакция публикуется в сеть. Если майнеры первыми подтверждают её, перевод успешно завершается, а оригинальная транзакция отбрасывается[19].[21]
  • Автоматизированная система биржи, отслеживающая статус вывода по первоначальному хешу, не находит его в блокчейне и ошибочно считает транзакцию неудачной[19].[20]
  • В результате биржа автоматически возвращает средства на внутренний счёт злоумышленника (или он запрашивает их повторно), позволяя ему получить активы дважды[19].[20]

Подмена TXID также оказывает влияние на SPV-кошельки. Поскольку программное обеспечение таких кошельков отслеживает статус платежей по оригинальному идентификатору, при его изменении в сети возникает рассинхронизация интерфейса. Оригинальная транзакция отображается как неподтверждённая или отклонённая, что приводит к некорректному отображению балансов. Из-за этого пользователи могут ошибочно решить, что платёж не прошёл, и попытаться отправить средства повторно[22].[23]

Современные векторы включают атаки типа Fake Deposit (фиктивный депозит), использующие логические ошибки обработки хешей в пакетных (batch) транзакциях. Злоумышленники формируют пакетные транзакции, в которых крупный перевод намеренно завершается ошибкой, тогда как мелкие операции внутри пакета проходят успешно. Уязвимые системы мониторинга депозитов, опирающиеся только на общий статус транзакции, могут подтвердить зачисление, создавая видимость поступления средств без фактического увеличения баланса[24].[25]

Методы защиты

Основным решением проблемы изменяемости транзакций стало внедрение протокола SegWit, который выносит данные подписей за пределы вычисления идентификатора транзакции (TXID). На 2026 год уровень принятия этой технологии составляет 85—90 %. Прямым развитием данной архитектуры выступают подписи Шнорра (в рамках обновления Taproot). Для повышения безопасности также применяется технология MAST, позволяющая скрывать неиспользуемые скрипты. Устранение уязвимости сделало возможным безопасное функционирование протоколов второго уровня, таких как Lightning Network. В качестве дополнительных мер защиты используются каноническая кодировка подписей (Low-S) и строгая валидация данных транзакций.

Примечания

  1. Andrychowicz, Marcin. On the Malleability of Bitcoin Transactions // Financial Cryptography and Data Security : [англ.] / Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski … [et al.]. — Berlin, Heidelberg : Springer, 2015. — Vol. 8976. — P. 1–18. — ISBN 978-3-662-48051-9. — doi:10.1007/978-3-662-48051-9_1.
  2. Rajput, Ubaidullah; Abbas, Fizza; Hussain, Rasheed; Eun, Hasoo; Oh, Heekuck (2015). “A Simple Yet Efficient Approach to Combat Transaction Malleability in Bitcoin”. Information Security Applications [англ.]. Cham: Springer International Publishing. 8909: 27—37. DOI:10.1007/978-3-319-15087-1_3. ISBN 978-3-319-15086-4.
  3. What is SegWit? D-Central. Дата обращения: 27 августа 2026.
  4. OWASP Smart Contract Security Top 10. OWASP Foundation. Дата обращения: 27 августа 2026.
  5. Rajput, Ubaidullah. A Simple Yet Efficient Approach to Combat Transaction Malleability in Bitcoin // Information Security Applications : [англ.] / Ubaidullah Rajput, Fizza Abbas, Rasheed Hussain … [et al.]. — Cham : Springer International Publishing, 2015. — Vol. 8909. — P. 27–37. — ISBN 978-3-319-15087-1. — doi:10.1007/978-3-319-15087-1_3.
  6. Applications' 'malleability' attacks not to blame for Mt. Gox's missing bitcoins, study says. Network World. Дата обращения: 27 августа 2026.
  7. The missing Mt. Gox bitcoins. The Verge (21 марта 2014). Дата обращения: 27 августа 2026.
  8. How a bug in bitcoin led to MtGox's collapse (англ.). The Guardian (27 февраля 2014). Дата обращения: 27 августа 2026.
  9. McLannahan, Ben Bitcoin exchange Mt Gox files for bankruptcy protection. Financial Times (28 февраля 2014). Дата обращения: 27 августа 2026. Архивировано 27 августа 2025 года.
  10. Silk Road 2.0 Hacked Using Bitcoin Bug; All Its Funds Stolen. Forbes (13 февраля 2014). Дата обращения: 27 августа 2026.
  11. A Study on the Transaction Malleability Problem in Bitcoin. Journal of Information Processing Systems. Дата обращения: 27 августа 2026.
  12. Decker, Christian. Bitcoin Transaction Malleability and MtGox // Computer Security — ESORICS 2014 : [англ.] / Christian Decker, Roger Wattenhofer. — Cham : Springer International Publishing, 2014. — Vol. 8713. — P. 313–326. — ISBN 978-3-319-11212-1. — doi:10.1007/978-3-319-11212-1_18.
  13. SegWit: not just a solution to transaction malleability problem (амер. англ.). Дата обращения: 10 июля 2021. Архивировано 17 мая 2022 года.
  14. 1 2 Transaction Malleability in Bitcoin (PDF). University of Miami Computer Science. Дата обращения: 27 августа 2026.
  15. 1 2 Transaction Malleability. Bitcoin Wiki. Дата обращения: 27 августа 2026.
  16. Transaction Malleability Explained. HackMD. Дата обращения: 27 августа 2026.
  17. Transaction Malleability. Spark Money Glossary. Дата обращения: 27 августа 2026.
  18. Garling, Caleb Bitcoin's transaction malleability rattles system (амер. англ.). SFGATE (15 февраля 2014). Дата обращения: 27 августа 2026. Архивировано 6 марта 2023 года.
  19. 1 2 3 4 5 Bitcoin Transaction Malleability (PDF). University of Miami. Дата обращения: 27 августа 2026.
  20. 1 2 3 4 Transaction Malleability. Bitcoin Wiki. Дата обращения: 27 августа 2026.
  21. 1 2 Transaction Malleability in Bitcoin. ACM Digital Library. Дата обращения: 27 августа 2026.
  22. Transaction Malleability Explained. Leather. Дата обращения: 27 августа 2026.
  23. What is Transaction Malleability? dYdX. Дата обращения: 27 августа 2026.
  24. Bybit detects and blocks coordinated fake deposit attacks. Cryptopolitan. Дата обращения: 27 августа 2026.
  25. Bybit Detects and Blocks Coordinated Fake Deposit Attacks. PR Newswire. Дата обращения: 27 августа 2026.

Категории