В этой статье мы постараемся показать как можно уменьшить приватный ключ зная только утечку из списка «BLOCKCHAIN FOLBIT LEAKS» и публичный ключ из «UTXO». В экспериментальной части мы воспользуемся скриптами 08ReducePrivateKey и восстановим Биткоин Кошелек. Скалярное умножение на эллиптической кривой — это операция добавления точки P на кривую k раз. Q=kP=P+P+P, k times  P — точка на эллиптической кривой, а k — большое натуральное число.  В любых примитивных реализациях ECC скалярное умножение является основной вычислительной операцией.  Ключевым фактором повышения эффективности ECC является реализация быстрого скалярного умножения. Поэтому многие исследователи предлагали различные исследования ускоренного скалярного умножения. ECPy предоставляет: подписи ECDSA подписи Ed25519 подписи ECSchnorr подписи Borromean операции с точками  Во многих наших исследованиях мы используем библиотеку ECPy и Google Colab Откроем . Воспользуемся репозиторием «08ReducePrivateKey». Установим библиотеку ECPy: Python скрипт: maxwell.py , сохраним код и запустим в терминале Google Colab Команда запуска: Результат: Обратите внимание на координату x: Этот публичный ключ называют "Maxwell's vanity public key" У нас есть три разных Биткоин Адреса с балансом 100 BTC и выше из списка Bitcoin Rich List 1KpHWkpG7BGxDuSJKYPYVvNSC6womEZdTu1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm1GrTCkqqcXhVTXoQkPJjU5LuFKgAvC3iqJ Получим UTXO для этих Биткоин Адресов и теперь у нас есть три подписи ECDSA  (Применим скрипты 01BlockchainGoogleDrive) c1ea2c9e48ce632488817781f89730d77cd4121f1c8f70a4be44d2a15e8e08d037dadae30c6f7c6c4a2c930db979494783005a8e94d6861039fed21e3fa859b99dacfc8243109475383d5b30e8d5f0ba23d023bd47649064c208d4586b278436 Получим RawTX для трех разных Биткоин Адресов Установим все нужные модули: С помощью скрипта breakECDSA.py мы узнаем публичные ключи для Биткоин Адресов После запуска мы получаем публичные ключи на все три Биткоин Адреса. Результат будет сохранен в файл: PublicKeys.txt Сделаем эти публичные ключи в виде точек координат (x,y): Сохраним точки координат (x,y) в файле: Coordinates.txt Откроем список известных блокчейн утечек на 2019 год «BLOCKCHAIN FOLBIT LEAKS» Скопируем значение: Теперь проведем скалярное умножение по всем координатам точек (x,y) применив значение утечки: dac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae Изменим код maxwell.py и изменим название на scalarEC.py Добавим with open("Coordinates.txt", "rt") as base: Все новые координаты будут сохранены в файле: SaveBase.txt B  = 0xdac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae Добавим значение B из списка в код и сохраним как Python-скрипт: scalarEC.py Запустим скрипт: Результат сохранился в файле: SaveBase.txt Откроем файле: SaveBase.txt После скалярного умножение на значение утечки по всем координатным точкам (x,y) мы получаем новые точки Теперь переделаем эти координаты в форму несжатых публичных ключей. Обратим внимание на этот публичный ключ: Теперь для поиска приватного ключа применим метод Pollard's Kangaroo Ранее мы публиковали статью: "Pollard's Kangaroo находим решения дискретного логарифма secp256k1 PRIVATE KEY + NONCES в известном диапазоне" Воспользуемся новым кодом Pollard's Kangaroo от Telariust Python-скрипт: kangaroo.py Установим модуль gmpy2 по команде: Дальше запустим Python-скрипт: kangaroo.py В терминале видим что мы сумели получить "prvkey": Результат сохранится в файл: Privkey.txt Мы получили уменьшенный приватный ключ для публичного ключа: Обратите внимание на приватный ключ: Последние 8 цифр в формате HEX совпадает с публичным ключом "Maxwell's vanity public key" Теперь чтобы получить приватный ключ для одного из трех Биткоин Адресов нам осталось сделать деление по модулю значение A на значение B  Privkey = ((A * modinv(B,N)) % N) Воспользуемся Python-скриптом: calculate.py Запустим Python-скрипт: calculate.py Откроем bitaddress и проверим: Приватный ключ найден! Биткоин кошелек восстановлен! Данный видеоматериал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN   Исходный код Telegram: https://t.me/cryptodeeptech   Видеоматериал: https://youtu.be/zu2yiaZ_LOs Источник: https://cryptodeep.ru/reduce-private-key  Криптоаналитик