Исследование уязвимости Signature Malleability и компрометации приватного ключа в подписи Bitcoin [Часть №1]

Данное исследование криптоанализа разделена на три части. В первой части статьи мы провели большое исследование уязвимости Signature Malleability, угрожающей безопасности популярных криптовалют, таких как Bitcoin и Ethereum. Во второй части статьи мы рассмотрели на реальном примере механизмы эксплуатации CVE-2024-42461 в библиотеке Elliptic для ECDSA, используя биткоин-кошелек 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw, на котором были потеряны монеты на сумму 21.2529214 BTC, что на ноябрь 2024 года составляет 1,744,572.51 USD. В третьей части статьи мы рассмотрим методы поиска уязвимости Signature Malleability, как предотвращение угрозы для собственного криптовалютного кошелька Bitcoin и Ethereum мы можем воспользоваться и применить на примерах различных методов машинного обучение. Также мы воспользуемся списком из “Tutorials Power AI” широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом.

Уязвимость, известная как 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.

<a href="https://pikabu.ru/story/issledovanie_uyazvimosti_signature_malleability_i_komprometatsii_privatnogo_klyucha_v_podpisi_bitcoin_chast_1_12055351?u=https%3A%2F%2Fgithub.com%2Fdemining%2FCryptoDeepTools%2Fblob%2Fmain%2F36SignatureMalleability%2FRicci_Flow_Hidden_Number_Problem.txt&t=36SignatureMalleability%2FRicci_Flow_Hidden_Number_Problem.txt&h=8d4a5f3537f476c2c274c293782ac77ebef5e1b5" title="https://github.com/demining/CryptoDeepTools/blob/main/36SignatureMalleability/Ricci_Flow_Hidden_Numb..." target="_blank" rel="nofollow noopener">36SignatureMalleability/Ricci_Flow_Hidden_Number_Problem.txt</a>

36SignatureMalleability/Ricci_Flow_Hidden_Number_Problem.txt

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 включает следующие шаги:

  1. Генерация дайджеста сообщения: Сначала создается хеш сообщения с помощью алгоритма, например SHA-256.

  2. Выбор случайного числа: Генерируется случайное число, которое используется для создания точки на эллиптической кривой.

  3. Вычисление R: Используя это случайное число, вычисляется координата точки на кривой, которая становится значением R.

  4. Вычисление 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....

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.

  1. Исходное уравнение:

    • Левую часть уравнения можно интерпретировать как производную функции y по x, которая равна произведению двух функций: g(y), зависящей от y, и h(x), зависящей от x.

  2. Переписывание уравнения:

    • Уравнение можно переписать в форме, которая отделяет переменные:

Это позволяет интегрировать обе стороны отдельно.

Это позволяет интегрировать обе стороны отдельно.

После разделения переменных, мы можем в точности интегрировать обе стороны:

Левую сторону относительно 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

<a href="https://pikabu.ru/story/issledovanie_uyazvimosti_signature_malleability_i_komprometatsii_privatnogo_klyucha_v_podpisi_bitcoin_chast_1_12055351?u=https%3A%2F%2Fyoutu.be%2FisWxfa3PeHU%3Ft%3D53&t=%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%20%D1%81%20%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9%20%D0%BA%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8&h=f7e2dd5061e6aa8a214133c5bf803d50f2178c5c" title="https://youtu.be/isWxfa3PeHU?t=53" target="_blank" rel="nofollow noopener">Видео с привязкой ко времени</a>

Видео с привязкой ко времени

Воспользуемся инструментом DarkSignature чтобы получить поддельные данные значение R, S, Z для транзакции алгоритма ECDSA. В поле "Input date" вводим публичный ключ Биткоин Адреса 049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461 и получаем данные значение R, S, Z в количестве будет составлять 32 транзакции Биткоина.

<a href="https://pikabu.ru/story/issledovanie_uyazvimosti_signature_malleability_i_komprometatsii_privatnogo_klyucha_v_podpisi_bitcoin_chast_1_12055351?u=https%3A%2F%2Fyoutu.be%2FisWxfa3PeHU%3Ft%3D67&t=%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%20%D1%81%20%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9%20%D0%BA%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8&h=3c9eb35b1219d5c18d14128d3805831b5062dc6e" title="https://youtu.be/isWxfa3PeHU?t=67" target="_blank" rel="nofollow noopener">Видео с привязкой ко времени</a>

Видео с привязкой ко времени

Применим получение поддельные данные значение 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

<a href="https://pikabu.ru/story/issledovanie_uyazvimosti_signature_malleability_i_komprometatsii_privatnogo_klyucha_v_podpisi_bitcoin_chast_1_12055351?u=https%3A%2F%2Fyoutu.be%2FisWxfa3PeHU%3Ft%3D94&t=%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%20%D1%81%20%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9%20%D0%BA%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8&h=22d1e08f740c48b0b629a25da299327290da7632" title="https://youtu.be/isWxfa3PeHU?t=94" target="_blank" rel="nofollow noopener">Видео с привязкой ко времени</a>

Видео с привязкой ко времени

Вторая часть статьи

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества