Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

В этом исследовании мы рассмотрим уязвимость DeserializeSignature, которая позволяла злоумышленникам создавать недействительные подписи ECDSA в сети Биткоин. В криптографии цифровая подпись ECDSA – это математическая схема, позволяющая доказать подлинность цифрового сообщения или документа. В сети Bitcoin подписи используются для авторизации транзакций, подтверждая, что владелец определенного количества биткоинов действительно согласен на их перевод. Однако, уязвимость в функции DeserializeSignature, обнаруженная в 2023 году, позволяла злоумышленникам создавать недействительные подписи, которые могли быть приняты сетью как валидные.

Принцип работы DeserializeSignature

Функция DeserializeSignature отвечает за десериализацию (преобразование из последовательности байтов) цифровой подписи в объект, который может быть использован для проверки ее валидности. Эта функция ожидает определенный формат данных, соответствующий стандарту криптографии с открытым ключом (ECDSA) используемому в Bitcoin. Функция DeserializeSignature принимает подпись транзакции и проверяет ее соответствие с полученным в результате вычисления хешем. Если подпись является корректной, DeserializeSignature возвращает true, иначе – false. Суть уязвимости заключалась в том, что DeserializeSignature не проверяла корректность всех параметров подписи перед ее десериализацией. В частности, функция не проверяла, является ли значение “R” или “S” подписи нулевым. Это позволяло злоумышленникам создавать подписи с нулевыми значениями, которые, несмотря на свою невалидность, могли быть приняты некоторыми клиентами Bitcoin как корректные. Злоумышленник может создать фальшивую подпись транзакции, которая будет принята как корректная, если она будет передана функции DeserializeSignature с неправильными данными.

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

Данная уязвимость представляла серьезную угрозу для безопасности сети Bitcoin. Злоумышленники могли использовать ее для:

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

Создания недействительных подписей ECDSA с помощью процесса машинного обучение BitcoinChatGPT

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


Откроем версию Google Colab:

https://colab.research.google.com/drive/1-3WyUqipb1pXrlDjg4jxtMOG6J3MU3sa#scrollTo=B8ueObMAt5Q9&line=1&uniqifier=1


Соединим все выданные значение в одну общую строку:

Откроем опцию от BlockCypher “Decode A Transaction”:

https://live.blockcypher.com/btc/decodetx

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

После декодирование уязвимой Raw транзакции Биткоина мы получаем результат:

Обратим внимание на Bitcoin HASH160: d74b32dfa340da479ce64aaf5e326496eb3995f1
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/f0421962be80403bb1b0877eace2c7eb70eb85bd/32DeserializeSignatureVulnerability/DecodeRawTX.txt#L31


BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk отправляет 1234 satoshi на тот же адрес внутри своей сети.

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA


Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

VulnerableRawTX.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/wif_to_hash160.py


Вопрос – Ответ:
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA


В конечном итоге модуль BitcoinChatGPT выдает ответ в файл: KEYFOUND.privkey сохранив приватный ключ в двух наиболее используемых форматах HEX & WIF
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/KEYFOUND.privkey


BitcoinChatGPT №2 DeserializeSignature Vulnerability Algorithm


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

Чтобы перейти к практической части создадим из полученных данных уязвимую Raw транзакцию используя репозиторию Broadcast Bitcoin Transaction

Скачаем и установим исходный код откроем терминал и запустим команду:

Каталог:

Установим три важные библиотеки:

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

Откроем в Notepad++ основной файл и несем небольшие изменение в коде Python Script: main.py



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

Откроем файл RawTX в каталоге:


Как нам известно из prompt ответов модуля BitcoinChatGPT aлгоритм для выявление уязвимости DeserializeSignature может быть использован для нескольких вариантов решения сложных криптографических задач.


Раскрытие секретного ключа “K” (NONCE) в блокчейне Биткоина


Откроем [GoogleColab]

Реализуем алгоритм с помощью нашей репозитории 32DeserializeSignatureVulnerability

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Подготовим RawTX для атаки



Теперь нам нужно получить все значение R, S, Z из всех уязвимых транзакции

Воспользуемся сервисом: https://attacksafe.ru/RSZ-Signature-From-Tx


Чтобы реализовать атаку и получить секретный ключ мы воспользуемся программным обеспечение “ATTACKSAFE ULTRA”

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
www.attacksafe.ru/ultra

Для необходимых пакетов библиотек для запуска программного обеспечение “ATTAKSAFE ULTRA” установим “SAGE MATH”


Twist Attack пример №1 выполним ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку
Twist Attack пример №1 выполним ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

Команда установки:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA


С помощью утилиты wget загрузим в папку Google Colab репозитории ATTACKSAFE_ULTRA.zip

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Разархивируем репозитории ATTACKSAFE_ULTRA.zip

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Запустим список всех скриптов для атак:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Права доступа:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Применение:

Чтобы получить секретный ключ из уязвимой транзакции подписи ECDSA, добавим данные RawTX в текстовый документ и сохраним как файл RawTX.txt для этого воспользуемся утилитой echo

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

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Запустим deserialization_error_vulnerability_cve-2023-0085.sage используя программное обеспечение “ATTACKSAFE ULTRA


Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Мы запустили данную атаку из deserialization_error_vulnerability_cve-2023-0085.sage и результат сохранился в файл SecretKey.txt

Теперь чтобы посмотреть успешный результат откроем файл SecretKey.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Мы видим надпись "Deployments ECDSA" это означает критическую уязвимость транзакции блокчейна Биткоина

SecretKey значение в формате HEX, это и есть наш секретный ключ "K" (NONCE):


Сделаем проверку с помощью Python-скрипта point2gen.py


Для этого установим библиотеку эллиптических кривых ECPy:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Теперь запустим скрипт указав секретный ключ "K" (NONCE):

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Проверяем координаты точки EC (secp256k1) с значением сигнатуры R


Теперь зная секретный ключ мы можем получить приватный ключ к Биткоин Кошельку: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk


Воспользуемся Python-скриптом: calculate.py > > > Получим Приватный Ключ


Откроем код и добавим все значение сигнатур K, R, S, Z

Скрипт calculate.py рассчитает приватный ключ по формуле:

Запустим скрипт:
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Откроем bitaddress и проверим:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://www.blockchain.com/btc/address/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk


Приватный Ключ Получен!

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA
Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://www.blockchain.com/explorer/addresses/btc/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk


BALANCE: $ 819113


References:

  1. “Mastering Bitcoin” by Andreas M. Antonopoulos – This is one of the most famous books about Bitcoin , which covers many aspects including security and vulnerabilities.
  2. “Bitcoin and Cryptocurrency Technologies” by Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, and Steven Goldfeder – This book provides a deep understanding of the technologies underlying Bitcoin and other cryptocurrencies, including security issues.
  3. Bitcoin Developer Documentation – Official documentation for Bitcoin developers, available on the website bitcoin.org. It includes information about various security aspects and vulnerabilities.
  4. Bitcoin Improvement Proposals (BIPs) – Documents describing various improvements and changes to the Bitcoin protocol. Some of them relate to security and vulnerabilities. A list of BIPs can be found at bitcoin.org.
  5. “A Fistful of Bitcoins: Characterizing Payments Among Men with No Names” by Sarah Meiklejohn et al. – This article explores the anonymity and security of transactions on the Bitcoin network.
  6. “Bitcoin: A Peer-to-Peer Electronic Cash System” by Satoshi Nakamoto – An original white paper describing the concept of Bitcoin. Although it does not focus on vulnerabilities, it is a foundational document for understanding the system.
  7. “Security and Privacy in Bitcoin” by Malte Möser – A dissertation exploring various aspects of security and privacy in the Bitcoin network.
  8. “Bitcoin and Blockchain Security” by Ghassan O. Karame – Dissertation on security issues in Bitcoin and blockchain technologies.


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


Исходный код

ATTACKSAFE ULTRA

Telegram: https://t.me/cryptodeeptech

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

Dzen Video Tutorial: https://dzen.ru/video/watch

Источник: https://cryptodeep.ru/deserialize-signature-vulnerability-bitcoin


Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Crypto Deep Tech