НовостиКриптовалютыBitcoin Core добавил защиту от уязвимости подписания, позволявшей перенаправлять средства без кражи ключей

Bitcoin Core добавил защиту от уязвимости подписания, позволявшей перенаправлять средства без кражи ключей

Автор: CryptoNewsNet·

Ключевые выводы

  • •Bitcoin Core 25 сентября добавил исправление, запрещающее подписание PSBT в случаях, когда граничный случай SIGHASH_SINGLE с отсутствующим выходом мог оставить подпись действительной после изменения получателя.
  • •Уязвимость не раскрывает приватные ключи, но для legacy-входов подпись над фиксированным хеш-значением могла быть потенциально повторно использована против других неизрасходованных выходов того же ключа при совпадающих структурных условиях.
  • •Подписи SegWit v0 по-прежнему привязаны к конкретной расходуемой монете и её сумме, однако выход-получатель может остаться непривязанным, что создаёт проблему авторизации для кошельков и подписывающих устройств.
  • •Новая проверка была перенесена в общую логику создания подписей Bitcoin Core, распространив существующее отклонение для сырых транзакций на путь PSBT, включая команду walletprocesspsbt, и при этом позволяя действительным входам в той же PSBT проходить дальше.
  • •По состоянию на 4 октября ни один production-релиз и ни один подтверждённый бэкпорт не содержали эту защиту, что побуждает провайдеров кошельков и интеграции с аппаратным подписанием самостоятельно проверить обработку запросов SIGHASH_SINGLE, не дожидаясь релиза Bitcoin Core.
Bitcoin Core добавил защиту от уязвимости подписания, позволявшей перенаправлять средства без кражи ключей

Bitcoin Core добавил защиту от подписания транзакций, подписи которых могут не связывать средства криптографически с одобренным пользователем получателем платежа. Изменение, добавленное в основную ветку разработки проекта 25 сентября, устраняет узкую уязвимость в частично подписанных биткойн-транзакциях, или PSBT, которая могла привести к созданию действительной подписи без защиты целевого выхода. Bitcoin Optech сообщил об этом обновлении 2 октября.

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

Как работает уязвимость SIGHASH_SINGLE

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

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

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

Bitcoin Core блокирует рискованный запрос на подписание

Bitcoin Core уже отклонял этот граничный случай через интерфейс подписания сырых транзакций, но его путь PSBT — включая команду walletprocesspsbt — всё ещё мог его подписать. Новый код переносит проверку в общую логику создания подписей Bitcoin Core, поэтому то же отклонение теперь применяется во всех путях подписания Bitcoin Core, предотвращая подписание затронутых legacy и SegWit v0-входов и при этом позволяя другим действительным входам в той же PSBT проходить дальше.

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

Bitcoin Improvement Proposal 174, определяющий PSBT, уже предписывает подписантам отклонять неприемлемые режимы подписания и рекомендует SIGHASH_ALL, если не указана альтернатива. Изменение в Bitcoin Core явно предотвращает попадание этой конфигурации с отсутствующим выходом на этап подписания.

Production-релиза с исправлением пока нет

Пользователи пока не имеют подтверждённого production-релиза, содержащего эту защиту. Изменение от 25 сентября было добавлено в ветку разработки Bitcoin Core, и по состоянию на 4 октября в опубликованных списках релизов проекта не была указана исправленная версия или подтверждён бэкпорт. Бэкпорт перенёс бы ту же защиту в уже выпущенную версию; пока он не появится в списках, защита существует только в кодовой базе разработки.

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

Первоначальный отчёт был опубликован на CryptoSlate.