Извлечение секретного ключа реализуем WhiteBox Attack on Bitcoin с дифференциальными ошибками по исследовательской схеме
В этой статье мы опять затронем тему неисправности подписи в транзакции блокчейна и применим совершенно новую атаку: “WhiteBox Attack on Bitcoin”.Дифференциальный анализ неисправностей сокращенно (DFA) был впервые описан в литературе в 1996 году, когда израильский криптограф и криптоаналитик Eli Biham и израильский учёный Adi Shamir показали, что они могут использовать внедрение ошибок для извлечение секретного ключа и восстановление приватного ключа, используя различные алгоритмы подписи и проверки верификации.
Мы реализуем “WhiteBox Attack on Bitcoin” с дифференциальными ошибками, описанные в этом исследовательском документе . Классический DFA, который мы описали в предыдущей статье называется F(). Для некоторых из этих атак также требуются две пары подписи ECDSA.
С теоретической частью данной атаки мы можем ознакомиться в статье из списка популярных Биткоин атак: “WhiteBox Attack on Bitcoin”
Из наших ранних публикации нам известно что в блокчейне Биткоина очень много уязвимых и слабых транзакциии и в процессе нашего криптоанализа мы нашли множество Биткоин Адресов, где большое количество подписи ECDSA были совершены с раскрытием секретного ключа "K" (NONCE).
Рассмотрим три Биткоин Адреса:
Каждый Биткоин Адрес совершил по две критический уязвимые транзакции:
Откроем [TerminalGoogleColab].
Реализуем эффективный алгоритм WhiteBox Attack с помощью нашей репозитории 16WhiteBoxAttack
Установим все нужные нам пакеты
Подготовим RawTX для атаки
Теперь нам нужно получить все значение R, S, Z из всех уязвимых транзакции
Воспользуемся скриптом breakECDSA.py
R = 0x15e3f8b110a2baf09ddcce139644888bda303cd4d0a37c872e5faceb57abff01 S = 0x2d2ca770322bfad7a32ae2568869512f71b8c40a561a7109a54f2799953342e3 Z = 0x793c00bdb7c96e19cb2670f3aec5369558b64f0e12645af070d94c2fc06db6ed
Чтобы реализовать атаку и получить секретный ключ мы воспользуемся программным обеспечение “ATTACKSAFE SOFTWARE”
Права доступа:
Применение:
Запустим список всех атак:
Запустим -tool whitebox_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”
Мы запустили данную атаку из -tool whitebox_attack и результат сохранился в файл SecretKey.txt
Теперь чтобы посмотреть успешный результат откроем файл SecretKey.txt
Мы видим надпись "Deployments ECDSA" это означает критическую уязвимость транзакции блокчейна Биткоина
SecretKey значение в формате HEX, это и есть наш секретный ключ "K" (NONCE):
K = 0x5d4bc1aa9668f2286151499508869fd31e07f4a9e7dd09f5f6dc4634464dd58d
Сделаем проверку с помощью Python-скрипта point2gen.py
Для этого установим библиотеку эллиптических кривых ECPy:
Теперь запустим скрипт указав секретный ключ "K" (NONCE):
Проверяем координаты точки EC (secp256k1) с значением сигнатуры R
ВСЕ ВЕРНО!
Теперь зная секретный ключ мы можем получить приватный ключ к Биткоин Кошельку: 1A1DUHhe6ENKxj4Qebs5Xs63pfWwRQazsY
Воспользуемся Python-скриптом: calculate.py > > > Получим Приватный Ключ
Откроем код и добавим все значение сигнатур K, R, S, Z
Скрипт рассчитает приватный ключ по формуле:
Запустим скрипт:
Откроем bitaddress и проверим:
Приватный ключ найден!
BALANCE: $ 607.79
При детальном криптоанализе мы также нашли критическую уязвимость и в TXID: 6c857473097543b32702c5f731a3e4c5cb01a1a5ae4bcd1a297b5848acbe8aba для этого же Биткоин Адреса
Подготовим RawTX для атаки
Теперь нам нужно получить все значение R, S, Z из всех уязвимых транзакции
Воспользуемся скриптом breakECDSA.py
Чтобы получить секретный ключ из уязвимой транзакции подписи ECDSA, добавим данные RawTX в текстовый документ и сохраним как файл RawTX.txt
Запустим -tool whitebox_attack используя программное обеспечение “ATTACKSAFE SOFTWARE”
Мы видим надпись "Deployments ECDSA" это означает критическую уязвимость транзакции блокчейна Биткоина
SecretKey значение в формате HEX, это и есть наш секретный ключ "K" (NONCE):
K = 0xf39222231d8ddbaa7425e3c3ff4ebdc86aff1a5449df5910eae18baeb8d5bddd
Сделаем проверку с помощью Python-скрипта point2gen.py
Воспользуемся библиотекой эллиптических кривых ECPy:
Теперь запустим скрипт указав секретный ключ "K" (NONCE):
Проверяем координаты точки EC (secp256k1) с значением сигнатуры R
K = 0xf39222231d8ddbaa7425e3c3ff4ebdc86aff1a5449df5910eae18baeb8d5bddd
Теперь зная секретный ключ мы можем получить приватный ключ к Биткоин Кошельку: 1A1DUHhe6ENKxj4Qebs5Xs63pfWwRQazsY
Воспользуемся Python-скриптом: calculate.py > > > Получим Приватный Ключ
Откроем код и добавим все значение сигнатур K, R, S, Z
Скрипт рассчитает приватный ключ по формуле:
Запустим скрипт:
Откроем bitaddress и проверим:
BALANCE: $ 607.79
Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.