среда, 23 июля 2025 г.

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

 

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

В этой статье мы рассмотрим криптографическую атаку подделки цифровой подписи (Digital Signature Forgery Attack), её последствия представляет собой угрозу для безопасности транзакций в сети Биткоин, поскольку цифровые подписи подтверждают право собственности и авторизацию переводов криптовалюты. Рассмотрим на примерах влияние таких атак на Биткоин на основе современных исследований и выявленных уязвимостей.

Криптографическая атака подделки подписи (Digital Signature Forgery Attack) заключается в попытке злоумышленника создать фальшивую цифровую подпись ECDSA, которая будет признана сетью Биткоин действительной. Такая атака позволяет авторизовать транзакции без знания приватного ключа владельца, что ставит под угрозу безопасность денежных средств в криптокошельке держателя монет BTC.

В криптографии цифровая подпись обеспечивает подтверждение подлинности сообщения или транзакции. Подделка подписи означает возможность создания пары «RawTX», которая будет принята системой как валидная, хотя на самом деле она не была создана владельцем приватного ключа. Это открывает путь для мошенничества, кражи средств и нарушения целостности блокчейна. Криптографическая атака подделки цифровой подписи (Digital Signature Forgery Attack) как уязвимости реализованы в программных компонентах, использующих библиотеку xml-crypto для проверки подписей XML-документов на платформе Node.js.



В первую очередь это касается корпоративных интеграционных решений, облачных сервисов и систем единого входа, таких как IBM App Connect Enterprise Certified Container и другие приложения, зависящие от xml-crypto для SAML-аутентификации и авторизации. Аппаратно уязвимости не связаны с конкретными физическими устройствами, а реализуются в программных продуктах, использующих уязвимую библиотеку.

Уязвимости CVE-2025-29774 и CVE-2025-29775, известные как криптографическая атака Digital Signature Forgery Attack, реализованы в программной библиотеке xml-crypto — это библиотека для цифровой подписи и шифрования XML-документов на платформе Node.js


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX
Security Bulletin: IBM App Connect Enterprise Certified Container operands are vulnerable to bypass signature validation in XML data [CVE-2025-29774] [CVE-2025-29775]

  • IBM App Connect Enterprise Certified Container — программное обеспечение для интеграции и обработки данных, использующее xml-crypto для проверки подписей XML-документов. Уязвимости позволяют обходить проверку цифровой подписи, что приводит к возможности подделки и модификации подписанных сообщений, включая SAML-ответы для аутентификации и авторизации.
  • Системы и приложения, использующие Node.js с библиотекой xml-crypto для проверки подписанных XML-сообщений, особенно в контексте SAML-аутентификации (например, корпоративные порталы, системы единого входа, облачные сервисы). Уязвимость позволяет злоумышленнику модифицировать валидные подписанные XML-сообщения так, что они проходят проверку подписи, что ведет к обходу механизмов аутентификации и авторизации, эскалации привилегий и подделке учетных данных.

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX
Disclosure for CVE-2025-29774 and CVE-2025-29775 (SAMLStorm).

  • Уязвимости связаны с неправильной проверкой криптографической подписи в xml-crypto, в частности с обработкой узла DigestValue, куда злоумышленник может вставлять XML-комментарии, не нарушая при этом проверку подписи.
  • Это позволяет изменять критические атрибуты идентификации и контроля доступа в подписанных XML-документах, что приводит к возможности обхода безопасности без необходимости иметь учетные данные или права доступа.

Таким образом, этот код реализует криптографические алгоритмы подписи и проверки подписи для различных схем (RSA с разными SHA-хешами и HMAC-SHA1), что позволяет интегрировать их в системы, требующие цифровой подписи данных.


Критическая уязвимость в коде signature-algorithms.ts

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Код signature-algorithms.ts служит для безопасного создания и проверки цифровых подписей, обеспечивая аутентичность и целостность данных. ECDSA подписи обеспечивают подтверждение авторства с помощью приватного ключа, а HMAC — проверку целостности и аутентичности с использованием секретного ключа. Используемые алгоритмы соответствуют стандартам XML Digital Signature (URI алгоритмов указывают на спецификации W3C).


Таким образом, код signature-algorithms.ts реализует криптографические алгоритмы подписи и проверки подписи для различных схем (ECDSA, RSA с разными SHA-хешами и HMAC-SHA1), что позволяет интегрировать их в системы, требующие цифровой подписи данных.


Основная функциональность

  • Каждый класс реализует интерфейс SignatureAlgorithm и предоставляет методы для:
    • Создания подписи (getSignature): принимает данные для подписи и приватный ключ, возвращает цифровую подпись в формате base64.
    • Проверки подписи (verifySignature): принимает исходные данные, публичный ключ и подпись, возвращает булево значение — корректна ли подпись.
    • Получения имени алгоритма (getAlgorithmName): возвращает URI, идентифицирующий используемый алгоритм подписи.

Поддерживаемые алгоритмы

  • RsaSha1 — подпись с использованием RSA и хеш-функции SHA-1.
  • RsaSha256 — подпись с использованием RSA и SHA-256.
  • RsaSha512 — подпись с использованием RSA и SHA-512.
  • HmacSha1 — подпись с использованием HMAC на базе SHA-1.

Технические детали

  • Для RSA-подписей используется класс crypto.createSign и crypto.createVerify с соответствующими алгоритмами («RSA-SHA1», «RSA-SHA256», «RSA-SHA512»).
  • Для HMAC-подписей используется crypto.createHmac с алгоритмом «SHA1».
  • Подписи кодируются в base64 для удобства передачи и хранения.
  • Методы обернуты в функцию createOptionalCallbackFunction, что, вероятно, позволяет использовать их как с колбэками, так и с промисами (подробности не в коде).

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


Конкретно проблема находится в классе RsaSha1:



Также вторая уязвимость находится в классе RsaSha1:



Почему данная критическая атака на коллизии позволяют создавать разные данные с одинаковым хешем?

  1. Коллизии SHA-1: Алгоритм SHA-1 больше не считается безопасным.
  2. Контекст RSA: В сочетании с RSA это может привести к подделке подписей для непроверенных данных (например, сертификатов или документов).
  3. Рекомендации: NIST и сообщество безопасности рекомендуют использовать SHA-256/SHA-512 вместо SHA-1.

Дополнительные замечания:

  • Класс HmacSha1 (HMAC-SHA1) менее уязвим, но тоже устарел. HMAC более устойчив к коллизиям, чем «голый» SHA-1, но переход на SHA-256 предпочтителен.
  • В коде есть современные реализации (RsaSha256/RsaSha512), которые следует использовать вместо RsaSha1.

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

CVE-2025-29774 и CVE-2025-29775 — это критические уязвимости в библиотеке xml-crypto для Node.js, связанные с некорректной проверкой цифровых подписей в XML-документах. Обе уязвимости позволяют злоумышленнику модифицировать подписанные XML-сообщения так, чтобы изменения оставались незамеченными при проверке подписи.


Механизм Digital Signature Forgery Attack

1. Уязвимости в алгоритмах RSA-SHA1

В предоставленном коде классы RsaSha1 используют устаревший алгоритм RSA-SHA1 для подписи и верификации:

const signer = crypto.createSign("RSA-SHA1");  // Уязвимая строка №7
const verifier = crypto.createVerify("RSA-SHA1"); // Уязвимая строка №17

SHA1 считается криптографически ненадежным, основная проблема заключается в логике обработки XML-структур библиотекой:

  • При создании подписи XML-документ проходит этап каноникализации (приведение к стандартной форме, например, удаление пробелов и комментариев).
  • При верификации подписи библиотека не учитывает различия между каноникализованными и неканоникализованными версиями документа . Это позволяет злоумышленнику модифицировать документ (например, добавить комментарии или изменить структуру), не нарушая подпись.

2. Пример эксплуатации

  1. Модификация SignedInfo:
    • Атакующий добавляет в XML-документ дополнительные узлы <SignedInfo>, что приводит к неверному вычислению хеша при верификации.
    xml<Signature> <SignedInfo>...</SignedInfo> <!-- Оригинальный узел --> <SignedInfo>...</SignedInfo> <!-- Добавленный злоумышленником --> </Signature>
  2. Использование слабого алгоритма:
    • Алгоритм SHA1 уязвим к коллизиям, что упрощает создание поддельных подписей для модифицированных документов .

3. Последствия

  • Обход аутентификации: Изменение атрибутов в SAML-токенах или других XML-документах, связанных с доступом .
  • Эскалация привилегий: Подмена идентификатора пользователя на администратора в системе авторизации .
  • Массовые атаки: Уязвимость может эксплуатироваться удаленно без взаимодействия с пользователем (CVSS 9.3).

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX


Технические детали уязвимостей:

CVE-2025-29774

  • Проблема: Недостаточная проверка структуры XML-документа при верификации подписи.
  • Эксплуатация: Добавление лишних узлов или атрибутов в подписанную часть документа.

CVE-2025-29775

  • Проблема: Некорректное использование контекста каноникализации при вычислении хеша.
  • Эксплуатация: Модификация документа в неканоникализованной форме после подписания.

Рекомендации по устранению

  1. Обновление библиотеки:
    • Для версий 2.x → 2.1.6, 3.x → 3.2.1, 6.x → 6.0.1.
  2. Замена алгоритмов: typescript// Использование SHA-256 вместо SHA-1 const signer = crypto.createSign("RSA-SHA256");
  3. Валидация структуры XML:
    • Проверка наличия ровно одного узла <SignedInfo> в подписи.

Устранение этих уязвимостей критически важно для систем, использующих XML-подписи в аутентификации (например, SAML, SOAP).


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Библиотека xml-crypto, широко используется для проверки цифровых подписей в XML-сообщениях, включая такие протоколы как SAML, SOAP и другие. Из этого следует, что уязвимость потенциально затрагивает:

  • Программное обеспечение и сервисы, использующие xml-crypto для XML-подписей, в том числе корпоративные интеграционные платформы и middleware (например, IBM App Connect Enterprise, где зафиксированы эти уязвимости).
  • Устройства и системы, которые применяют XML-подписи для аутентификации и авторизации, включая серверы и шлюзы, поддерживающие SAML.


  • Уязвимости CVE-2025-29774 и CVE-2025-29775 в первую очередь касаются программных компонентов и платформ, использующих библиотеку xml-crypto для обработки XML-подписей.
  • Среди известных пострадавших — IBM App Connect Enterprise и, вероятно, другие корпоративные решения на базе Node.js с использованием xml-crypto.
  • На данный момент нет публичных данных о конкретных брендах аппаратных устройств, подверженных этим атакам.

Для оценки риска на конкретных устройствах рекомендуется проверить, используют ли они уязвимые версии xml-crypto или зависят от аналогичных механизмов XML-подписей. Для работы с криптовалютными кошельками на базе Node.js IBM предлагает отдельные решения, например, IBM Secure Bitcoin Wallet — приложение, основанное на Electrum Bitcoin Client, которое использует Node.js для взаимодействия с сетью Биткоина и управления кошельком.

В этом решении приватные ключи и кошелек могут храниться и шифроваться с помощью IBM Cloud Hyper Protect Crypto Services (zHSM), обеспечивающего аппаратное безопасное хранение ключей. Генерация приватных ключей для Bitcoin-кошельков обычно реализуется в специализированных криптографических библиотеках, таких как Electrum, bitcoinjs-lib и т.п., которые могут быть интегрированы в Node.js-приложения. IBM Secure Bitcoin Wallet использует модифицированный Electrum backend на Node.js для управления ключами и транзакциями, за счет интеграции с IBM Cloud Hyper Protect Crypto Services, предоставляющим аппаратное шифрование и безопасное хранение приватных ключей.


Практическая часть

Из теории уязвимость CVE-2025-29775 известно, что злоумышленник может обработать не обновленую библиотеку xml-crypto для некорректных значении транзакции. Перейдем к практической части статьи и рассмотрим пример с использованием Биткоин кошелька: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , где были потерянный монеты на сумму: 0.059672 BTC на июль 2025 года эта сумма составляет: 7,052 USD



Рассмотрим формат: Raw transaction бинарные и hex-данные, которые содержат всю информацию о транзакции. Она нужна для передачи, проверки или создания операций на низком уровне и представляет собой основу работы всей Биткоин-сети. Обычные пользователи редко сталкиваются с Raw transaction напрямую, но для разработчиков и крипто-энтузиастов это главный инструмент для полного контроля над всеми транзакциями Биткоин-сети.



Для полного возвращение объектов UTXO в сети Биткоин воспользуемся инструментом Dark AI. UTXO является основной частью структуры данных в цепочке блокчейна и отражает количество монет BTC криптовалюты, которое может быть потрачено держателем приватного ключа (контролирующим данный Биткоин адрес). Каждый UTXO — это выход конкретной прошлой транзакции, который еще ни разу не был использован в качестве входа в последующих транзакциях.



Google Colab

Private key Debug: Некорректная генерация приватных ключей, системные уязвимости и ошибки в вычислении порядка эллиптической кривой secp256k1 угрозы для экосистемы Bitcoin

https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW


1. Загрузка и установка инструмента Dark AI

Подробное описание всех команд и действий терминала

Команды:

  • wget — утилита командной строки для загрузки файлов из сети по протоколам HTTP, HTTPS и FTP.
  • Загружаем neuralnet_tools.zip архив с указаннием URL.
  • unzip — команда для извлечения ZIP-архивов в текущем каталоге.

Эта команда извлекает все файлы из neuralnet_tools.zip


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Запустим команду ls для быстрого и удобного просмотра


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX


2. Запуск инструмента Dark AI

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX


Выполним команду, чтобы получить информацию о так называемых непотраченных выходах транзакций (UTXO, расшифровка: Unspent Transaction Output) для указанного биткоин-адреса. Эта информация важна для оценки баланса адреса и возможности проведения новых транзакций.


В результате были возвращены два объекта UTXO:

Каждый UTXO содержит:

  • output — идентификатор выхода. Формат: <txid>:<n>, где <txid> — уникальный хэш транзакции, а <n> — номер выхода в списке выходов данной транзакции.
  • value — сумма в сатоши (1 биткоин = 100 000 000 сатоши).

Расшифровка данных:

  1. Первый UTXO
    • Выход: 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0
    • Сумма: 677 200 сатоши
  2. Второй UTXO
    • Выход: bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0
    • Сумма: 5 000 000 сатоши

Общий баланс

Суммарный доступный баланс адреса равен сумме всех найденных UTXO:

  • 677 200 + 5 000 000 = 5 677 200 сатоши
  • В пересчёте на биткоины: 5 677 200/100 000 000 = 0.05677200 BTC
Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Техническая интерпретация с помощью Dark AI

Воспользуемся процессом интерпретации, чтобы обработать не обновленую библиотеку xml-crypto для создание некорректных значении транзакции и отправим крупную сумму, алгоритм Dark AI сам выберет, какой UTXO использовать (или объединит оба).

  • Отправка средств: Все указанные UTXO могут быть использованы в качестве входов при формировании новой транзакции, что позволит потратить весь баланс или его часть.
  • Прозрачность: Такой отчёт подтверждает наличие реальных биткоин-средств на адресе и может быть использован для проверки подлинности и платежеспособности.

На биткоин-адресе 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe имеется два активных UTXO на общую сумму 0.05677200 BTC. Эти средства можно использовать для совершения новых транзакций; оба выхода считаются подтверждёнными и не потраченными.


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Десериализация Биткоин транзакции

Чтобы получить фрагменты информации о выходе (output) Биткоин транзакции применим следующие команды, где первый выход (outs) из транзакции с уникальным идентификатором 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd



Получаем структуру ответа результата десериализации:

{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}
  • value: 677200 — сумма данного выхода выражена в сатоши (1 BTC = 100 000 000 сатоши).
  • script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — скрипт, определяющий условия траты данного выхода.

Подробное объяснение элементов: Поле value

  • Значение: 677 200 сатоши.
  • Данную сумму можно будет потратить при создании соответствующей транзакции, если будут выполнены условия скрипта.
  • Эквивалент: 677 200/100 000 000 = 0.00677200 BTC.
Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Подробное объяснение элементов: Поле script

  • Значение скрипта: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287
  • Это скрипт типа «scriptPubKey» — часть выходной структуры транзакции, задающая, кто может потратить эти средства. Важнейшее предназначение — обеспечение безопасности и контроля над распоряжением средствами.

Декодирование скрипта

  • Скрипт начинается с префикса a914...87, что соответствует формату P2SH (Pay to Script Hash):
    • a9 — OP_HASH160 (оператор хеширования)
    • 14 — длина следующего значения (20 байт = 40 символов hex)
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — сам hash160 Биткоин Адреса кошелька, где хранятся монеты BTC.
    • 87 — OP_EQUAL (базовый оператор команды Bitcoin Script, реализуюет сравнение двух данных для проверки их идентичности)
  • Это означает, что средства получатель может потратить, если предоставит скрипт, хеш которого соответствует приведённому значению, и предъявит валидные подписи для этого скрипта.

Практическая значимость результата

  • Данный вывод указанной транзакции содержит 677 200 сатоши (0.00677200 BTC), которые защищены скриптом типа P2SH.
  • Для расходования средств с такого выхода понадобится знать оригинальный скрипт и предъявить корректные подписи — типичная ситуация для кошельков с мультиподписями, смарт-контрактов и других продвинутых схем безопасности.
  • Эта информация важна для анализа структуры транзакции, проверки назначения средств и понимания требований для их последующего использования.

Десериализации транзакции по идентификатору

В результате десериализации транзакции по идентификатору 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd был получен первый выход, содержащий сумму 677 200 сатоши (0.00677200 BTC), защищённый P2SH-скриптом. Для распоряжения этими средствами потребуется представить скрипт назначения и корректно подписать разблокирующую транзакцию, соответствующую условиям указанного хэша.


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Десериализация второй Биткоин транзакции

Чтобы получить фрагменты информации о выходе исходных данных (output) Биткоин транзакции применим следующие команды, где первый выход (outs) из транзакции с уникальным идентификатором bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786


Воспользуемся процессом интерпретации, с помощью Dark AI при помощи функции десериализации, далее мы получаем информацию о структуре первого выходного элемента (output) для второй транзакции с идентификатором
bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.



Результат:


1. Подробное объяснение элементов: Поле value

  • Содержимое: 5000000
  • Это значение указывается в сатоши (satoshi) — минимальной неделимой единице биткоина; 1 BTC = 100,000,000 сатоши.
  • Назначение:
    Эта сумма ассоциирована с конкретным выходом транзакции, указанным в элементах массива 'outs'. Ее можно потратить, только если будут выполнены условия, записанные в скрипте, определённом в поле 'script'.
  • Перевод в биткоины: 5 000 000 сатоши = 0.05 BTC
Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

2. Подробное объяснение элементов: Поле script

  • Содержимое: 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
  • Это так называемый locking script или, иначе, scriptPubKey — скрипт, который указывает условия, при которых данный выход может быть потрачен.

Декодирование скрипта

Указанное значение соответствует стандартному типу скрипта в сети биткоин:

  • a9 — код операции OP_HASH160 (производит RIPEMD-160 от SHA-256 от следующей строки).
  • 14 — длина последующего поля: 20 байт (40 шестнадцатеричных символов).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — это непосредственно 20-байтовый хэш, который идентифицирует либо адрес биткоин-кошелька, либо скрипт.
  • 87 — код операции OP_EQUAL.

В совокупности такая запись означает P2SH-адрес (Pay-to-Script-Hash, «оплата по хэшу скрипта»). В этом случае средства закрепляются за некой скрипт-комбинацией, а для их изъятия нужно будет раскрыть скрипт, хэш которого здесь зафиксирован, и предъявить подписи (или иные данные), удовлетворяющие условиям этого скрипта.


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


3. Практический смысл результата, величина и назначение средств.

  1. В указанной транзакции (с хэшем bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786) есть выход, в котором 0.05 BTC (5 000 000 сатоши) «заблокированы» на P2SH-адресе, соответствующем хэшу 06612b7cb2027e80ec340f9e02ffe4a9a59ba762
  2. Условия расходования:
    Чтобы потратить эти средства, необходимо при формировании расходующей транзакции предъявить не только стандартную подпись, как при прямом переводе, но и сам скрипт, хэш которого зашит в этом выходе, плюс данные (например, набор цифровых подписей), соответствующие условиям скрипта.
  3. Безопасность и гибкость:
    Такой способ позволяет реализовывать более сложные логические схемы, чем прямое отправление на обычный Биткоин адрес.

4. Оформление выхода в уровень совместимости с различными сервисами и кошельками, поддерживающими P2SH.

  • Транзакция с идентификатором
    bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
    содержит выход, в котором
    0.05 BTC (5 000 000 сатоши)
    закреплены на P2SH-скрипте (Pay-to-Script-Hash) с хэшем
    06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
  • Для траты этих средств необходимо раскрыть исходный скрипт и выполнить его условия (например, предъявить все подписи в мультиподписи).

Таким образом, результат десериализации сообщает о наличии определённой суммы биткоинов на условном (P2SH) адресе и определяет строгие правила их расходования, что играет ключевую роль для управления и учёта средств в сети Bitcoin.


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

P2SH (Pay-to-Script-Hash) locking script в сети Биткоин. Что означает этот скрипт?

Скрипт 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287' выбран и использован в данном выходе транзакции, потому что он представляет собой типичный P2SH (Pay-to-Script-Hash) locking script в сети Биткоин.


Рассмотрим его по частям:

  • a9 — OP_HASH160: операция хеширования, которая применяет сначала SHA-256, а затем RIPEMD-160 к последующим данным.
  • 14 — длина хеша — 20 байт (в 16-ричном формате).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — 20-байтовый хеш скрипта, известный как script hash.
  • 87 — OP_EQUAL: оператор, проверяющий равенство двух значений на стеке.

Таким образом, этот скрипт требует, чтобы в момент использования (тратты средств) был представлен скрипт, хеш которого совпадает с 06612b7cb2027e80ec340f9e02ffe4a9a59ba762, и чтобы выполнялись условия этого скрипта.


Почему выбран именно такой?

  • Удобство и безопасность: P2SH позволяет сложную логику управления средствами (например, мультиподписи или условные платежи) скрыть в виде хеша, упрощая интерфейс для отправителя и получателя.
  • Стандарт индустрии: P2SH стал общепринятым стандартом, так как он упрощает настройку сложных схем защиты и совместим с большинством кошельков и сервисов.
  • Компактность: В блоке хранится только хеш сложного скрипта, а не весь скрипт — это экономит место и повышает эффективность.
  • Гибкость: Владелец средств может создавать произвольные условия расходования — например, требовать несколько подписей, временные задержки или другие правила — и хеш этих условий хранится именно здесь.

Скрипт 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287' — это P2SH locking script, который говорит, что для тратты 0.05 BTC необходимо предоставить оригинальный скрипт с хешем 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 и выполнить прописанные в нем условия. Это обеспечивает баланс между удобством, безопасностью и функциональностью — основную причину выбора именно такого скрипта в данной транзакции. Хэш 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 в P2SH-скрипте — это результат конкретного хеширования исходного сценария (redeem script), который определяет условия траты средств с этого выхода.


Почему именно этот хэш, а не другой?

  1. Хэш — цифровой отпечаток сценария, задающего правила траты.
    При создании P2SH-адреса или выхода скрипт (условия расходования Bitcoin) сначала составляется в явном виде, затем применяются два алгоритма хеширования:
    • SHA-256 от скрипта,
    • Затем RIPEMD-160 от результата SHA-256.
      Итоговый 20-байтовый хэш и есть 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Этот хэш однозначно идентифицирует именно тот сценарий, для которого он был сгенерирован.
  2. Уникальность и неизменность
    Криптографические хеш-функции обладают свойством «лавинного эффекта», при котором даже минимальное изменение исходного скрипта даст совершенно другой хэш. Поэтому данный хэш уникален и неподдельен в контексте исходного скрипта.
  3. Цель использования хэша — обеспечение компактности и безопасности
    Вместо хранения в каждом выходе полного сценария, который может быть сложным и занимать много места, в блоке хранится только его хэш. Это экономит место и повышает конфиденциальность — сам сценарий раскрывается только при трате средств и только тем, кто выполняет условия.
  4. Выбор хэша ― результат конкретного скрипта, определенного создателем адреса или кошелька
    Разработчик или владелец средств создаёт скрипт с нужными условиями (например, мультиподпись, временная задержка, другие логические условия). Назначенный скрипт хешируется и именно этот хэш привязывается к выходу транзакции. Таким образом, нет произвольного выбора хэша — он определяется содержимым исходного скрипта и криптографическим алгоритмом.

  • Данный хэш строго связан с конкретным скриптом, который владелец адреса заложил для защиты своих средств.
  • Он был получен с помощью криптографических хеш-функций (SHA-256 + RIPEMD-160) от исходного redeem script, поэтому случайно или произвольно выбрать другой хэш нельзя.
  • Этот хэш — отражение уникальной комбинации условий траты, и именно поэтому именно он и оказался в скрипте выхода транзакции a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287

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


Механизма P2SH: значение, принцип работы и безопасность в сети Bitcoin

Разработчики Биткоин прописали в код механизм P2SH (Pay-to-Script-Hash) как ключевую инновацию, обеспечивающих безопасность и расширяющих возможности сети блокчейн. Рассмотрим структуру и принцип работы данного скрипта, его отличие от классических транзакций, а также причины выбора именно такого подхода для хранения и защиты цифровых активов.

Традиционно в Bitcoin транзакции работали по схеме Pay-to-Pubkey-Hash (P2PKH) — где «блокировка» средств происходит с помощью хеша публичного ключа адресата. Для расходования этих средств пользователь должен предоставить свою цифровую подпись и публичный ключ, которые проверяются сетью.

Однако за рамками P2PKH интерфейс был ограничен, так как в Bitcoin Script можно создавать гораздо более сложные условия траты — от мультиподписей до временных замков и других смарт-контрактных соглашений. Проблема состояла в том, что длинные и сложные скрипты неизбежно увеличивали размер транзакций и снижали их удобство.


Именно для упрощения взаимодействия с такими сложными сценариями в 2012 году была введена концепция P2SH, стандартизированная в BIP 16 Гэвином Андресеном. Суть P2SH сводится к замене в scriptPubKey полного скрипта условий траты на его криптографический хэш — так называемый script hash.


Как работает структура выходного скрипта P2SH?

Рассмотрим указанный в результате десериализации скрипт:

OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUAL

Этот скрипт отличается от стандартного P2PKH тем, что вместо хэша публичного ключа в нем хранится хэш скрипта погашения (redeemScript) — набора условий, под которыми средства могут быть потрачены.

  • OP_HASH160 — хеширует данные (в данном случае redeemScript) сначала алгоритмом SHA-256, а затем RIPEMD-160.
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — 20-байтовый хэш redeemScript.
  • OP_EQUAL — проверяет, равен ли предоставленный redeemScript этому хэшу.

Процесс тратты средств по P2SH-выходу

Чтобы потратить такие средства, необходимо в входах (scriptSig) транзакции, ссылающейся на этот выход, передать:

  1. Сериализованный redeemScript — исходный скрипт, условия которого закодированы в хэше.
  2. Данные разблокировки — подписи или другие доказательства, которые удовлетворяют условиям redeemScript.

При обработке транзакции узлы сети:

  • Хешируют redeemScript и сверяют с указанным в output хэшем.
  • Если хэши совпадают (то есть OP_EQUAL возвращает true), то redeemScript десериализуется и выполняется.
  • Транзакция признаётся действительной, если redeemScript выполняется корректно, т.е. все условия траты выполняются.

Таким образом, P2SH переносит ответственность за представление и проверку условий траты с отправителя (который создает требуемый скрипт) на того, кто тратит средства.


Преимущества и значение выбора такого механизма

1. Гибкость и сложные сценарии

P2SH позволяет создавать адреса с произвольными, часто многоуровневыми условиями — например, требование мультиподписей (2 из 3, 3 из 5 и т.д.), временные ограничения, логику распределения и многое другое. При этом отправитель просто отправляет средства на компактный хэш адрес, не вдаваясь в технические детали.


2. Экономия места

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


3. Повышение безопасности

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


4. Удобство для пользователей и программистов

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


Пример применения: мультиподписные кошельки

Классический пример — кошелек, который требует подписи двух из пяти участников для проведения транзакции. С помощью P2SH:

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

Это делает P2SH идеальным инструментом для корпоративных счетов, совместных хозяйств и других случаев, где требуется контроль доступа. Механизм Pay-to-Script-Hash (P2SH) является фундаментальной частью архитектуры Bitcoin, обеспечивая баланс между:

  • Безопасностью (защита средств с помощью строгих условий и криптографии),
  • Эффективностью (хранение только хеша, а не всех деталей),
  • Гибкостью (поддержка любых, даже сложных условий траты),
  • Удобством (простой формат адреса и стандарт доступа).


Криптоанализ извлечения первого входа транзакции (ins)

Запустим команду с целью получение информации об одном из входов (input) транзакции с хэшем 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. Анализ такого входа важен для понимания механизма авторизации расхода средств на уровне скриптов.


Результат извлечения первого входа транзакции (ins) представлен в следующем виде:


1. Подробный разбор компонентов ScriptSig (script)

  • Значение поля script — это scriptSig, который используется для разблокировки соответствующего предыдущего выхода транзакции.
  • Содержимое представляет собой длинную последовательность байтов в шестнадцатеричном формате.
  • В данном случае это пятикомпонентный скрипт, включающий в себя:
    • Стандартные цифровые подписи (signature) согласно протоколу ECDSA, как правило, для подтверждения владения приватным ключом.
    • Публичные ключи, необходимые для проверки подписи.
    • Возможно, присутствует структура, указывающая на мультиподписные операции (несколько публичных ключей и подписей).

Анализ структуры скрипта:

  • Начинается с 00, что в контексте scriptSig может означать OP_0, традиционно используемый в мультиподписных сценариях (например, в случае стандарта Pay-to-Script-Hash с мультиподписью, где необходима заглушка).
  • Далее следуют подписи в формате DER (например, 3045...), обычно они состоят из серии байтов с деталями подписи.
  • За подписями следуют публичные ключи (по длине и структуре — скорее всего в сжатом формате, т.к. около 33 байт), которые подтверждают принадлежность подписей к корректным владельцам.
  • В целом, формат скрипта соответствует redeemScript или конструкция, характерная для P2SH мультиподписных транзакций.

2. Outpoint (outpoint)

  • Содержит данные о предыдущем выходе, который используется в данном входе:
    • 'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577' — это хэш предыдущей транзакции.
    • 'index': 1 — указывает на второй выход (нумерация с нуля), который используется для разблокирования.
  • Таким образом, вход ссылается на конкретный выход предыдущей транзакции, доказывая, что автор транзакции имеет право его потратить.

3. Sequence (sequence)

  • Значение 4294967295 (0xFFFFFFFF) является максимальным 32-битовым числом.
  • В Bitcoin это поле послужит для обозначения, что вход не участвует в механизме Replace-By-Fee (RBF) или не имеет времени/блокировки по Relative Timelock.
  • Часто используется по умолчанию для неподвижных входов.

Важность scriptSig в контексте безопасности

  • ScriptSig представляет собой данные для разблокирования средств, которые защищены locking script предыдущего выхода.
  • В случае P2SH транзакций (часто для мультиподписи) scriptSig содержит:
    • Подписи участников, подтверждающих право расхода средств.
    • Оригинальный redeemScript, хеш которого указан в locking script предыдущего выхода.
  • Успешная проверка scriptSig гарантирует, что автор транзакции действительно обладает необходимыми полномочиями на распоряжение средствами.

Криптоанализ извлечения первого входа транзакции (ins) с указанным хэшем транзакции показал, что:


  • Вход первой транзакции содержит сложный скрипт разблокировки, включающий цифровые подписи и публичные ключи.
  • Используется ссылка на конкретный выход другой транзакции ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.
  • Максимальное значение sequence говорит об отсутствии специальных блокировок или RBF.
  • Предположительно, речь идёт о P2SH-мультиподписной транзакции, где, для подтверждения траты средств, требуется несколько подписей.

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


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Подробный разбор результата извлечении второго выхода (outs)

Запустим команду, чтобы была получена информация об одном из выходов (output) транзакции с идентификатором ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.

Конкретно был извлечён второй выход (outs) этой транзакции, элемент с индексом 1.


Полученный результат:


1. Детальный анализ полученных данных значение поля value

  • Величина: 350,000 сатоши.
  • Данный объём средств находится во втором выходе указанной транзакции и может быть потрачен при выполнении условий, указанных в соответствующем скрипте.
  • Перевод в BTC: 350,000 сатоши = 0.0035 BTC
Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

2. Значение поля script

  • Характеристика:
    Скрипт a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 является классическим locking script (scriptPubKey) формата P2SH (Pay-to-Script-Hash).
  • Расшифровка скрипта:
    • a9 — OP_HASH160 — оператор, который применяет сначала SHA-256, а затем RIPEMD-160 к входным данным.
    • 14 — длина (20 байт) следующего значения — это размер хэша.
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — 20-байтовый хэш, он же script hash — уникальное представление redeem script, который контролирует расход этих средств.
    • 87 — OP_EQUAL — оператор, который сравнивает два значения и возвращает true, если они равны.

Таким образом, скрипт требует, чтобы для разблокировки (траты средств) пользователь предъявил redeem script, хэш которого совпадает с этим значением.


Значение и роль redeem script в контексте P2SH

  • Redeem script — это оригинальный скрипт, задающий условия траты средств, например, мультиподпись, сложный сценарий с ограничением по времени и т.п.
  • В выходах транзакции хранится только хэш от redeem script, что экономит место и защищает детали условий.
  • Для использования средств, вложенных в данный выход, при создании новой транзакции пользователь должен предоставить в scriptSig сериализованный redeem script, который корректно декодируется и проверяется сетью.

Общее значение результата

  • Идентификатор транзакции ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 связан с выходом, который содержит 0.0035 BTC.
  • Эти средства привязаны к P2SH-адресу, контролируемому скриптом с хэшем 06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
  • Для того чтобы израсходовать эти средства, необходимо предъявить redeem script, соответствующий этому хэшу, и выполнить условия, заложенные в нём.

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Значение полученной информации в более широком контексте

  • Этот результат позволяет подтвердить, что средства действительно находятся на выходе с условиями Pay-to-Script-Hash.
  • Понимание структуры таких выходов важно для анализа безопасности, разработки сложных сценариев распределения средств и проверки условий расходования.
  • Использование P2SH обеспечивает надёжный и эффективный механизм управления средствами в сети Bitcoin, позволяющий создавать умные контракты и защищённые кошельки.

Полученная информация подтверждает, что во второй выходной записи транзакции ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 хранится сумма 0.0035 BTC, контролируемая стандартным P2SH-скриптом с hash160 значением 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Для распоряжения этими средствами необходимо предъявить соответствующий redeem script, что обеспечивает высокий уровень безопасности и гибкости в управлении биткоинами.


Подтвердим расшифровку scriptSig:


Запустим команду для получение HASH160 разработчики Биткоина установили стандарт для 20-байтовый хэш (hex) который без изменение широко используется в других популярных криптовалютах таких как Bitcoin (BTC), Ethereum (ETH), Tether (USDT), BNB (BNB), Solana (SOL), XRP (XRP), Cardano (ADA), Dogecoin (DOGE), USDC (USDC), Polkadot (DOT), Avalanche (AVAX), Shiba Inu (SHIB), Stellar (XLM), TRON (TRX), Chainlink (LINK), Litecoin (LTC), Bitcoin Cash (BCH), Monero (XMR) для обозначения сокращенного идентификатора скриптов и публичных ключей.


Запустим команду:

Процесс обработки:

  1. Исходная строка, представленная в шестнадцатеричном формате, преобразуется в последовательность байтов (декодируется из hex в двоичный формат). Данная последовательность представляет собой сериализованный скрипт (redeem script) или схожую структуру биткоин-скрипта.
  2. К полученным байтам применяется алгоритм хеширования SHA-256 (однократный хэш), результат которого далее обрабатывается криптографической функцией RIPEMD-160.
  3. Итоговый хэш RIPEMD-160 от SHA-256 бинарных данных получается в виде строки:

Этот 20-байтовый хэш (hex) называется HASH160 и широко используется в Bitcoin для обозначения сокращенного идентификатора скриптов и публичных ключей.


Значение и контекст результата

  • Процесс хеширования RIPEMD-160(SHA-256(data)), известный как HASH160, является стандартом для создания адресов и скриптов в Bitcoin, включая P2SH (Pay-to-Script-Hash). HASH160 обеспечивает уникальный и компактный идентификатор, позволяющий экономить место в блокчейне.
  • Применение двойного хэширования (SHA-256, затем RIPEMD-160) сочетается в себе сильные криптографические свойства обеих функций: стойкость к коллизиям, односторонность и устойчивость к атакам.
  • Полученный хэш соответствует скрипт-хэшу (script hash) redeem script — то есть тому скрипту, который контролирует доступ к средствам, заблокированным по адресу P2SH.
  • В частности, этот HASH160 фигурирует в locking script (scriptPubKey) выходов конкретных транзакций, что требует при тратах предоставить сам исходный redeem script с таким же хэшом и корректные подписи.

Технические подробности и пояснения

  • В Bitсoin существует концепция двойного хэширования SHA-256 и RIPEMD-160 для защиты адресов и скриптов.
  • Использование HASH160 вместо простой 256-битной выдачи SHA-256 уменьшает длину хэша с 32 байт до 20 байт, что уменьшает размер хранилища и данных в сети.
  • HASH160 применяется при формировании преимущественно P2SH-адресов и legacy P2PKH-адресов.

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

Полученный хэш:

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


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Почему Satoshi выбрал двойное SHA-256, и как это влияет на криптографическую стойкость

Сатоши Накамото выбрал использование двойного хеширования SHA-256 (то есть применение SHA-256 дважды подряд) в алгоритмах хеширования Bitcoin по нескольким важным причинам, которые усиливают криптографическую стойкость и безопасность сети.

Причины выбора двойного SHA-256

  1. Повышение стойкости к различным атакам
    Однократное применение SHA-256 уже обладает высокой криптографической стойкостью, устойчиво к коллизиям и предобразам. Однако двойное применение хеш-функции — сначала SHA-256 к исходным данным, затем SHA-256 к результату — дополнительно усложняет анализ и атаки на хэш.
    Это снижает вероятность успешного подбора коллизии или обратного восстановления исходных данных, делает более трудоемким подбор различных вариантов и защищает от слабостей возможных в конкретных реализациях алгоритма.
  2. Защита от проблем с длиной входных данных
    Двойной SHA-256 обеспечивает дополнительный уровень превентивной безопасности с учётом поведения внутреннего построения хеша и обработки дополняющих битов в разметке данных. Это минимизирует потенциальные атаки, связанные с форматированием данных.
  3. Следование проверенной криптографической практике
    В ряде криптографических протоколов двойное хеширование — признанный приём повышения устойчивости. Например, для контрольных сумм и цифровых подписей используется двойное шифрование или двойное хеширование. Это повышает надёжность цепочки защиты.
  4. Проверенная безопасность и широкая поддержка
    SHA-256 входит в семейство SHA-2, разработанное Агентством национальной безопасности США (NSA) и опубликованное Национальным институтом стандартов и технологий (NIST). Этот алгоритм на сегодняшний день считается одним из самых надёжных и его двойное применение обеспечивает максимальную безопасность.

Как это влияет на криптографическую стойкость

  • Устойчивость к столкновениям и предобразам
    Каждый из этапов SHA-256 обладает высокой стойкостью к коллизиям — крайне сложно найти два входа с одинаковым хешем. Двойное хеширование усиливает эту гарантию, поскольку атакующий должен найти коллизию для двух последовательных SHA-256, что значительно повышает вычислительную сложность.
  • Односторонняя функция с лавинным эффектом
    Двойное применение усиливает «лавинный эффект», при котором малейшее изменение входных данных вызывает радикальное изменение выходного хеша, что затрудняет выявление закономерностей и обратный анализ.
  • Повышенная стойкость к криптоанализу
    Двойной SHA-256 защищает от потенциальных слабостей в реализации или неожиданных уязвимостей, которые могли бы быть обнаружены в одной итерации, минимизируя риски атак с помощью квантовых или классических вычислительных средств.
  • Применимость в Proof-of-Work и безопасности блокчейна
    Механизм PoW в Bitcoin опирается на вычисление хэшей блоков, которые должны удовлетворять определённой сложности. Двойное хеширование создаёт дополнительный барьер для подделки блоков, повышая надёжность и доверие к цепочке блоков5.

Двойное применение SHA-256 — это осознанный выбор Сатоши Накамото, направленный на обеспечение дополнительного уровня защиты и устойчивой криптографической стойкости всей системы Bitcoin. Такая конструкция минимизирует риски коллизий, усиливает односторонность и надёжно защищает данные в блокчейн-сети, создавая прочный фундамент для безопасности транзакций и консенсуса в системе. Таким образом, двойной SHA-256 — это ключевой элемент архитектуры Bitcoin, сочетающий передовые криптографические методы с распределённой системы.


Мультиподпись в Bitcoin: роль redeemScript и инструкция OP_CHECKMULTISIG

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

Что такое redeemScript?

В контексте Bitcoin, redeemScript — это скрипт, содержащий условия траты средств, которые хранятся на выходе транзакции в формате Pay-to-Script-Hash (P2SH). Вместо хранения полного скрипта в блокчейне, в выходе сохраняется хэш redeemScript, что позволяет экономить место и скрывать детали условий до момента траты.


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


Как работает OP_CHECKMULTISIG?

Рассмотрим инструкцию OP_CHECKMULTISIG: назначение и работа, где главный элемент в redeemScript, реализующий проверку мультиподписи, — OP_CHECKMULTISIG.

  • Инструкция получает на вход две группы данных из стека:
    • N открытых ключей (например, три публичных ключа)
    • M подписей (например, две подписи), где M ≤ N — это необходимый порог подписей для подтверждения транзакции.
  • Для валидации транзакции OP_CHECKMULTISIG проверяет, что каждая из M подписей корректно подписана каким-либо из N публичных ключей.
  • Если все подписи валидны и соответствуют ключам из redeemScript, инструкция возвращает true, позволяя траты средств.

Особенности и баг с удалением элемента из стека

Из-за исторической ошибки в реализации OP_CHECKMULTISIG при выполнении из стека удаляется один дополнительный элемент, неиспользуемое значение. Чтобы избежать проблем, в scriptSig используется специальный элемент OP_FALSE (значение 0) в начале, который компенсирует этот баг и предотвращает потенциальные уязвимости.


  • Далее мы рассмотрим реализацию OP_CHECKMULTISIG при котром из стека удаляется один дополнительный элемент с помощью этого бага злоумышленник компенсирует OP_CHECKMULTISIG как потенциальную уязвимость.
  • Таким образом, структура scriptSig для мультиподписи выглядит примерно как: OP_FALSE <signature1> <signature2> ... <redeemScript> где первый элемент скрипта — фиктивный OP_FALSE.

Практический пример: мультиподпись 2 из 3

Исходя из кода redeemScript:

  • Здесь объявлено 3 публичных ключа.
  • Порог — 2 подписи из этих трёх необходимы для успешного подтверждения.
  • Операция OP_CHECKMULTISIG проверяет, что две предоставленные подписи (в scriptSig) соотносятся с двумя ключами из трёх и являются валидными.
  • OP_FALSE в scriptSig компенсирует баг удаления лишнего значения.

Значение и преимущества мультиподписных кошельков

  • Повышенная безопасность. Владелец кошелька может распределить контроль над средствами между несколькими лицами или устройствами, исключая возможность одиночного несанкционированного расходования.
  • Гибкость. Могут быть реализованы различные схемы, например, «2 из 3», «3 из 5», с различными условиями.
  • Юридическая эффективность. Мультиподписи часто используются в корпоративной среде для обеспечения совместного управления активами.

Технический и практический контекст

  • Мультиподписные сценарии широко применяются в P2SH- и SegWit-транзакциях.
  • Инструкция OP_CHECKMULTISIG входит в набор самых ресурсоёмких операций в блокчейне, так как требует проверки нескольких подписей. На уровне протокола существует ограничение по количеству сигнальных операций (sigops) на блок.
  • Несмотря на историю с OP_FALSE, механизм доказал свою надежность и получил широкое применение.

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


Как работает механизм проверки мультиподписей в Bitcoin с помощью OP_CHECKMULTISIG и redeemScript

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

Основы механизма мультиподписей

Мультиподпись — это система, в которой для совершения транзакции требуется несколько действительных подписей из заданного набора публичных ключей. Типичная схема обозначается как m из n — например, «2 из 3», где из трёх ключей нужны любые две подписи для авторизации траты.

В Bitcoin эта логика реализована через:

  • redeemScript — скрипт, описывающий условия траты средств. Он содержит список публичных ключей и параметр порога (m).
  • scriptSig — скрипт разблокировки, включающий подписи, необходимые для подтверждения, и сам redeemScript.

Как устроен redeemScript

Инструкция OP_CHECKMULTISIG проверяет, что предоставленные в scriptSig подписи валидны и соотносятся с опубликованными публичными ключами из redeemScript.

RedeemScript структурирован примерно так:

  • OP_M и OP_N — инструкции, задающие число необходимых подписей и общее количество публичных ключей соответственно (к примеру, OP_2 и OP_3).
  • <pubkeyX> — публичные ключи участников.
  • OP_CHECKMULTISIG — оператор, реализующий проверку мультиподписей.

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

Важной технической особенностью является историческая ошибка реализации OP_CHECKMULTISIG, из-за которой из стека удаляется лишний, неиспользуемый элемент. Для компенсации этого бага в scriptSig в начале помещается значение OP_FALSE (код 0), чтобы «заблокировать» сдвиг стека.


Как устроена структура scriptSig

Для кошелька с мультиподписью «2 из 3» перед трата средств формируется scriptSig в виде:

  • OP_FALSE — фиктивное значение для компенсации бага OP_CHECKMULTISIG.
  • <signature1> и <signature2> — две цифровые подписи, авторизованные владельцами соответствующих приватных ключей.
  • <redeemScript> — сам скрипт с публичными ключами и параметрами проверки.

Во время проверки транзакции нода:

  1. Извлекает redeemScript из scriptSig.
  2. Хеширует его и сравнивает с хешем, который хранится в locking script (scriptPubKey) предыдущего выхода (P2SH-формат — OP_HASH160 <redeemScript hash> OP_EQUAL).
  3. Если хеши совпадают, десериализует redeemScript.
  4. Выполняет оператор OP_CHECKMULTISIG, сравнивая подписи и ключи на предмет соответствия.
  5. Возвращает true, если проверки пройдены успешно.

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


Механизма мультиподписи через redeemScript и OP_CHECKMULTISIG

  • Повышенная безопасность: Чтобы провести транзакцию, необходимо согласие нескольких держателей приватных ключей, что снижает риски кражи при компрометации одного ключа.
  • Гибкость и масштабируемость: Можно задать произвольный порог подписей (от 1 до 15), а также список участников — от 2 до 15 публичных ключей.
  • Коллективное управление активами: Подходит для корпоративных счетов, совместных кошельков, DAO, позволяя внедрять надежный контроль доступа.
  • Прозрачность и проверяемость: Все необходимые данные и условия находятся в блокчейне, а проверка операций происходит автоматически, децентрализованно и прозрачно.

Механизм проверки мультиподписей в Bitcoin при помощи команды OP_CHECKMULTISIG и redeemScript позволяет устанавливать сложные пороговые схемы подписей, с помощью выполнение оператора этого бага злоумышленник компенсирует OP_CHECKMULTISIG как потенциальную уязвимость контролируемой транзакций в распределённой сети Биткоин.


Какие особенности и ограничения есть у OP_CHECKMULTISIG при проверке нескольких подписей. Рассмотрим ключевые аспекты и ограничения:

  1. Пороговое подтверждение подписей
    OP_CHECKMULTISIG позволяет указать число необходимых подписей T из общего числа публичных ключей N (схема «T из N»). Например, 2 из 3. Для действительности транзакции достаточно иметь T валидных подписей.
  2. Верификация нескольких подписей за одну операцию
    В отличие от одиночной проверки подписи (OP_CHECKSIG), OP_CHECKMULTISIG проверяет сразу несколько подписей, соотнося их с соответствующими публичными ключами, что повышает эффективность и удобство реализации мультиподписных кошельков.
  3. Использование redeemScript для условия траты
    В формате P2SH мультиподписная схема скрыта под хешем redeemScript — полного скрипта с публичными ключами и параметрами. Для траты средства пользователь обязан представить redeemScript и соответствующие подписи.
  4. Исторический баг — лишний элемент в стеке
    Особенность OP_CHECKMULTISIG — при выполнении из стека удаляется лишний, неиспользуемый элемент (признак «off-by-one» ошибки реализации). Для компенсации в scriptSig добавляется фиктивный элемент OP_FALSE в начале, чтобы корректно выровнять стек. Это признанная и усвоенная сообществом особенность.

Ограничения OP_CHECKMULTISIG

  1. Максимальное количество ключей и подписей
    В Bitcoin действует ограничение — максимум 15 публичных ключей и соответственно 15 подписей в redeemScript. Это связано с ограничением на размер скрипта (~520 байт) и количеством операций, разрешённых для проверки за блок (ограничение sigops).
  2. Увеличенный размер транзакций и комиссия
    Мультиподписные транзакции объемнее из-за большого количества публичных ключей, подписей и дополнительных данных redeemScript. Это увеличивает размер самой транзакции и, как следствие, комиссию за её обработку.
  3. Ограничения на размер скрипта
    Максимальный размер каждого скрипта (input или output) ограничен 520 байтами. При большом количестве ключей redeemScript становится громоздким, что влияет на удобство и эффективность использования мультиподписи.
  4. Скрытие условий трат только при использовании P2SH
    Если не использовать P2SH, корректный скрипт с публичными ключами и OP_CHECKMULTISIG хранится открыто в выходах транзакции, что раскрывает публичные ключи заранее, снижая приватность.
  5. Отсутствие нативной поддержки сложных логик
    Bitcoin Script не полнотен и ограничен по возможностям, нет циклов и рекурсии, из-за чего сложные политические или контрактные условия мультиподписей реализуются ограниченно.

Типы подписей в Bitcoin: особенности и роль SIGHASH флагов

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

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


Основные три типа SIGHASH

1. SIGHASH_ALL (0x01)

Это тип подписи по умолчанию в большинстве кошельков и клиентов. Подпись охватывает все входы и все выходы транзакции, что значит:

  • Подписывающий подтверждает именно эту комбинацию источников и адресатов.
  • Любое изменение входов или выходов после подписания делает подпись недействительной.
  • Обеспечивает максимальный уровень безопасности и предсказуемости транзакции.

2. SIGHASH_NONE (0x02)

При этом типе подписи подписываются все входы, но ни один из выходов не подписывается:

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

3. SIGHASH_SINGLE (0x03)

Этот тип подписи подписывает все входы, но только один выход — с тем же порядковым номером, что и вход:

  • То есть подпись ограничена парой «вход N — выход N».
  • Позволяет подписанту контролировать конкретную пару вход-выход, игнорируя остальные.
  • Помогает создавать частичные или условные распоряжения средствами.
  • Однако возможна проблема, если выход с индексом входа отсутствует — в таком случае возвращается хэш со значением единицы (что является известным багом, описанным ниже).

Пример из реальной транзакции

Рассмотрим транзакцию с тремя входами, где из скриптов подписей (scriptSig) двух из них были извлечены подписи, оканчивающиеся байтом 0x03, указывающим на SIGHASH_SINGLE — то есть подписи, которые подписывают только пару соответствующих входов и выходов. Однако здесь наблюдается ситуация: вход с индексом 2 не имеет соответствующего выхода с таким же индексом.


Digital Signature Forgery Attack предотвращения криптоинцидентов и повышения уровня кибербезопасности криптовалютных платформ применяются различные методы оценки уязвимостей

791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf


Digital Signature Forgery Attack предотвращения криптоинцидентов и повышения уровня кибербезопасности криптовалютных платформ применяются различные методы оценки уязвимостей

Raw Transaction


Что происходит при отсутствии выхода под индексом входа?

Из-за исторического бага Bitcoin в таких ситуациях хэш транзакции для подписи возвращается фиксированное число — единица (int 1). Это не соответствует валидному хэшу подписываемой транзакции и может создавать проблемы с безопасностью и совместимостью.

Дополнительные флаги и модификаторы

Помимо трёх основных SIGHASH значений, возможны их комбинации с флагом SIGHASH_ANYONECANPAY, который позволяет подписывать только один вход, оставляя другие открытыми для модификаций. Это расширяет возможности создания сложных совместных протоколов и многосторонних транзакций, где разные участники подписывают только свои части.


Практическое значение и применение

  • SIGHASH_ALL обеспечивает максимально полное подтверждение транзации и используется в стандартных кошельках.
  • SIGHASH_NONE и SIGHASH_SINGLE позволяют создавать более гибкие и частичные подписания, применяемые в сложных сценариях: мультиподписи, смарт-контракты, доверительные операции.
  • Понимание этих типов критично для разработчиков и аналитиков, создающих нестандартные транзакции или исследующих ошибки/уязвимости.

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


Как различия между SIGHASH_ALL, NONE и SINGLE влияют на безопасность транзакций в Bitcoin?

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


1. SIGHASH_ALL — максимальная безопасность

  • Описание: Подписание охватывает все входы и все выходы транзакции.
  • Влияние на безопасность:
    • Гарантирует, что ни один вход или выход не может быть изменён после подписания.
    • Исключает возможность подмены адресата или суммы выплаты.
    • Подписант уверенно контролирует конечный результат транзакции.
  • Риски: Высокая жёсткость — если нужно изменить хоть что-то (например, добавить выход или увеличить комиссию), требуется подпись заново.

2. SIGHASH_NONE — открытые выходы, закрытые входы

  • Описание: Подписываются все входы, а все выходы остаются без подписи.
  • Влияние на безопасность:
    • Входы подписи защищены, но выходы могут быть изменены кем угодно после подписания.
    • Возможность злоупотребления: злоумышленник может изменить адреса и суммы перевода после подписи.
  • Применение: Редко используется, преимущественно в протоколах с доверенным сотрудничеством и кооперативных сценариях.
  • Риски: Если злоумышленник получит доступ к подписям, может направить средства на свои адреса без согласия подписанта.

3. SIGHASH_SINGLE — подпись соответствующего входа и выхода

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

Итоговое влияние

Тип SIGHASHЧто подписываетсяУровень безопасностиВозможные рискиПрименение
SIGHASH_ALLВсе входы и выходы транзакцииМаксимальный — полное отсутствие измененийТребовательность к изменению (нужно переподписывать транзакцию)Стандарт для большинства платежей
SIGHASH_NONEВсе входы, никаких выходовСредний — выходы не защищеныПодмена выходов, потеря контроля над адресатамиКооперативные сценарии, мультиподпись
SIGHASH_SINGLEВсе входы, выход с индексом, соответствующим входуНизкий — защитится только один выходБаг при отсутствии соответствующего выхода, частичная подменаЧастичные оплаты, сложные сценарии

Выбор типа SIGHASH напрямую влияет на степень доверия к транзакции в криптовалютной сети Биткоин:

  • SIGHASH_ALL обеспечивает наивысший уровень безопасности, благодаря чему его используют повсеместно для большинства транзакций.
  • SIGHASH_NONE и SIGHASH_SINGLE дают возможности для гибкости и частичной подписи, что может быть полезно в определённых случаях, но одновременно увеличивает риски подмены и злоупотребления.
  • Понимание этих различий критично при проектировании мультиподписных схем, сложных протоколов и смарт-контрактов Bitcoin, где баланс между гибкостью и безопасностью должен быть чётко выверен.

Как неправильное использование SIGHASH_ALL может привести к уязвимостям в транзакциях

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


  1. Signature Malleability (изменчивость подписи):
    Хотя SIGHASH_ALL подразумевает, что все входы и выходы транзакции подписаны, за счет особенностей алгоритма ECDSA возможна ситуация, когда одна и та же транзакция может иметь несколько различных, но при этом валидных подписей. Это связано с тем, что компонента подписи s может принимать эквивалентные значения. Злоумышленник может модифицировать подпись, не изменяя содержимого транзакции, что приводит к тому, что идентификатор транзакции (txid) меняется. В результате это усложняет отслеживание транзакций, создает трудности в реплей-атаке, а также может быть использовано для мошенничества или двойного расходования.
  2. Ошибки при десериализации подписей (DeserializeSignature):
    Если функция проверки подписи (включая SIGHASH_ALL) не обрабатывает корректно структуру подписи, например, не проверяет корректность значений r и s (должны находиться в допустимых диапазонах и не быть нулевыми), это позволяет злоумышленникам создавать недействительные, но системой принимаемые подписи. Через такие поддельные подписи возможна авторизация несанкционированных транзакций, кража средств, двойное расходование и искажение данных в блокчейне.
  3. Недостаточная валидация параметров подписи:
    Некорректная или неполная проверка подписи с флагом SIGHASH_ALL, например, игнорирование или неверная обработка завершающего байта, может приводить к тому, что транзакции с некорректным покрытием подписываемых элементов (входов и выходов) будут проходить валидацию. Это открывает двери для атак, в которых злоумышленник манипулирует частями транзакции, отключая защиту или расширяя свои права.
  4. Атаки типа Replay и трансакционная коллизия:
    Из-за возможности изменения подписи без изменения содержимого транзакции (см. Signature Malleability), одна транзакция может быть использована повторно или создана коллизия, что создает риск двойных расходов или финансовых потерь.

Таким образом, неправильное использование SIGHASH_ALL или ошибки в реализации его проверки значительно подрывают безопасность Bitcoin-сети, позволяя злоумышленникам манипулировать подписями и транзакциями. Для борьбы с этими уязвимостями внедряются строгие проверки формата и диапазонов подписей, используются улучшенные протоколы (например, SegWit устраняет часть проблем с изменчивостью подписей), а также стандартизируются безопасные методы подписания и валидации транзакций.


Некорректная подпись с типом SIGHASH_ALL увеличивает риск двойных расходов в Bitcoin по следующим причинам:

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


Такая изменчивость подписи (Signature Malleability) позволяет злоумышленникам создавать альтернативные версии транзакции с другим идентификатором (txid), что затрудняет отслеживание и подтверждение оплат, а в некоторых случаях ведёт к повторному использованию тех же входов — т.е. к двойным расходам.


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

Таким образом, чтобы снизить риски двойных расходов, критически важно правильно генерировать и валидировать подписи с SIGHASH_ALL, применять методы защиты от signature malleability (например, SegWit), а также обновлять программное обеспечение и соблюдать рекомендации по безопасности. Это обеспечивает закрепление подписи на всей структуре транзакции, гарантирует её неизменность и устойчивость к злоупотреблениям.


Получим информацию о публичных ключах, связанных с Биткоин-адресом 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe. Далее представлен подробный и содержательный разбор полученных данных.


Полученные публичные ключи:

В результате работы команды был извлечён список из трёх публичных ключей в сжатом формате (compressed public key), представленных в шестнадцатеричном виде:


  • Публичные ключи: Каждый из элементов — это публичный ключ пользователя в формате compressed public key длиной 33 байта. Сжатые ключи обычно начинаются с префикса 02 или 03, указывая на знак координаты точки (Y) на эллиптической кривой, и за ним следует 32 байта X-координаты.
  • Связь с адресом: Адрес Bitcoin — это хэш от скрипта или публичного ключа. В данном случае адрес 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe соответствует некоторому P2SH (Pay-to-Script-Hash) или мультиподписному адресу, для которого характерно хранение сразу нескольких публичных ключей в redeemScript. Список публичных ключей соответствует набору, заложенному в этом сафе.

Набор из нескольких публичных ключей — классическая ситуация для мультиподписного кошелька (multisig wallet). В таком случае чтобы потратить средства потребуется несколько подписей от соответствующих приватных ключей:


  • Данный список публичных ключей позволяет определить, какие ключи имеют право подписывать транзакции с этим адресом.
  • Обычно мультиподпись формируется по схеме M-of-N, например, 2 из 3, где N — общее количество ключей, а M — минимальное число необходимых подписей для расходования.

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

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Сжатые публичные ключи

  • Принцип сжатия позволяет уменьшить длину публичного ключа с 65 байт (не сжатый формат) до 33 байт, что экономит место в транзакциях и блоках.
  • Сжатый ключ содержит информацию о X-координате точки на эллиптической кривой и знак Y-координаты.

Применение в redeemScript

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


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


Для более глубокого анализа и понимания параметров можно дополнительно изучить:

  • Конкретный формат redeemScript, с которым связан этот набор приватных и публичных ключей.
  • Политику подписей (сколько подписей из этих трёх требуется).
  • Историю транзакций, связанных с этим адресом.

Публичные ключи 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe

Публичный ключ 023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f0561196 является одним из элементов, используемых в мультиподписном кошельке BitPay Copay, который был целью атаки, связанной с уязвимостью в обработке типа подписи SIGHASH_SINGLE

Этот публичный ключ, вместе с двумя другими (03d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b80 и 03ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df), входит в состав redeemScript кошелька Copay, который является кошельком с мультиподписью «2 из 3«. Для траты средств с такого адреса необходимо предоставить две действительные подписи и сам redeemScript.

RedeemScript, который содержит эти три публичных ключа, при декодировании даёт следующие инструкции: 2 <pubkey1> <pubkey2> <pubkey3> 3 OP_CHECKMULTISIG. Это означает, что для проверки мультиподписи требуется две подписи из трёх возможных ключей. OP_CHECKMULTISIG проверяет каждую пару подписи и публичного ключа на достоверность, чтобы все подписи соответствовали одному из публичных ключей. Инструкция OP_FALSE в scriptSig требуется из-за известной ошибки, при которой OP_CHECKMULTISIG удаляет лишнее неиспользуемое значение из стека.


Кошелек Copay, разработанный BitPay, подвергся атаке, подробности которой были раскрыты компанией Coinspect. Эта атака эксплуатировала особенности типа подписи SIGHASH_SINGLE, который подписывает только соответствующий вход и выход (выход с тем же порядковым номером, что и вход). Если выход с таким индексом не существует, в качестве хэша транзакции будет возвращено целочисленное значение «один», что является известным багом, где OP_CHECKMULTISIG проводит проверку подлинности двух подписей из трёх публичных ключей.


Этот мультиподписной набор оказался в центре внимания из-за уязвимости, выявленной компанией Coinspect. Уязвимость связана с особенностями использования в транзакциях типа подписи SIGHASH_SINGLE (0x03), при котором подпись охватывает все входы и ровно один выход транзакции с индексом, совпадающим с индексом входа. Важно отметить если выход с таким индексом отсутствует (а в некоторых случаях их меньше, чем входов), из-за бага Bitcoin хэш для подписи возвращается в виде целого числа «1». Это позволяет создавать транзакции, расходующие выходы без знания приватных ключей, что открывает дверь для кражи средств из мультиподписного кошелька.


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX
Мультиподписный кошелек BitPay Copay был целью атаки, иллюстрирующий важность подделки цифровой подписи Digital Signature Forgery Attack

Таким образом, публичный ключ 03d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b80 является ключевым компонентом уязвимого мультиподписного кошелька Copay, участие которого в составном redeemScript дает определённые преимущества с точки зрения безопасности, но вместе с тем стал объектом экспериментов и атак, иллюстрирующих важность корректной обработки всех типов подписей в Bitcoin.


Важная роль redeemScript и мультиподписи

Публичный ключ 03d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b80 является частью redeemScript, который задаёт условия траты средств с определённого выхода транзакции и имеет следующий общий формат:

Где этот ключ занимает одно из мест <pubkeyN>. Инструкция OP_CHECKMULTISIG проверяет, что предоставленные при расходовании средства подписи корректны и соответствуют хотя бы двум из трёх публичных ключей.


Данный публичный ключ, вместе с двумя другими, определяет список авторизованных владельцев для совместного управления средствами в мультиподписном кошельке Copay, в котором была продемонстрирована известная уязвимость, связанная с неправильной обработкой типа подписи SIGHASH_SINGLE. Уязвимость позволяет злоумышленникам создавать транзакции с неверным хэшированием, что обусловлено ошибкой в протоколе Bitcoin при отсутствии соответствующего выхода для входа с определённым индексом. Это привело к возможным атакам на кошельки, включая Copay.


Публичный ключ 03ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df — это ключевой элемент безопасности и гибкости мультиподписного кошелька Copay. Он служит для совместного контроля над средствами и требует совместного подтверждения транзакций вместе с другими ключами из набора. В то же время рассматриваемая уязвимость стала важным примером необходимости строгой проверки и обновления механизмов подписи в криптовалютных системах.


Выполним команду в котором получим обработанные две цифровые подписи в формате DER, ассоциированные с указанным Биткоин-адресом:


В итоге мы извлекаем результат:


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Расшифровка цифровых подписей

В переменной sigs хранятся две расшифрованные подписи, полученные через функцию der_decode_sig из их DER-кодированной формы:

  1. Первая подпись:
  1. Вторая подпись:

Формат DER (Distinguished Encoding Rules) — стандартный способ кодирования структур для ECDSA-подписей в Bitcoin, который гарантирует уникальное и корректное представление параметров подписи r и s.


Используемый хэш для проверки

Для проверки подписи был использован хэш:

Это 32-байтовая последовательность, где первый байт равен 0x01, а остальные — нули. В контексте Bitcoin такой хэш служит примером или тестовым значением, сопоставляемым с оригинальным хэшем транзакции для верификации ключей.


Проверка подлинности подписей

Верификация производилась функцией ecdsa_raw_verify(hash, signature, public_key), которая проверяет, соответствует ли цифровая подпись указанному хэшу и публичному ключу.

В представленном примере:

  • Первая подпись валидна для первого публичного ключа (pubs), подтверждается возвращённым значением True.
  • Вторая подпись валидна для второго публичного ключа (pubs[1]), также подтверждается True.

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


Уязвимость как значение в контексте результата

  • Возможность ошибок и уязвимостей: Важно удостовериться, что подписи сформированы корректно — в частности, соблюдается правило низкого значения s (low s value), которое предотвращает проблемы с изменчивостью подписи (signature malleability) и обеспечивает консенсус в сети (см. BIP 62).
  • Гарантия владения: Успешная проверка цифровой подписи доказывает владение соответствующим приватным ключом — только его владелец может создать валидную подпись. Это основа безопасности Bitcoin, препятствующая несанкционированному расходованию средств.
  • DER и стандарты: Использование DER-кодировки и явное указание типа подписи (в т.ч. SIGHASH-флага, который определяет, какую часть транзакции подписывает подписание) соответствует стандартам Bitcoin-протокола.

Технические детали о процессе подписи в Bitcoin

  1. Хэширование транзакции: Подпись формируется не над всей транзакцией, а над её хэшем, в который включены части транзакции в зависимости от флага SIGHASH.
  2. ECDSA-подписи: Bitcoin использует алгоритм Elliptic Curve Digital Signature Algorithm (ECDSA) для создания подписей, обеспечивающих криптографическую безопасность.
  3. Параметры r и s: Подпись состоит из двух числовых параметров r и s. Эти параметры упаковываются в DER-формат для последовательной передачи или хранения.
  4. Проверка подписи: Узлы сети проверяют подписи, чтобы удостовериться в авторизации расходования средств.

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


Уязвимость в Bitcoin, связанная с типом подписи SIGHASH_SINGLE, и её последствия

Несмотря на высокие технологии защиты, в Bitcoin-сети иногда выявляются уязвимости, которые могут привести к краже средств и потере доверия пользователей. Одним из таких примеров стала серьезная проблема, связанная с типом подписи SIGHASH_SINGLE (0x03), которая выявилась на практике в мультиподписном кошельке Copay компании BitPay.

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

Пример: если подпись относится к входу с индексом 0 (vin 0), то она подписывает только выход с индексом 0 (vout 0).

В сущности, такой тип позволяет участнику соглашения подтвердить только часть передачи — что входные данные соответствуют всем входам, а расход идёт на конкретный адрес, не фиксируя остальные выходы.


Уязвимость SIGHASH_SINGLE и ее суть

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

На практике реализация Bitcoin допускает ошибочное поведение — возвращается константа с числом один (int 1) вместо хеша транзакции. Это эквивалентно тому, что для подписи вместо вычисляемого хеша берётся фиксированное значение. Из-за этого злоумышленник может подделать scriptSig и использовать действительные подписи из другой транзакции для входов с отсутствующими выходами, повторно расходуя средства без знания приватных ключей.


Иными словами, атака позволяет создать транзакцию с одним выходом под контролем злоумышленника, расходуя входы из целевых транзакций, даже несмотря на отсутствие приватных ключей для подписи исходных выходов. Эта «повторная» подпись scriptSig становится легитимной для сети, что приводит к краже монет BTC.


Кошелек Copay — стал одним из первых выявленных жертв криптографической атаки подделки цифровой подписи (Digital Signature Forgery Attack). Анализ состояния транзакций показал, что:

  • Использование SIGHASH_SINGLE позволяло злоумышленникам контролировать средства, распределённые на мультиподписном кошельке 2 из 3.
  • Это означало, что два входа транзакций с индексами больше, чем количество выходов, могли быть фактически потрачены без приватных ключей.
  • Кража происходила путём создания транзакции с единственным выходом на контролируемый злоумышленником адрес.

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Пути минимизации угрозы и дальнейшее развитие протокола

  1. Изоляция скриптов и виртуальная машина
    Предлагались решения по выделению отдельных виртуальных сред для мультиподписных кошельков, чтобы ограничить сферу воздействия возникающих уязвимостей.
  2. Использование SIGHASH_ANYONECANPAY
    Этот дополнительный флаг позволяет более гибко регулировать, какие именно входы подпадают под подпись, что снижает риски неправильного связывания транзакций.
  3. Softfork и внедрение новых sighash-флагов
    Современные предложения, такие как SIGHASH_NOINPUT и технические обновления для протокола, позволяют улучшить безопасность и гибкость транзакций второго уровня, например, в Lightning Network (LN-Symmetry, Eltoo).
  4. Переход на схему подписей Шнорра и обновление Taproot
    Новые криптографические методы обеспечивают более надёжную и компактную защиту подписей и позволяют эффективнее реализовывать мультиподписи с минимальными уязвимостями.

Проблема с SIGHASH_SINGLE выявила критический недостаток в механизме подписей Bitcoin, раскрывающий возможность краже средств за счёт повторного использования подписей на входах без соответствующих выходов. Эта уязвимость стала важным уроком и толчком к развитию протокола, стимулируя разработчиков к внедрению более надёжных стандартов. Современные разработки в области Bitcoin, такие как новые sighash-флаги, softfork-обновления, Lightning Network и переход на более безопасные схемы подписей, направлены на предотвращение подобных атак и повышение безопасности пользователей.


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


Неизрасходованные транзакционные выходы монет на Биткоин Адрес под контроль злоумышленника

Выполним команду, чтобы получить информацию о неизрасходованных выходах транзакций (UTXO), находящихся под контролем адреса 1Lyafe8mSqubnynbAWPcXbHE5pnHMzEnT3


Полученный результат:

В выводе содержится список из одного объекта, описывающего конкретный неизрасходованный транзакционный выход (output):


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX


1. Неизрасходованный транзакционный выход (UTXO)

  • UTXO — это «Unspent Transaction Output«, то есть выход транзакции, который ещё не потрачен и доступен для использования в новых транзакциях.
  • В Bitcoin-сети средства хранятся именно в таких выходах.
  • Каждая транзакция имеет один или несколько выходов, каждый из которых может содержать определённое количество сатоши — наименьших единиц Bitcoin.

2. Структура вывода

  • output — строка, состоящая из двух частей:
    • 23e81960ba8bb95c33c2336c84c126e378e4d1123921f881da9247c25f524161 — это txid, идентификатор транзакции, в которой был создан этот выход.
    • :1 — индекс конкретного выхода (output index) в транзакции. В данном случае это второй выход, поскольку индексация начинается с нуля.
  • value — значение выхода:
    • 300000 — объем средств в сатоши.
    • Перевод в биткоины: 300000 сатоши = 0.003 BTC

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

3. Значение для владельца адреса

  • Данный UTXO находится под контролем адреса 1Lyafe8mSqubnynbAWPcXbHE5pnHMzEnT3
  • Это значит, что данный пользователь или кошелек имеет право создать транзакцию, используя эти 0.003 BTC из указанного выхода.
  • Доступ к использованию UTXO осуществляется путём создания входа (input) в новой транзакции, указывающего этот output в качестве источника средств, и предоставления корректной подписи.

4. Практическое применение

  • Анализ и учёт UTXO позволяет:
    • Оценить баланс адреса.
    • Оптимизировать создание новых транзакций — например, выбирать UTXO для минимизации комиссий.
    • Обеспечить правильную агрегацию и расходование средств, избегая ошибок при подписании транзакций.

  • Формировании новых транзакций с использованием этих UTXO;
  • Оптимизации выбора выходов для экономии на комиссиях;
  • Анализе других транзакций и адресов;

Команда ./darkai -unspent успешно выявила и вернула один законный неизрасходованный выход транзакции, который контролируется указанным биткоин-адресом. Объем доступных средств равен 0.003 BTC. Данный результат является актуальным состоянием бюджета владельца данного Биткоин адреса и служит основой для формирования и отправки будущих транзакций с использованием этих средств.


Неизрасходованные результаты транзакций к целевому Биткоин Адресу: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe

Запустим команду и получим данные о неизрасходованных выходах транзакций (UTXO), связанных с Биткоин-адресом 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe которые содержат в себе определенные денежные средства в монетах BTC.


Целевой адрес для атаки подделки цифровой подписи (Digital Signature Forgery Attack):

Объем доступных денежных средств полученные Биткоины контролируется пользователем или системой, выполняющей команду.

Неизрасходованные выходы транзакций (UTXO). После запуска мы получаем результат в списке из двух UTXO:


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX


Расшифровка данных и каждого элемента:

1. Первый UTXO

  • Transaction ID (txid): 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd
  • Output index: 0 (первый выход из транзакции)
  • Значение: 677200 сатоши

Перевод в биткоины:677200/100000000 = 0.006772BTC

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

2. Второй UTXO

  • Transaction ID (txid): bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
  • Output index: 0
  • Значение: 5000000 сатоши

Перевод в биткоины: 5000000/100000000 = 0.05BTC

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Важно знать что, UTXO (Unspent Transaction Output) — это единичный выход ранее совершённой транзакции, который ещё не был использован для создания новой транзакции. Другими словами, это оставшиеся на счёте средства, которые можно потратить в будущем.


  • Каждый UTXO содержит информацию, сколько сатоши на него приходится и из какой транзакции он произошёл.
  • Чтобы потратить средства, необходимо использовать UTXO в качестве входа (input) в новой транзакции.
  • Размеры UTXO влияют на сумму, которую можно потратить и на комиссию в сети.

  1. Суммарный баланс адреса

С учётом приведённых данных суммарный баланс данного адреса составляет: 0.006772+0.05=0.056772BTC0.006772 + 0.05 = 0.056772BTC

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Эти средства доступны владельцу адреса для последующих транзакций.

  1. Выбор UTXO для транзакций
  • При создании новой транзакции кошелёк выбирает из списка UTXO, какие именно использовать, чтобы покрыть требуемую сумму и комиссию.
  • Иногда выгодно использовать несколько мелких UTXO или один крупный — в зависимости от ситуации и оптимизации комиссий.
  1. Безопасность и прозрачность
  • Увидеть UTXO можно в блокчейн-эксплорерах, что обеспечивает прозрачность собственных средств и возможность аудита.
  • Владение приватными ключами для этого адреса даёт полный контроль над этими выходами.

Технические особенности анализа

  • Получение UTXO осуществляется через прямой запрос ноде или специализированному API, позволяющему быстро определить текущие остатки по адресу.
  • Инструмент darkai умеет распознавать и декодировать такие данные, предоставляя человеку удобный и понятный формат.

Команда ./darkai -unspent 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe выявила два неизрасходованных выхода транзакции (UTXO), контролируемых указанным биткоин-адресом. Совокупный объём доступных средств — около 0.05677 BTC, что отражает текущее состояние баланса и доступные к расходованию активы. Эти данные являются ключевыми для любого процесса управления средствами: создания новых транзакций, учета баланса, оптимизации комиссий и обеспечения безопасности работы с криптовалютой.


Сценария создания и подписания транзакции Bitcoin с использованием мультиподписных выходов и SIGHASH_SINGLE

Рассмотрим обширный пример работы с Bitcoin-транзакциями на практике — начиная от получения неизрасходованных выходов (UTXO) нескольких адресов, формирования новой транзакции с использованием этих выходов, подписания входов транзакции с применением типа подписи SIGHASH_SINGLE, и заканчивая итогом — передачей всех BTC на определённый адрес. Особое внимание уделяется техническим деталям, которые важны для понимания уязвимостей и особенностей работы Bitcoin-клиентов с мультиподписными сценариями.

1. Получение неизрасходованных выходов (UTXO) для адресов

1.1. Биткоин адрес злоумышленника для присвоение денежных средств в монетах BTC:

  • Здесь содержится один выход, который не потрачен и доступен для использования.
  • Значение: 300000 сатоши (0.003 BTC).

1.2. Целевой Биткоин адрес для криптографической атаки подделки цифровой подписи (Digital Signature Forgery Attack):

  • Для целевого адреса найдено два UTXO с суммами 677200 (0.006772 BTC) и 5,000,000 сатоши (0.05 BTC).

2. Формирование входов и выходов для новой транзакции

  • На входы добавляются все три неизрасходованных выхода (UTXO) с обоих адресов.
  • Для выхода выбран Биткоин Адрес 1Lyafe8mSqubnynbAWPcXbHE5pnHMzEnT3, куда будут отправлены все средства за вычетом комиссии.

3. Создание и подписание транзакции

3.1. Сборка новой транзакции (без подписей):


3.2. Подписание первого входа с использованием приватного ключа:


3.3. Вручную подставляем scriptSig для входов с использованием SIGHASH_SINGLE подписей:

  • Эти scriptSig содержат две подписи, каждая из которых подписывает только свой соответствующий вход и соответствующий (один) выход (SIGHASH_SINGLE).
  • В дополнение в scriptSig включён redeemScript с тремя публичными ключами мультиподписного кошелька.

4. Итоговая сериализация транзакции и отправка


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Эта транзакция тратит все три входа и отправляет средства на Биткоин адрес злоумышленника 1Lyafe8mSqubnynbAWPcXbHE5pnHMzEnT3


Итоговый результат:


При этом фактически все BTC (в том числе с целевого адреса) были переведены под контроль одного адреса.



5. Особенности использования SIGHASH_SINGLE

  • Серьёзная особенность SIGHASH_SINGLE в том, что подпись защищает только один конкретный вход и выход с одинаковым индексом.
  • Если в транзакции число входов превышает число выходов, для некоторых входов не будет соответствующего выхода.
  • По известному багу Bitcoin в этом случае хэш для подписи возвращается фиксированным значением 1, что позволяет злоумышленнику повторно использовать действительные подписи из другой транзакции для необеспеченных выходов.
  • Это создает уязвимость: подделка действительного scriptSig для тех входов, где отсутствует соответствующий выход — приводит к некорректному, но принимаемому в сеть поведению.

Даже при наличии мультиподписных сценариев (2 из 3), зная эту уязвимость, злоумышленник может эффективно похитить средства, создавая транзакции с едва ли заметными модификациями, используя SIGHASH_SINGLE. Указанный пример иллюстрирует такую атаку: собираются входы из нескольких Биткоин адресов (включая целевой), формируется транзакция с одним выходом к атакующему, и при этом транзакция валидируется.



По данным были отправлены средства на Биткоин адрес злоумышленника 1Lyafe8mSqubnynbAWPcXbHE5pnHMzEnT3 , где при помощи обработки не обновленной библиотеки xml-crypto для некорректных значении данных были совершенный манипулятивные транзакции из Биткоин кошелька: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , где в последствии были потерянный монеты на сумму: 0.059672 BTC на июль 2025 года эта сумма составляет: 7,052 USD



Заключение

В результате криптоанализа криптографической атаки подделки цифровой подписи (Digital Signature Forgery Attack) становится очевидным, что несмотря на высокую надежность базовых криптографических алгоритмов, такие уязвимости, как CVE-2025-29774 и CVE-2025-29775 в библиотеке xml-crypto и баг SIGHASH_SINGLE в протоколе Bitcoin, открывают злоумышленникам эффективные способы обхода механизмов аутентификации и кражи криптовалюты без приватных ключей. На примере атаки на мультиподписной кошелек Copay показано, как тонкости реализации криптографии и ошибки в проверке подписей приводят к потере средств и подрыву доверия к безопасности блокчейна.

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

  • Безопасная процесс с Bitcoin требует корректного использования типов подписи SIGHASH.
  • Как из UTXO нескольких адресов формируется совокупная входящая часть новой транзакции.
  • Как создаётся и подписывается сложная мультиподписная транзакция с использованием флага SIGHASH_SINGLE.
  • Как из-за известных особенностей Bitcoin протокола можно столкнуться с уязвимостью, ведущей к краже средств.
  • Как итоговый результат: все BTC адресов оказались переведены на один контролируемый адрес.
  • Внедрение улучшений в сигнатуры (например, Taproot и подписи Шнорра) направлено на устранение подобных проблем.
  • Разработчики кошельков должны строго валидировать и обновлять компоненты формирования транзакций.

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


References:

  1. Modern Password Cryptanalysis: How Unique Salts and Slowdown Algorithms Protect Data in the Age of Attacks and Bitcoin
  2. Cryptanalysis of Bitcoin transactions: internal mechanisms and software features
  3. Segregated Witness: A Key Step Towards Bitcoin Scalability & Security Is Deep Cryptanalysis. How SegWit Implementation Affects Protection Against Transaction Data Forgery
  4. Bitcoin Cryptanalysis: Mechanisms and Reliability of SHA-256 in Ensuring Blockchain Security and How Future Technological Advances Will Affect SHA-256’s Resilience to Digital Signature Forgery Attacks
  5. Hidden risks of multi-signature Bitcoin wallets: analysis of Copay vulnerability via SIGHASH_SINGLE attack (Digital Signature Forgery Attack) vulnerabilities such as CVE-2025-29774 and CVE-2025-29775 in the xml-crypto library and the SIGHASH_SINGLE bug in the Bitcoin protocol
  6. DeserializeSignature vulnerability in Bitcoin protocol: deep cryptanalysis and risks of forging ECDSA signatures and how to protect against fake signatures in the Bitcoin network that exploit this vulnerability
  7. Multi-Signatures in Bitcoin: How It Works, How to Protect Funds, How It Works, and How Leaking Private Keys Increases Fraud Risks
  8. The New Frontier of Cybersecurity Key Ecosystem Vulnerabilities and Cryptanalysis Bitcoin 2025: IoT Security Threat from CVE-2025-27840 Vulnerability in ESP32 Microcontrollers
  9. Unveiling Anomalies: Cryptanalytic Insights into the $8 Billion Bitcoin Transaction and Its Implications for Blockchain Transparency
  10. Cryptanalytic Disclosures: Unmasking Geopolitical Cyber Espionage and Financial Irregularities in the Nobitex Blockchain Breach
  11. Cryptanalysis of the 2025 Bitcoin Blockchain: Unraveling Over $2 Billion in Crypto Hacks and Fraud in H1 Amid Escalating Cyber Threats
  12. Cryptanalysis of Bitcoin Amid Evolving Web3 Cyberattacks: Dissecting $1 Million Theft by Impersonating IT Specialists and the Escalating Security Crisis in 2025
  13. Cryptanalysis of the Bitcoin Blockchain in 2025: Revealing the Surge of $2.1 Billion Lost to Private Key and Front-End Exploits Driving Record Crypto Thefts
  14. Cryptanalysis of the Bedrock Protocol Breach: Unraveling Social Engineering, Insider Threats, and Resilient TVL Growth in a $2 Million Liquid Staking Cyberattack
  15. SparkKitty, a new cross-platform Trojan that steals cryptodata via infected apps: a threat to users in Southeast Asia, China and around the worldCryptanalysis of Bitcoin Security Threats: Unmasking SparkKitty Trojan’s Cross-Platform Crypto Data Heist on iOS and Android in Southeast Asia and Beyond
  16. Discord Ledger Hack and Data Leaks: How Scammers Exploit Users’ Trust to Steal Cryptocurrency and What Security Measures Are in PlaceCryptanalysis of Blockchain Security: Investigating the Ledger Discord Hack and the Exploitation of User Trust in Crypto Seed Phrase Phishing Attacks
  17. Critical Mobius Token Hack: Over $2.15M Stolen on BNB Chain — Scale of Losses Undermines Investor Confidence, Calls for Security EnhancementsCryptanalysis and Exploit Dynamics of the Mobius Token Smart Contract Hack: Unveiling the $2.15 Million BNB Chain Breach and its Implications for DeFi Security in 2025
  18. Meta Pool Stops Hacker Attack: Quick Unstake Vulnerability Allowed Creation of Uncollateralized mpETH Tokens, But Low Liquidity and Quick Response Minimized Damage: Cryptanalysis of the Meta Pool Breach: Dissecting the $27M mpETH Minting Exploit Through Fast Unstake Vulnerability and Liquidity Constraints
  19. The Insidiousness of Cyber ​​Threats: How Fake Cold Wallets and Malicious Drivers Are Emptying Crypto Assets and What to Do to Protect YourselfCryptanalysis of Bitcoin Asset Drainage: Exposing the Menace of Fake Cold Wallets and Malicious Drivers in 2025’s Cyber Threat Landscape
  20. Alex Protocol Strengthens Security and Restores User Trust via USDC Stable Compensation Following Major ExploitCryptanalysis of the Alex Protocol Bitcoin DeFi Exploit: Dissecting the $8.3 Million Self-Listing Verification Breach and Restoring Trust through USDC Compensation
  21. Bybit After $1.4 Billion Hack: Comprehensive Security Update, Liquidity Restoration, and New Cyber ​​Attack Challenges Cryptanalysis of the Historic $1.4 Billion Bybit Hack: Unraveling Sophisticated Cold Wallet Exploits, North Korean Attack Vectors, and the 2025 Security Overhaul
  22. Social Engineering in 2025: The Main Vector of Attacks on Cryptocurrency and Modern Methods of Protection and How the Human Factor Became the Weak Link of Crypto SecurityCryptanalysis of the Human Factor: Unveiling Social Engineering as the Dominant Attack Vector in 2025’s Bitcoin Blockchain Security Landscape
  23. Lazarus Group Vulnerabilities Revealed: How Hacker Mistakes and Security Measures Help Counter North Korean Group CyberattacksCryptanalysis of State-Sponsored Cyber Warfare: Unmasking Lazarus Group’s $1.5 Billion Bybit Heist and the Evolution of North Korean Cyberattack Countermeasures
  24. Cryptocurrency Hack Losses Decline in May 2025: Causes, Large-Scale Attacks, and Impact of North Korea Cyber ​​Threats on Global Security and Industry TrustCryptanalysis of 2025 Bitcoin Blockchain Attacks: Exploring the Decline in Hack Losses Amid North Korean Threats and Their Impact on Global Crypto Security and Industry Trust
  25. Rise of Crypto Scams in 2025: How Lack of Knowledge and Social Engineering Make Users Easy TargetsCryptanalysis of the Bitcoin Blockchain in 2025: How User Vulnerability and Advanced Social Engineering Fuel the Surge in Crypto Scams
  26. $12 Million Cork Protocol Hack: wstETH Market Vulnerability, Security Measures, and Refund Prospects. DeFi Under Attack, wstETH Market Vulnerability, and Refund Challenges Under New Law
  27. The Cetus Hack and Lessons for Web3: MSB Vulnerabilities, Criticism of Centralized Interference, and New Security Standards with Multi-Sig WalletsCryptanalysis of the Cetus Protocol Hack: Exposing MSB Vulnerabilities, Centralization Critiques, and the Push for Multi-Sig Security Standards in Web3
  28. Cyberattacks on Ledger users on the rise: How fake apps and seed theft are undermining trust in crypto wallets and what to do to protect yourselfCryptanalysis of Bitcoin Wallet Security in 2025: The Rising Threat of Fake Apps and Seed Theft Undermining User Trust and Defenses
  29. $220 Million Cetus Hack: Security Challenges, Sui Validators’ Response, and Lessons for Trust in Web3 EcosystemsCryptanalysis of the $223 Million Cetus Hack: Unveiling Overflow Vulnerabilities, Sui Validators’ Crisis Response, and Implications for Trust in Web3 Ecosystems
  30. Massive Coinbase Data Leak: Causes, Consequences, and New Standards for Cybersecurity in the Crypto IndustryCryptanalysis of the 2025 Coinbase Data Breach: Insider Threats, Social Engineering Exploits, and Advancing Cybersecurity Standards in the Crypto Industry
  31. Social Engineering and Crypto Fraud: Unique Threats to Coinbase and the Need for a Unified DefenseCryptanalysis of the 2025 Coinbase Data Breach: Social Engineering as the Ultimate Crypto Security Vulnerability and the Quest for Unified Defense
  32. Safeheron Brings New Levels of Web3 Security and Privacy: The First Open Intel SGX TEE Framework for Ethereum and Decentralized Finance: Advancing Bitcoin Blockchain Cryptanalysis with Safeheron’s Open-Source Intel SGX TEE Framework: Pioneering Web3 Security and Privacy in Decentralized Finance
  33. Cyber ​​Threats in DeFi: How Standards Vulnerabilities, Social Engineering, and Mixers Like Tornado Cash Are Undermining Crypto Platform Security and User Trust: Cryptanalysis of Decentralized Finance Vulnerabilities: A Deep Dive into Standard Exploits, Social Engineering, and the Role of Crypto Mixers in Undermining Bitcoin Ecosystem Security


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.


Crypto Tools

Исходный код

Google Colab

Telegram: https://t.me/cryptodeeptech

Видеоматериал: https://youtu.be/qbu1m_C1wyA

Video tutorial: https://dzen.ru/video/watch/68801dfc0c886621f7c1a0db

Источник: https://cryptodeeptool.ru/digital-signature-forgery-attack


Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с поддельными RawTX

  Digital Signature Forgery Attack: как уязвимости CVE-2025-29774 и баг SIGHASH_SINGLE угрожают мультиподписным кошелькам методы операции с ...