Недавно прочитал новость про неслучайные сид-фразы… — Понакодили — TG.ME

Недавно прочитал новость про неслучайные сид-фразы: https://t.me/ctodaily/2117
И решил попробовать поискать TON-разработчиков, которые поленились нормально сгенерировать приватный ключ.

Моё предположение было такое: в библиотеке @ton/crypto есть функция keyPairFromSeed(seed), где seed — это Buffer длиной 32 байта.
Правильно этот сид надо создавать так getSecureRandomBytes(32). Но так будет возня байтами, куда-то их придется сохранить. В общем, делать хорошо — сложно.

А еще, можно написать как-то так:

const keyPair = keyPairFromSeed(await sha256('my_secret'));


Тут my_secret может быть любой строкой, а sha256 сделает из неё хеш длиной 32 байта — как раз то, что требует keyPairFromSeed.

Идея такая: берём популярные пароли, считаем от них sha256-хеш, создаём ключ из этого сида и смотрим, есть ли кошельки c такими ключами в блокчейне.

Найти популярные пароли оказалось проще всего: есть репозиторий https://github.com/danielmiessler/SecLists/tree/master/Passwords, там собрано примерно 56 миллионов паролей. Правда, лежат они в разных файлах, но это не большая проблема.

Дальше я начал думать, как проверить, существует ли кошелёк в блокчейне. Первой идеей было взять бесплатные ключи для tonapi, toncenter и подобных сервисов и просто проверять баланс адреса: если не ноль, то считаем, что кошелёк найден. Но при таком подходе скорость перебора была бы очень низкой.

К счастью, что у tonapi есть крутой сервис TON Analytics. Суть в том, что можно делать SQL-запросы в их базу данных. На текущий момент разрешено создавать запросы, которые отдают миллион строк за раз. В TON всего ~190 миллионов активных адресов, так что выгрузить их все не составило труда и обошлось мне примерно в $20.

Кроме самих адресов, у них есть ещё и отдельная таблица с публичными ключами — там оказалось примерно 50 миллионов ключей. Эта таблица существенно облегчает поиск, потому что не надо генерировать адрес TON-кошелька, а можно проверить сразу публичный ключ. Без неё пришлось бы сначала сгенерировать адреса кошельков для разных версий (v3, v5, hl_v2, hl_v3) и проверять каждый адрес отдельно.

Дальше я попросил Claude написать мне скрипт на Rust. На удивление, получилось с первого раза.

В итоге я проверил:

- 56 миллионов самых популярных паролей;
- unix timestamp с текущего момента до начала 2022 года (134 миллиона чисел);
- просто все числа от 0 до 10 миллионов.

И нашёл только два адреса:

1. EQD36D7ngLSsURYGsDhGzRGrMPPBLs2U2WLDP_THFPvQy6Np — тут приватный ключ создан из слова storm.
2. EQDEW3qkxdgj20mymJ6hPX8AafSzGmT_epYAnOmtuzt9lM6b — тут из строки 1.3.. Оказывается, этот кошелёк создавал я сам :)

На этих кошельках нулевой баланс, видно что они использовались только один раз несколько лет назад.

Дальше искать адреса мне надоело, я потратил несколько дней на проверку всех 190 миллионов строк. Xотя еще много чего можно попробовать, брать другие хеши или применять хеш несколько раз.

Создавайте ключи правильно
🔥9👍3🕊1
August 23, 2026 306 4 9