Brain wallets: проверяем топ популярных паролей на живых Bitcoin-кошельках

loropiana

Premium
Регистрация
12.01.26
Сообщения
19
Deposit USD
0
Данный эксперимент проделан исключительно в формате развлечения выходного дня. Всё, что вы здесь увидите — результат чистого любопытства и желания покопаться в больших данных. Никакие приватные ключи не публикуются, только публичная информация об адресах.

Что такое brain wallet?​

Для тех, кто не в курсе: brain wallet (мозговой кошелек) — это способ хранения криптовалюты, где приватный ключ генерируется из пароля или фразы, которую пользователь держит в голове. Никаких файлов, никаких бумажек — просто запомнил фразу и пользуешься.

Звучит удобно? Да. Безопасно? А вот это большой вопрос.

Суть в том, что злоумышленник может перебирать популярные фразы, вычислять из них адреса и проверять, есть ли на них средства. Именно это мы и решили проверить в наш уикенд.

Подробнее можно почитать в классической статье:
Please, Вход or Регистрация to view URLs content!


Выбор словаря​

Очевидным выбором стал легендарный Rockyou — сборник паролей, утекший много лет назад с одноименного сайта. Это классика жанра, настоящий "золотой фонд" самых популярных паролей.

Но была одна важная оговорка...

Подготовка данных: адский файл на 155 ГБ​

Скачанный ZIP-архив весил 45 ГБ. В распакованном виде нас ждал текстовый файл размером 155 ГБ.

Код:
Please, Вход or Регистрация to view codes content!

При попытке открыть его через less я получил уведомление, что файл "выглядит как бинарный". И действительно — внутри оказалось приличное количество мусора: бинарные символы, нечитаемые последовательности, явно битые строки.

Первая чистка​

Запустил простую фильтрацию, убирающую всё, что не является печатными символами:

Код:
Please, Вход or Регистрация to view codes content!

Это сократило размер до 144 ГБ. Уже лучше, но внутри всё ещё полно мусора: строки с пробелами, совсем короткие обрывки, явно не похожие на пароли.

Вторая чистка​

Решил оставить только строки без пробелов длиной от 8 до 40 символов — именно такие чаще всего используются как пароли:

Код:
Please, Вход or Регистрация to view codes content!

И вот тут случилась магия: 25 ГБ.

25 гигабайт приемлемого вордлиста! 🔥

Финальная статистика​

Посчитаем количество строк:

Код:
Please, Вход or Регистрация to view codes content!

1.7 МИЛЛИАРДА потенциальных паролей.

Для понимания масштаба: если выписывать их в столбик без остановки, со скоростью 1 строка в секунду, понадобится 54 года.

От паролей к приватным ключам​

Теперь самое интересное. Brain wallet работает так:

Код:
Please, Вход or Регистрация to view codes content!

SHA256 от пароля — это и есть приватный ключ (если он попадает в допустимый диапазон эллиптической кривой secp256k1). Из приватного ключа мы получаем публичный ключ, а из него — адрес кошелька.

Причём для Bitcoin существует несколько форматов адресов:

Screenshot_1.png


Мы решили генерировать все 4 типа для каждого пароля. Почему? Потому что неизвестно, в каком формате создавал кошелёк пользователь. Кроме того, один и тот же приватный ключ может использоваться для разных типов адресов.

Инфраструктура: RTX 4090 + Yandex Cloud​

Для генерации адресов использовали связку:

  • RTX 4090 — для расчётов на GPU
  • Yandex Cloud Object Storage — для хранения промежуточных и финальных данных
Процесс разбили на чанки по 1 миллиону SHA256-хешей. Всего получилось 1711 чанков.

Производительность​

Скорость генерации на RTX 4090 впечатляет: более 50 000 SHA256 → адресов в секунду. Весь словарь в 1.7 млрд паролей был обработан за ~10 часов.

Параллельная загрузка в S3 позволила не хранить все данные локально — каждый чанк сразу отправлялся в облако.

Формат хранения​

Для каждого чанка создавался CSV-файл с колонками:

Код:
Please, Вход or Регистрация to view codes content!

Общий объём сгенерированных адресов: 203 ГБ.

База для сверки: живые кошельки с Loyce​

Дальше начинается самое интересное. Мы взяли базу всех Bitcoin-адресов, на которых прямо сейчас есть средства — актуальный дамп с сайта
Please, Вход or Регистрация to view URLs content!
. Огромное спасибо сообществу за поддержание таких данных в актуальном состоянии!

Это не просто исторические данные — это "живые" кошельки с реальным балансом на момент дампа.
  • Размер файла: 2.14 ГБ
  • Количество адресов: 55 756 988 (ровно столько загрузилось в память)
  • Формат: простой текстовый файл, один адрес на строку

Процесс сверки​

Теперь самое интересное: нужно проверить каждый сгенерированный адрес (а их получилось 1.7 млрд × 4 = ~6.8 млрд адресов) на наличие в базе живых кошельков.

Два подхода к сверке​

Вариант 1: Множество в RAM
  • Загружаем все ~55 млн адресов в set() Python
  • Скорость проверки: O(1), десятки миллионов проверок в секунду
  • Требуется RAM: ~2.6 ГБ (оказалось даже меньше, чем ожидалось!)
Вариант 2: Бинарный поиск
  • Сортируем список адресов
  • Используем bisect для бинарного поиска
  • Скорость: O(log n), миллионы проверок в секунду
  • Требуется RAM: ~1 ГБ
Мы использовали первый вариант как самый быстрый.

Реальный процесс поиска:​

Screenshot_2.png


Screenshot_3.png


🎯 Результаты​

Итак, барабанная дробь...

После обработки 1000 чанков (это 1 миллиард SHA256 хешей, или 4 миллиарда проверенных адресов) мы получили:

Screenshot_4.png


Ноль совпадений.

Ни одного brain wallet'а среди миллиарда самых популярных паролей не нашлось в базе живых кошельков.

Анализ результатов​

Почему так вышло? Давайте разбираться.

1. Brain wallets — это нишевая история​

Технология brain wallet была популярна в самом начале Bitcoin (2011-2013), но быстро сошла на нет после первых взломов. Уже в 2014-2015 годах все крипто-сообщества трубили: НИКОГДА не используйте brain wallet. Вероятно, большинство таких кошельков либо уже опустошены, либо их владельцы перевели средства в более безопасные места.

2. Популярные пароли — не значит "используемые для крипты"​

Люди, которые разбираются в криптовалютах достаточно, чтобы создать кошелёк, скорее всего:

  • Используют генераторы случайных чисел
  • Записывают seed-фразы на бумагу
  • Покупают аппаратные кошельки
Они не будут использовать password123 для хранения денег.

3. Rockyou — слишком старый​

Утечка Rockyou произошла в 2009 году. Даже если кто-то использовал brain wallet в 2011-2012, он вряд ли брал пароль из этого списка — скорее что-то более оригинальное.

4. Масштаб всё ещё мал​

Хотя 1 миллиард паролей звучит внушительно, пространство возможных паролей бесконечно. Даже популярные пароли распределены по степенному закону: топ-100 покрывают ~40%, топ-1000 — ~60%, а дальше хвост становится очень длинным.

🔮 Перспективы поиска: что можно попробовать дальше?​

Нулевой результат — тоже результат. Он показывает, что прямой перебор популярных паролей из Rockyou уже не работает. Но это не значит, что brain wallets не существуют. Просто нужно менять стратегию.

1. Модификация словаря: Leetspeak и символы​

Люди любят "усложнять" пароли заменой букв на похожие символы:

Код:
Please, Вход or Регистрация to view codes content!

Можно автоматически генерировать такие вариации для каждого пароля из Rockyou. Это увеличит словарь в 10-100 раз, но может дать результат.

2. Комбинирование слов​

Многие используют комбинации из двух простых слов:

Код:
Please, Вход or Регистрация to view codes content!

3. Фразы из нескольких слов​

Классические brain wallet'ы часто используют фразы:

Код:
Please, Вход or Регистрация to view codes content!

тут нужны словари фраз а не отдельных слов

4. Комбинированный подход: правильные мутации​

Самый перспективный путь — взять существующий словарь и применить к нему правила мутаций, которые используют хакеры:
  • Добавление цифр в конце (1, 12, 123, 1234, 12345)
  • Добавление года (2020, 2021, 2022, 2023, 2024)
  • Capitalization (Password, PASSWORD)
  • Замена букв на символы (a→@, s→$, o→0)
  • Перестановки
  • Комбинации двух слов
  • Добавление спецсимволов (!, @, #, $, %)
Популярные программы для мутаций:
  • Hashcat — умеет генерировать правильные мутации на GPU
  • John the Ripper — классика жанра
  • Crunch — генерация по маске

​

5. Целевой подход: ищем иголку в стоге сена​

Вместо тотального перебора можно сузить поиск:
  • Только адреса с балансом > 1 BTC — их намного меньше
  • Только старые адреса (2011-2013) — когда brain wallet были популярны
  • Только адреса определённого формата — например, только uncompressed (старые кошельки)

​

6. Технические улучшения​

На RTX 4090 можно достичь скорости 500 млн ключей в секунду при правильной оптимизации на CUDA. Это позволяет перебирать ~40 млрд ключей в день. Уже интереснее.

Оценка перспектив​


Screenshot_5.png


Заключение​

Наш эксперимент показал, что прямой перебор популярных паролей из Rockyou не находит живых brain wallet'ов в 2026 году. Те, кто использовал такие пароли, либо потеряли свои монеты, либо уже давно перевели их в безопасные места.

Однако это не значит, что brain wallets мертвы. Просто они стали сложнее. Люди придумывают более хитрые фразы, используют комбинации слов, добавляют символы. И именно эти мутации — следующая цель для поиска.

Мы выложили все сгенерированные данные в открытый доступ, чтобы сообщество могло продолжать эксперименты. Возможно, именно вы найдёте ту самую комбинацию, которая приведёт к успеху.

P.S. Если вы всё ещё используете brain wallet — даже самый хитрый пароль — срочно переводите средства. Ваш пароль может быть не в Rockyou, но он может быть в следующем словаре.
 

LFS_foreve

Premium
Регистрация
04.05.22
Сообщения
65
Deposit USD
0
В 2018 я делал подобное. Тоже изначально брал базу rockyou (но даже не "чистил" ее), и несколько более актуальных небольших утечек + комбинации пар слов из обычного словаря и они же с мутациями. За основу генератора адресов брал vanitygen, и у меня уже тогда скорости были примерно в 10 раз выше, чем то, что в статье. Базы адресов не было, поэтому пришлось немного модифицировать клиент биткоина, чтобы он создавал список адресов, на которых хоть когда-то был баланс (генерируется это в процессе парсинга блокчейна). Все в формате U_P2PKH. Построил блум-таблицу по этим адресам, и спокойно гонял свой форк vanity пока мне не надоело.

Исследование вышло интереснее немного, потому что более десятка тысяч уже опустошенных адресов я нашел. Нашел более сотни на тот момент не пустых кошельков. На абсолютном большинстве меньше сатош, чем нужно для вывода. Но на четырех адресах суммы до 2 BTC.

Долго терзался соблазном забрать их балансы себе (изначально я думал что таких адресов просто не будет), по принципу "не я так кто-то другой это сделает", но решился просто перевести с каждого из этих адресов себе по 5$. Так владельцы увидят, что кошельки компрометированы, но сильно не пострадают. Повторял подобный эксперимент в 2020, уже с несколько более недобрым умыслом, подгрести с этих адресов монеты форков биткоина, но к тому моменту уже все было вычищено.