В этой статье мы разберем транзакции биткоина и научимся очень быстро парсить RawTX из сети блокчейн в папку Google Drive все это поможет нам лучше понять, как работает транзакции биткоина и каково все её содержимое в сети блокчейн. Для начала нам нужно знать, что все транзакции биткоина хранятся в [txid].
txid - это идентификатор транзакции, хранящиеся в блокчейне биткоина, RawTX хранится в форме двойного хеширования.
Это означает, что RawTX дважды прошла через алгоритм SHA256, чтобы получить хэш транзакции, который мы видим в блокчейне.
но как мы знаем в одном Биткоин Адресе могут быть очень много транзакции [txid] и это является основной проблемой на поиск которой уходит много времени, нагружает наш ПК и занимает много места на диске.
Чтобы решить эту проблему достаточно воспользоваться API сайта https://chain.so/api/
И так, мы указываем один Биткоин Адрес в bash-скрипт: getrawtx.sh «address» и дальше извлекаем весь предыдущий выходной хэш — все входы ссылаются на выход (UTXO)
UTXO - это (неизрасходованный выход транзакции) который будет потрачен на новом входе. Хэш-значение этого UTXO сохраняется в обратном порядке.
В результате весь неизрасходованный выход транзакции будет сохранен в файле: «RawTX.json»
Утилита grep сохраняет все идентификаторы транзакции "txid" в один общий файл index2.json все содержимое сохраняется в файл: index2.jsonУдаляем index.jsonС помощью утилиты sed убираем префикс "txid" и кавычки запятыеИтоговый результат в файле: index2.jsonСоздаем Python-скрипт используя утилиты echoЗапускаем Python-скрипт fileopen.pyПосле запуска Python-скрипта fileopen.py создается Bash-скрипт rawscript.shУдаляем index2.jsonПолучаем права для Bash-скрипта rawscript.sh и успешно запускаем!Удаляем скрипты fileopen.py // rawscript.shВсе транзакции сохранились в файле: «RawTX.json»
Какое преимущество получаем мы в итоге:
парсинг RawTX работает быстро и все сохраняется в один файл в папке Google Drive
в отличие от команды getrawtransaction «txid», в консоли Bitcoin Сore нам не нужно вводить «txid» достаточно ввести только Биткоин Адрес getrawtx.sh «address»
В настоящее время машинное обучение и глубокое обучение стали самой горячей тенденцией в индустрии компьютерных наук. Многие разработчики создают потрясающие проекты с помощью Google Colab.
Что такое Google Colab?
Google Colab был разработан Google для предоставления бесплатного доступа к GPU и TPU. Google Colab можно определить как улучшенную версию Jupyter Notebook.
Возможности Google Colab
Google Colab предоставляет множество интересных функций, которые предлагает любая современная IDE
Вы можете писать и запускайте код на Python 3 без локальной установки.
Вы можете импортировать наборы данных из внешних источников, таких как Kaggle.
Вы можете сохранять свои работы на Google Диске.
Вы можете импортировать свои работы с Google Диска.
Так же Google Colab предоставляет бесплатный облачный сервис, GPU и TPU и интеграцию с PyTorch, Tensor Flow, Open CV, но самое главное и важное вы можете импортировать или публиковать свои проекты напрямую из/в GitHub.
наверно это самый крупный взлом за всю историю существования Биткоина, так как баланс монет составлял 69 369 BTC в переводе на доллары сумма превышало более $1 млрд.
Этот нашумевший биткоин кошелек 1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx был привязан к маркетплейсу даркнета который был закрыт в 2013 году и его создатель Росс Ульбрихт получил двойной пожизненный срок без возможности УДО.
В 2019 году на профильных хакерских форумах распространили зашифрованный файл wallet.dat, который мог быть связан с этим кошельком, но с 2019 года прошло три года и уже потихоньку всплывает правда о том что к взлому была применена решетчатая атака "LATTICE ATTACK".
Если покопаться в транзакциях Биткоин кошелька 1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx можно увидеть кое-что интересное.
Для этого мы решили дополнить наши исследования в этой области.
Данный видеоматериал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN
Начнем с того что алгоритм цифровой подписи на эллиптических кривых(ECDSA) — это распространенная схема цифровой подписи, которую мы видим во многих наших обзорах кода. Он обладает некоторыми желательными свойствами, но также может быть очень хрупким для восстановления закрытого ключа с помощью атаки по побочному каналу, раскрывающей менее одного бита секретного одноразового номера.
ECDSA — это особая форма алгоритма цифровой подписи (DSA). DSA — это довольно распространенная схема цифровой подписи , которая определяется тремя алгоритмами: генерация ключа, подпись и проверка. Алгоритм генерации ключей генерирует закрытый и публичный ключи;закрытый ключ отвечает за создание подписей;а публичный ключ отвечает за проверку подписей. Алгоритм подписи принимает в качестве входных данных сообщение и закрытый ключ и создает подпись. Алгоритм проверки принимает в качестве входных данных сообщение, подпись и публичный ключ и возвращает значение true или false, указывая, является ли подпись действительной.
DSA определяется для любой математической группы, и эта схема безопасна до тех пор, пока проблема дискретного логарифмирования сложна для этой группы. Обычно используемая группа представляет собой целые числа по модулю простого числа p .
Наряду с этой группой у нас будет генератор группы g и некоторая криптографически безопасная хэш - функция H. Мы можем предположить, что p , g и H будут общеизвестны.
Генерация ключей работает, сначала случайным образом выбирая значение x из целых чисел по модулю p . Затем вычисляется значение y = g^x mod p
Закрытый ключ подписи имеет значение x , а публичный ключ — y . Ключ подписи должен храниться в секрете, поскольку именно он позволяет делать подписи.
Алгоритм подписи создает подпись из сообщения m и секретного ключа x . Сначала генерируется случайный элемент группы k . Это известно как одноразовый номер , что важно, когда речь идет об атаках.
Затем вычисляются значения r = g^k mod p и s = ( k^-1 ( H ( m ) + xr )) mod p
Здесь k^- 1 — обратная группа, а H ( m ) — результат вычисления хэша mи интерпретация результата как целое число по модулю p .
Подпись определяется как пара ( r , s ). (Примечание: если одно из значений r или sравно 0, алгоритм перезапускается с новым значением k ).
Алгоритм проверки получает на вход подпись ( r , s ), сообщение m и публичный ключ y . Пусть ŝ = s^-1 , тогда алгоритм выдает истину тогда и только тогда , когда r , s ≠ 0 и r = ( g H ( m ) y r ) ŝ .
Эта проверочная проверка работает, потому что g^H( m ) y^r = g^H(m)+ xr = g^ks, и поэтому (g^H(m)y^r)^ŝ = g^k = r
Схема цифровой подписи считается безопасной, если ее невозможно подделать .
Не подделываемость имеет формальное криптографическое значение, но на высоком уровне это означает, что вы не можете создавать подписи, не зная секретного ключа (если только вы не скопировали уже существующую подпись, созданную из секретного ключа). Доказано, что DSAневозможно подделать при допущении дискретного журнала .
DSA определяется над математической группой. Когда DSA используется с группой эллиптических кривых в качестве этой математической группы, мы называем это ECDSA. Группа эллиптических кривых состоит из точек эллиптических кривых, которые представляют собой пары ( x , y ), которые удовлетворяют уравнению y^2 = x^3 + ax + b для некоторых a , b . Для этого сообщения в блоге все, что вам нужно знать, это то, что, используя эллиптические кривые, вы можете определить конечную группу, что означает, что вы получаете генератор группы, g(точка эллиптической кривой), и операции сложения и скалярного умножения точно так же, как вы можете с целыми числами. Поскольку они образуют конечную группу, генератор,g , будет иметь конечный порядок, p. Этот пост в блоге не будет объяснять или требовать, чтобы вы знали, как работают эти операции с эллиптическими кривыми.
ECDSA работает так же, как DSA, но с другой группой. Секретный ключx по-прежнему будет случайным значением из целых чисел по модулю p . Теперь публичный ключ y по- прежнему вычисляется как y = g^x , за исключением того, что теперь g является точкой эллиптической кривой. Это означает, что y также будет точкой эллиптической кривой (раньше y был целым числом по модулю p ). Еще одно отличие заключается в том, как мы вычисляем значение r . Мы по-прежнему генерируем случайный одноразовый номер k как целое число по модулю p , как и раньше. Мы вычислим g^k , но опять же,g — точка эллиптической кривой, и, следовательно, g^k — тоже. Следовательно, мы можем вычислить ( x^k , y^k ) = g^k и установить r = x^k . Теперь значение s можно вычислить, как и раньше, и мы получим нашу сигнатуру ( r , s ), которая по-прежнему будет целым числом по модулю p , как и раньше. Чтобы проверить, нам нужно сделать поправку на тот факт, что мы вычислили r немного по-другому.
Итак, как и прежде, мы вычисляем значение ( g^H(m)y^r)^ŝ , но теперь это значение является точкой эллиптической кривой, поэтому мы берем x-координату этой точки и сравниваем ее с нашим значением r .
Восстановление секретных ключей из повторно используемых одноразовых номеров NONCES
Теперь, когда мы понимаем, что такое ECDSA и как он работает, давайте продемонстрируем его хрупкость. Опять же, поскольку это схема цифровой подписи, крайне важно, чтобы секретный ключ никогда не раскрывался никому, кроме лица, подписывающего сообщение.
Однако, если подписывающее лицо когда-либо выпускает подпись, а также выпускает использованный одноразовый номер, злоумышленник может немедленно восстановить секретный ключ.
Скажем, я освобождаю подпись ( r , s ) для сообщения m и случайно обнаруживаю, что использовал одноразовый номер k .
Поскольку s = ( k^-1 ( H ( m ) + xr )), мы можем легко вычислить секретный ключ:
s = (k^-1(H(m) + xr))
ks = H(m) + xr
ks – H(m) = xr
x = r^-1(ks – H(m))
Следовательно, подписывающая сторона должна не только хранить в секрете свой секретный ключ, но и все свои одноразовые номера, которые они когда-либо генерировали, в секрете.
Даже если подписывающий держит в секрете каждый одноразовый номер NONCES, если он случайно повторит один одноразовый номерNONCES (даже для разных сообщений), секретный ключ также может быть немедленно восстановлен.
Пусть ( r , s 1 ) и ( r , s 2 ) будут двумя подписями, созданными на сообщениях m 1 и m 2 (соответственно) из одного и того же одноразового номера, k - поскольку они имеют один и тот же одноразовый номер, значения r будут одинаковыми, так что это очень легко обнаруживается злоумышленником:
s1 = k^-1(H(m1) + xr) and s2 = k^-1(H(m2) + xr)
s1 – s2 = k^-1(H(m1) – H(m2))
k(s1 – s2) = H(m1) – H(m2)
k = (s1 – s2)^-1(H(m1) – H(m2))
После того, как мы восстановили одноразовый номер k , используя приведенную выше формулу, мы можем восстановить секретный ключ, выполнив ранее описанную атаку.
Давайте на минутку переварим это.
Если одноразовый номер NONCES для подписи когда-либо раскрывается, секретный ключможет быть немедленно восстановлен, что нарушает всю нашу схему подписи.
Кроме того, если два одноразовых номера когда-либо повторяются, независимо от того, что представляют собой сообщения, злоумышленник может легко обнаружить это и немедленно восстановить секретный ключ, снова нарушив всю нашу схему.
Данный видеоматериал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN