- PVSM.RU - https://www.pvsm.ru -
Всем нам известно, что раскрываемость секретного ключа в подписи ECDSA может привести к полному восстановлению Биткоин Кошелька. В наших более ранних статьях мы рассматривали слабости и уязвимости [1] в транзакциях блокчейна, но так же существуют короткие подписи ECDSA которые так же приводят к полному восстановлению Биткоин Кошелька.
Ответ на этот вопрос вы можете получить из обсуждаемой темы: "Самая короткая подпись ECDSA" [The shortest ECDSA signature] [2]
В прошлой нашей статье: "Уменьшение приватного ключа через скалярное умножение используем библиотеку ECPy + Google Colab" [3] мы создали Python-скрипт: maxwell.py [4] который сгенерировал для нас довольно интересный публичный ключ
(0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63 , 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c)
Как мы знаем значение сигнатуры
"R"
это и есть публичный ключ от секретного ключа(Nonce)
Взгляните на Blockchain транзакцию: 11e6b169701a9047f3ddbb9bc4d4ab1a148c430ba4a5929764e97e76031f4ee3 [5]
0100000001afddd5c9f05bd937b24a761606581c0cddd6696e05a25871279f75b7f6cf891f250000005f3c303902153b78ce563f89a0ed9414f5aa28ad0d96d6795f9c6302200a963d693c008f0f8016cfc7861c7f5d8c4e11e11725f8be747bb77d8755f1b8012103151033d660dc0ef657f379065cab49932ce4fb626d92e50d4194e026328af853ffffffff010000000000000000016a00000000
Размер этой транзакции всего лишь:
156 байт
В криптоанализе блокчейна криптовалюты Bitcoin мы используем собственный Bash-скрипт: btcrecover.sh
pip2 install -r requirements.txt
chmod +x btcrecover.sh
./btcrecover.sh 12yysAMhagEm67QCX85p3WQnTUrqcvYVuk
./btcrecover.sh 15HvLBX9auG2bJdLCTxSvjvWvdgsW7BvAT
| privkey : addr |
Откроем bitaddress [6] и проверим:
ac8d0abda1d32aaabff56cb72bc39a998a98779632d7fee83ff452a86a849bc1:12yysAMhagEm67QCX85p3WQnTUrqcvYVuk
b6c1238de89e9defea3ea0712e08726e338928ac657c3409ebb93d9a0873797f:15HvLBX9auG2bJdLCTxSvjvWvdgsW7BvAT
Откроем [TerminalGoogleColab] [7].
Воспользуемся репозиторием «09BitcoinWalletRecovery» [8].
git clone https://github.com/demining/CryptoDeepTools.git
cd CryptoDeepTools/09BitcoinWalletRecovery/
ls
bitcoin
ecdsa
utils
base58
pip2 install -r requirements.txt
С помощью скрипта breakECDSA.py [9] мы получим из
RawTX
сигнатуры [R, S, Z]
python2 breakECDSA.py 0100000001afddd5c9f05bd937b24a761606581c0cddd6696e05a25871279f75b7f6cf891f250000005f3c303902153b78ce563f89a0ed9414f5aa28ad0d96d6795f9c6302200a963d693c008f0f8016cfc7861c7f5d8c4e11e11725f8be747bb77d8755f1b8012103151033d660dc0ef657f379065cab49932ce4fb626d92e50d4194e026328af853ffffffff010000000000000000016a00000000 > signatures.txt
Откроем файл: PublicKeys.txt
cat signatures.txt
R = 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
S = 0x0a963d693c008f0f8016cfc7861c7f5d8c4e11e11725f8be747bb77d8755f1b8
Z = 0x521a65420faa5386d91b8afcfab68defa02283240b25aeee958b20b36ddcb6de
Как нам известно из прошлой нашей статьи [3], нам известен секретный ключ к генерации сигнатуры R
В нашем случае секретный ключ
(Nonce)
:
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0x3f3979bf72ae8202983dc989aec7f2ff2ed91bdd69ce02fc0700ca100e59ddf3
K = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
R = 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
S = 0x0a963d693c008f0f8016cfc7861c7f5d8c4e11e11725f8be747bb77d8755f1b8
Z = 0x521a65420faa5386d91b8afcfab68defa02283240b25aeee958b20b36ddcb6de
Теперь когда нам известны значение
[K, R, S, Z
] мы можем получить приватный ключ по формуле и восстановить Биткоин Кошелек.
Для получения приватного ключа воспользуемся Python-скриптом: calculate.py [10]
def h(n):
return hex(n).replace("0x","")
def extended_gcd(aa, bb):
lastremainder, remainder = abs(aa), abs(bb)
x, lastx, y, lasty = 0, 1, 1, 0
while remainder:
lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
x, lastx = lastx - quotient*x, x
y, lasty = lasty - quotient*y, y
return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)
def modinv(a, m):
g, x, y = extended_gcd(a, m)
if g != 1:
raise ValueError
return x % m
N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
K = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
R = 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
S = 0x0a963d693c008f0f8016cfc7861c7f5d8c4e11e11725f8be747bb77d8755f1b8
Z = 0x521a65420faa5386d91b8afcfab68defa02283240b25aeee958b20b36ddcb6de
print (h((((S * K) - Z) * modinv(R,N)) % N))
python3 calculate.py
Откроем bitaddress [6] и проверим:
ADDR: 15HvLBX9auG2bJdLCTxSvjvWvdgsW7BvAT
WIF: L3LxjEnwKQMFYNYmCGzM1TqnwxRDi8UyRzQpVfmDvk96fYN44oFG
HEX: b6c1238de89e9defea3ea0712e08726e338928ac657c3409ebb93d9a0873797f
Приватный ключ найден!
Биткоин кошелек восстановлен!
Короткие подписи ECDSA
- это потенциальная угроза потери монетBTC
, поэтому мы настоятельно рекомендуем всем всегда обновлять ПО и использовать только проверенные устройства.
Данный видеоматериал создан для портала CRYPTO DEEP TECH [11] для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1
против слабых подписей ECDSA
в криптовалюте BITCOIN
Исходный код [8]
Telegram [12]: https://t.me/cryptodeeptech [12]
Видеоматериал: [13] https://youtu.be/xBgjWE5tA7Y [13]
Источник: https://cryptodeep.ru/shortest-ecdsa-signature [14]
Автор: CRYPTO DEEP TECH
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/378147
Ссылки в тексте:
[1] слабости и уязвимости: https://habr.com/ru/post/671932/
[2] "Самая короткая подпись ECDSA" [The shortest ECDSA signature]: https://bitcoin.stackexchange.com/questions/38513/the-shortest-ecdsa-signature
[3] "Уменьшение приватного ключа через скалярное умножение используем библиотеку ECPy + Google Colab": https://habr.com/ru/post/682220/
[4] maxwell.py: https://github.com/demining/CryptoDeepTools/blob/main/08ReducePrivateKey/maxwell.py
[5] 11e6b169701a9047f3ddbb9bc4d4ab1a148c430ba4a5929764e97e76031f4ee3: https://btc.exan.tech/tx/11e6b169701a9047f3ddbb9bc4d4ab1a148c430ba4a5929764e97e76031f4ee3
[6] bitaddress: https://cryptodeep.ru/bitaddress.html
[7] [TerminalGoogleColab]: https://github.com/demining/TerminalGoogleColab
[8] «09BitcoinWalletRecovery»: https://github.com/demining/CryptoDeepTools/tree/main/09BitcoinWalletRecovery
[9] breakECDSA.py: https://github.com/demining/CryptoDeepTools/blob/main/09BitcoinWalletRecovery/breakECDSA.py
[10] calculate.py: https://github.com/demining/CryptoDeepTools/blob/main/09BitcoinWalletRecovery/calculate.py
[11] CRYPTO DEEP TECH: https://cryptodeep.ru/
[12] Telegram: https://t.me/cryptodeeptech
[13] Видеоматериал:: https://youtu.be/xBgjWE5tA7Y
[14] Источник: https://cryptodeep.ru/shortest-ecdsa-signature: https://cryptodeep.ru/shortest-ecdsa-signature
[15] Источник: https://habr.com/ru/post/683802/?utm_source=habrahabr&utm_medium=rss&utm_campaign=683802
Нажмите здесь для печати.