Bit-flipping attack на Wallet.dat: Риски использования AES-256-CBC грозит утечкой закрытых ключей Bitcoin Core: [Часть №1]
В программе Bitcoin Core для защиты пароля кошелька используется симметричный криптографический алгоритм AES-256-CBC. Этот алгоритм применяется для шифрования файла кошелька (wallet.dat), где хранятся закрытые ключи пользователя. Степень защиты обеспечивается 256-битным ключом, который создается из пароля пользователя. Также для генерации ключей Bitcoin Core использует криптографию на основе эллиптических кривых, а именно кривую secp256k1, которая лежит в основе создания публичных и приватных ключей транзакций.
AES-256-CBC и не хранит пароль напрямую, а использует его для генерации ключа шифрования. Однако в исследовании отмечается, что в реализации Bitcoin Core отсутствует смена ключа шифрования закрытых ключей, что может снижать защиту при повторном использовании пароля.
AES-256-CBC (Advanced Encryption Standard с длиной ключа 256 бит в режиме сцепления блоков — CBC, Cipher Block Chaining) — один из наиболее распространённых алгоритмов симметричного шифрования для защиты информации.
Принято считать, что AES-256-CBC при определенных комбинациях уязвима к различным атакам. Разберём основной вид атаки такие как Bit-flipping attack , которые применимы к AES-256-CBC.
При Bit-flipping attack AES-256-CBC не обеспечивает контроль целостности, что делает возможным модификацию шифротекста для контролируемого изменения расшифрованных данных. Это применимо, например, при реализации авторизации, где взломщик может изменить права доступа или другие параметры, просто изменив определённые биты в шифротексте
Как Bit-flipping Attack влияет на безопасность кошелька Bitcoin Core
Bit-flipping Attack в основном влияет на режим шифрования CBC (Cipher Block Chaining) и работает за счёт уязвимости режима к контролируемому изменению битов в зашифрованном сообщении. В CBC каждый блок шифротекста зависит от предыдущего блока и плейнтекста через операцию XOR, поэтому изменение одного бита в зашифрованном блоке приводит к предсказуемому изменению соответствующих битов в расшифрованном тексте следующего блока.
Процесс работы Bit-flipping Attack:
При расшифровке блока шифротекста Ci происходит операция XOR с предыдущим блоком шифротекста Ci-1, чтобы получить исходный текст Pi.
Если атакующий изменит один или несколько битов в блоке Ci-1, то при расшифровке изменится соответствующий бит в блоке Pi, управляемый изменениями в Ci-1.
При этом блок Ci после изменений становится некорректным и при расшифровке будет повреждён, но изменение в предыдущем блоке позволяет повреждать (манипулировать) расшифрованным текстом управляемым образом в следующем блоке.
Это манипулятивная расшифровка влияет на безопасность криптографического алгоритма AES-256-CBC которую использует кошелек Bitcoin Core:
Такая манипуляция позволяет злоумышленнику в некоторых случаях менять расшифрованные данные без знания ключа, например, изменять параметры доступа, права или другие данные, если не применяется отдельный механизм аутентификации и проверки целостности.
Битфлип-атака на CBC демонстрирует его «модифицируемость» (malleability), то есть отсутствие встроенной защиты целостности данных.
В реальных системах атака эффективна, если нет дополнительной защиты — такой как HMAC или использование AEAD режимов (например, AES-GCM), которые обеспечивают аутентификацию и предотвращают изменение данных без обнаружения.
Опасность неиспользования проверки целостности данных вместе с режимом AES-256-CBC связана с тем, что CBC сам по себе не обеспечивает защиту от модификации зашифрованного сообщения. Это делает возможными битфлип-атаки, при которых злоумышленник может контролируемо изменить зашифрованные данные без знания ключа.
Важно отметить что атакующий перебирает байты, контролируя изменения в шифротексте и анализируя ответы системы, постепенно восстанавливая оригинальный пароль в бинарном виде, особым образом изменяя блоки.
В итоге, восстановив пароль, злоумышленник может разблокировать кошелёк через команду Bitcoin Core walletpassphrase и получить приватные ключи командой dumpprivkey.
AES256CBCEncrypt и AES256CBCDecrypt для работы в режиме CBC (Cipher Block Chaining)
Функция файла aes.cpp в кошельке Bitcoin Core — обеспечение криптографического шифрования и дешифрования данных с использованием алгоритма AES-256, также функция файла aes.cpp реализует классы AES256Encrypt и AES256Decrypt для блочного шифрования/дешифрования данных размером 16 байт по алгоритму AES-256. Исходный код выполняет основные задачи инициализация контекста шифрования/дешифрования с заданным приватным ключом. Наши наблюдение в процессе криптоанализа выявили нарушение в работе режима CBC (Cipher Block Chaining): где применение XOR к каждому блоку с предыдущим (или IV для первого блока), определяет слабую криптостойкость к общему стандарту AES к которому злоумышленник может применить Bit-flipping Attack. Данная криптографическая уязвимость связана с неправильным использованием вектора инициализации (IV) в режиме CBC (Cipher Block Chaining).
В коде функции CBCEncrypt (в строке №57):
memcpy(mixed, iv, AES_BLOCKSIZE);
IV копируется в локальный массив mixed и далее используется для XOR с первым блоком данных. Однако IV передается в конструктор AES256CBCEncrypt и копируется один раз в поле класса iv (в строке №121):
В CBC режиме шифрования IV должен быть либо случайным, либо уникальным и не повторяться для разных сообщений с одним ключом, чтобы обеспечить безопасность. Если IV фиксирован и не меняется, это открывает уязвимость — повторяющаяся структура позволит злоумышленнику провести атаки по выявлению закономерностей в зашифрованных данных, где хранятся секретные данные как пароли и приватные ключи кошелька Bitcoin Core.
Bit-flipping attack на файл wallet.dat реализован через XOR с числом паддинга, что отличается от стандарта PKCS#7, где паддинг просто добавляется как отдельные байты. Такой XOR-подход не является безопасным и может привести к неверному шифрованию и потенциальным уязвимостям при расшифровке. Также в функции CBCDecrypt проверка и удаление паддинга реализована нестандартно и может быть уязвимой к таким типам атаки как: Bit-flipping attack & Padding oracle attack
Практическая часть
Перейдем к практической части из теории нам известна уязвимость с помощью которого можно реализовать Bit-flipping attack на файл wallet.dat , так как уязвимость возникает из-за использования фиксированного IV и нестандартной реализации паддинга в функциях CBCEncrypt и CBCDecrypt. Эти моменты критичны для безопасности режима CBC (Cipher Block Chaining) и могут быть истолкованы как «в строке с memcpy(mixed, iv, AES_BLOCKSIZE);» в функции CBCEncrypt и в блоке обработки паддинга.
Рассмотрим пример с использованием Bitcoin-кошелька по адресу: 16A5RFckRNW6fZzfjCGSneD3PApACLRwix. В данном кошельке были утеряны монеты на сумму 105.68557389 BTC, что на август 2025 года эквивалентно примерно 12,134,500 USD.
Для демонстрации атаки в ознакомительных целях используем инструменты и среды, такие как Jupyter Notebook или Google Colab. Сначала загружаем зашифрованный файл wallet.dat, содержащий информацию кошелька. Далее пошагово изменяем отдельные биты в блоках шифротекста и отправляем модифицированные версии системе для анализа её реакции.
Этот метод атаки, известный как Bit-flipping attack в контексте wallet.dat , представляет собой не просто случайное изменение данных, а сложный поэтапный процесс, при котором отбираются корректные изменения с учётом реакции системы на правильность паддинга (выравнивания) при расшифровке данных с использованием AES-256-CBC.
Используя такую стратегию, инструменты строят бинарное значение пароля, что в итоге позволяет получить пароль для расшифровки wallet.dat и доступ к Bitcoin Core без знания первоначального ключа шифрования. Эта атака основана на использовании уязвимости, называемой Padding Oracle Attack, которая эксплуатирует информацию об ошибках выравнивания при дешифровке, предоставляемую системой.
Основные инструменты и команды, применяемые для таких атак:
Google Colab (Colaboratory) — это облачная платформа, предоставляющая интерактивные Jupyter-ноутбуки, где можно писать и запускать код для различных языков программирование. Он особенно полезен для анализа данных, машинного обучения и работы с Snyc AI, так как предоставляет бесплатный доступ к мощным вычислительным ресурсам, таким как GPU и TPU. Важным преимуществом является возможность выполнять системные команды, как в обычном терминале Linux, через ячейки с префиксом ! для интеграции с внешними утилитами и скриптами.
Google Colab
Bitcoin Core и установка bitcoind & bitcoin-cli
Обновление списков пакетов и установка системных зависимостей
!apt-get update
!apt-get install -y software-properties-common
Примечание:
Первая команда обновляет локальный индекс доступных пакетов и их версий в системе Ubuntu, чтобы обеспечить актуальность данных при установке программ.
Вторая команда устанавливает пакет software-properties-common, который предоставляет инструменты управления дополнительными репозиториями и зависимостями.
C научным пониманием это подготовительный этап типичен при работе в любой Linux-среде, включая виртуальные. Обновление списков пакетов обеспечивает, что последующая установка программ будет использовать последние стабильные версии и зависимости, что важно для безопасности и совместимости ПО.
Добавление репозитория Bitcoin Core и установка bitcoind (вместе с bitcoin-cli)
Альтернативный способ: загрузка и распаковка бинарных файлов Bitcoin Core из архива
!wget https://bitcoin.org/bin/bitcoin-core-0.18.0/bitcoin-0.18.0-x...
!tar -xzf bitcoin-0.18.0-x86_64-linux-gnu.tar.gz
Примечание:
add-apt-repository добавляет официальный PPA (Personal Package Archive) Bitcoin Core в систему — источник актуальных пакетов Bitcoin.
После обновления индекса пакетов система устанавливает пакет bitcoind, который включает в себя демона биткоина (Bitcoin server) и клиентскую утилиту bitcoin-cli.
Загружает архив с предсобранными бинарными файлами Bitcoin Core указанной версии.
Распаковывает архив, извлекая байтовые файлы, включая bitcoind и bitcoin-cli.
С научной понимании Bitcoind — это полнофункциональный узел Bitcoin с серверной частью, который валидирует транзакции и блоки, поддерживает сеть и хранит блокчейн локально. bitcoin-cli — клиентский инструмент для взаимодействия с демоном через JSON-RPC интерфейс, управляя кошельками, транзакциями и запросами к блокчейну. Установка из PPA гарантирует корректную интеграцию и обновления. Такой способ позволяет получить необходимое программное обеспечение без зависимости от системных репозиториев, что бывает важно, если требуется определённая версия или если PPA недоступен в текущей среде. Это классический метод распространения программного обеспечения с гарантированным контролем версии и среды.
Команда cd переключается в директорию с бинарными файлами.
Выполнения команды — смена текущей рабочей директории на /content/bitcoin-0.18.0/bin, что подтверждается выводом пути.
cd bitcoin-0.18.0/bin/
Описание и действие:
Команда cd (от английского «change directory» — сменить директорию) используется в операционных системах семейства Unix/Linux и в средах терминала, таких как Google Colab, для перехода из текущей рабочей директории в указанную директорию. В данном случае команда меняет текущую папку на директорию bin, которая находится внутри каталога bitcoin-0.18.0. Это позволяет перейти в папку, где, вероятно, находятся исполняемые файлы или скрипты, связанные с программным обеспечением Bitcoin версии 0.18.0.
В контексте операционных систем, терминал или командная строка — это интерфейс, через который пользователь взаимодействует с системой, вводя текстовые команды. Текущая рабочая директория — это та папка в файловой системе, в рамках которой по умолчанию выполняются все команды, если не указано иное.
Команда cd позволяет изменять эту рабочую директорию, что необходимо для организации удобного доступа к нужным файлам и папкам.
Путь bitcoin-0.18.0/bin/ может быть как относительным (от текущего каталога), так и абсолютным (начинающимся с корня /). В Google Colab корневая директория по умолчанию — /content/, и при работе с проектами часто структура каталогов отражает вложенность программного обеспечения или данных.
Перемещение в директорию bin обычно связано с необходимостью получения доступа к бинарным файлам (исполняемым программам), которые расположены в этом каталоге. Это позволяет выполнять команды или скрипты, входящие в состав программного продукта, например, запускающих узлы биткоина, тестирующих сеть или работающих с кошельками.
Таким образом, выполнение команды cd bitcoin-0.18.0/bin/ задаёт контекст выполнения для дальнейшей работы с компонентами Bitcoin Core 0.18.0 внутри Google Colab.
Проверка установки bitcoin-cli
!./bitcoin-cli --version
Описание:
Запускает команду bitcoin-cli из локальной директории для проверки работоспособности и версии утилиты. При правильном выполнении выведет строку с информацией о версии клиента.
Запуск бинарных файлов из локальной директории — стандартная практика при ручной установке ПО. В Colab и других облачных средах это удобно для использования специфичных версий без системной установки.
Контроль версии важен для совместимости с сетевым протоколом и ожидаемой функциональностью, а также для отладки при возникновении ошибок.
Результат:
Bitcoin Core RPC client version v0.18.0
Результат выводит версию установленной утилиты bitcoin-cli, проверяя успешность установки и доступность команды для вызова.
Загрузка файлов wallet.dat & aes.cpp
Запустим команду для загрузки файла wallet.dat
Описание и действие:
Команда wget служит для скачивания файлов из интернета по протоколу HTTPS.
Здесь мы загружаем файл wallet.dat – это бинарный файл, хранящий зашифрованные приватные ключи, адреса и другую критически важную информацию Bitcoin Core кошелька.
Файл wallet.dat зашифрован с использованием стандарта AES-256-CBC, где приватные ключи защищены с помощью мастер-ключа и пароля.
Такой файл используется для управления и хранения средств в Bitcoin. В ходе научного исследования и атак, например padding oracle, этот файл анализируется и модифицируется для восстановления утерянных паролей или ключей.
В научное понимание файл wallet.dat играет роль защищённого контейнера для криптографических ключей, и его целостность и конфиденциальность обеспечиваются алгоритмами шифрования, основанными на AES. Загрузка файла позволяет работать с реальными данными кошелька, что необходимо для исследований уязвимостей и тестирования методов криптоанализа, например, подобных атакам на padding oracle.
Запустим команду для загрузки файла алгоритма aes.cpp
Описание и действие:
Команда загружает исходный файл aes.cpp, содержащий исходный код реализации AES алгоритма шифрования, используемый в Bitcoin Core.
Этот файл важен для понимания того, как именно происходит шифрование и дешифровка данных в wallet.dat.
Исходный код помогает исследователям понять логику применения AES-256-CBC, применение выравнивания (padding), фиксирование ошибок и особенности реализации криптоалгоритмов.
Такой код можно использовать в Jupyter Notebook или Google Colab для написания собственных скриптов дешифровки или моделирования атак.
В научное понимание криптоанализ исходного кода AES алгоритма позволяет глубоко понять принципы работы симметричного шифрования в Bitcoin Core, особенности режима CBC (Cipher Block Chaining), важность корректного паддинга и потенциальные уязвимости, которые могут использоваться при атаке padding oracle. Это способствует более научно обоснованной разработке методов восстановления паролей и ключей.
Общие научные сведения по контексту:
AES-256-CBC: Способ симметричного блочного шифрования, где применяются операции XOR с предыдущим зашифрованным блоком (CBC — Cipher Block Chaining) для повышения безопасности. Паддинг (выравнивание) данных на последнем блоке обеспечивает корректную длину входа.
wallet.dat: Хранит зашифрованные приватные ключи и метаданные. Пароль пользователя используется для генерации ключа шифрования мастер-ключа с помощью функции, как EVP_BytesToKey OpenSSL, что увеличивает стойкость шифра.
Padding Oracle Attack: Хакерская атака, эксплуатирующая наличие подробных сообщений об ошибках при неверном паддинге, что постепенно позволяет взломать ключ шифрования.
Анализ исходного кода aes.cpp: Ключ для понимания реализации шифра и корректного построения атак, изучения уязвимостей и разработки средств их предотвращения.
Запуск биткоин-демона bitcoind с указанием кошелька
!./bitcoind -daemon -wallet=/content/bitcoin-0.18.0/bin/wallet.dat
Запускаем биткоин-демон в фоновом режиме (-daemon) и указывает использовать конкретный файл кошелька wallet.dat, расположенный в указанном пути. Bitcoind — основной компонент для взаимодействия с сетью Bitcoin. Демон обрабатывает все сетевые операции, хранит полный локальный блокчейн и управляет кошельком. Запуск с указанием файла wallet.dat позволяет работать с конкретным зашифрованным кошельком (ключами и адресами), что важно для анализа состояния и управления средствами.
Запуск демона Bitcoin Core (bitcoind) в фоновом режиме. Демон — это серверная часть программного обеспечения Bitcoin Core, которая синхронизируется с сетью Биткоин, загружает блокчейн, обрабатывает транзакции и поддерживает работу узла в сети. Ключ -daemon означает, что процесс запустится в фоновом режиме и не будет блокировать консоль, позволяя вам продолжать работу в терминале.
Результат в терминале обычно минимальный — команда запускается, и управление сразу возвращается пользователю, без дополнительных сообщений. Логи и процессы работы демона будут записываться в системные логи или в файлы логов Bitcoin Core в каталоге данных (обычно ~/.bitcoin). Если запуск удался, процесс bitcoind будет активен в фоне и поддерживать сетевое взаимодействие с другими узлами блокчейна.
Научное понимание: запуск демона bitcoind является ключевым этапом в работе полноценного узла (full node) сети Биткоин. Узел обеспечивает децентрализованность и безопасность сети, проверяя все транзакции и блоки с использованием криптографических алгоритмов и протоколов консенсуса. Фоновый режим позволяет узлу непрерывно поддерживать актуальное состояние блокчейна, выполнять валидацию данных и откликаться на запросы через JSON-RPC интерфейс для взаимодействия с другими программами и пользователем.
./bitcoind — запускает исполняемый файл демона bitcoind из текущего каталога (использование ./ указывает, что файл находится в текущей директории).
-daemon — параметр запуска, переводящий процесс в фоновый режим (демон) без блокировки терминала.
Команда ./bitcoind -daemon позволяет развернуть работающий Bitcoin узел, поддерживающий сеть, с автоматической синхронизацией данных и откликом на RPC-запросы, что является фундаментом для работы с криптовалютой на локальной машине Google Colab.
Данный набор команд в Google Colab предоставляет полный цикл установки и запуска инструментов Bitcoin Core (bitcoin-cli и bitcoind), необходимых для управления криптовалютой и проведения исследований (в том числе атак или восстановления доступа), в условиях облачной вычислительной среды. Основываясь на этих шагах, исследователь получает программный интерфейс для взаимодействия с сетью и локальным wallet.dat через RPC команды, что критично для научных и практических задач в криптографии и блокчейне.
Инструмент для криптоанализа Snyc AI
Загрузка и установка инструмента Snyc AI
Подробное описание всех команд и действий терминала
Команды:
Команда wget — это мощная консольная утилита для загрузки файлов из сети через протоколы HTTP, HTTPS и FTP. Здесь она используется для загрузки архива neuralnet_tools.zip с сервера по указанному URL. Команда wget работает в неинтерактивном режиме, что позволяет скачивать файлы без участия пользователя, включая возможность возобновления прерванных загрузок. Это особенно важно при работе с большими файлами или нестабильным интернет-соединением. Его кроссплатформенность и простота делают wget незаменимым инструментом для автоматизации и управления загрузками в научных вычислениях и обработки данных.
Эта команда извлекает все файлы из neuralnet_tools.zip:
!unzip neuralnet_tools.zip
Команда unzip распаковывает содержимое ZIP-архива в текущую рабочую директорию. Формат ZIP широко используется для сжатия и архивирования данных без потерь, что помогает экономить дисковое пространство и облегчать передачу больших наборов файлов. Распаковка архива позволяет получить доступ к инструментам и скриптам, которые находятся внутри, для дальнейшего использования в задачах анализа или декодирования. Этот этап — стандартная процедура при подготовке программного обеспечения к использованию в средах разработки и исследовательских проектах.
Запустим команду ls для быстрого и удобного просмотра:
ls
Команда ls выводит список файлов и папок в текущей директории. Эта базовая Unix-команда служит для проверки содержимого каталога, помогая убедиться в успешной загрузке и распаковке архива. В контексте научных исследований или программирования она облегчает навигацию по файловой системе и подтверждение наличия нужных данных или инструментов.
Запуск инструмента Snyc AI:
!./snyc
Запуск инструмента Snyc AI в Google Colab позволяет использовать алгоритмы глубокого сканирования и восстановления данных, таких как секретные и приватные ключи для различных криптокошельков, с помощью методов искусственного интеллекта. Такие технологии основаны на машинном обучении и нейронных сетях, что обеспечивает высокую точность и безопасность при криптоанализе критически важных данных.
Если будете запускать эти команды в Google Colab, важно помнить, что:
Префикс ! позволяет выполнять системные (shell) команды непосредственно из ячеек программирования. Это делает Colab мощной платформой для гибридного использования различных языков программирование и командной строки.
При работе с внешними архивами и утилитами полезно проверять права доступа и содержимое файлов для безопасности и совместимости.
Инструмент Snyc AI является специализированным программным обеспечением для анализа криптографических данных, использующим современные возможности ИИ и нейросетей для повышения эффективности и надежности.
Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.