nekocave.xyz

Хотите посмотреть на ошибку, стоившую около $3 000 000?
https://github.com/johguse/profanity/blob/75afbade7d4e8a54bd97b26249a84d2833a25b58/Dispatcher.cpp#L111
https://blog.1inch.io/a-vulnerability-disclosed-in-profanity-an-ethereum-vanity-address-tool-68ed7455fc8c

Чувак 32-битным случайным числом инициировал 256-бит (которые абсолютно предсказуемы, зная 32 бита исходного seed). Далее оставалось лишь перебрать по около 1-3 миллиона подсмещений от каждого из изначальных 4 миллиардов семян. И сравнить получившиеся адреса (из получившихся приватных ключей) с известными красивыми (vanity) адресами #.

Пострадало около 12 адресов:
- 0x0000000000000d9054f605ca65a2647c2b521422
- 0x00000000000cd56832ce5dfbcbff02e7ec639bc9
- 0x000000000505696507852acbeecde05ec48fd000
- 0x0000e84617042cf36c95b88326b83d81c1290000
- 0x0babe3333bb2904dc3cdc16b80b64dc3ec5ac4d3
- 0x11d010118a6b11b04106000c00a040c1100b5493
- 0x1c00dd00c5a0818761010500811900061801368b
- 0x60011111fd5111e74120a59100a0ea007100b004
- 0x6fca99c517137deb0519c4e65df81b98492bad1c
- 0x88888888888eb8566470be163d5cf9fe9dff0597
- 0xa0a5ecd1c171a7b643c6e87620a5b483ebbadead
- 0xda0da0da0da0a77740bb62c5c9d45423533d0ce2

Денежки ушли сюда:
https://etherscan.io/address/0x6ae09ac63487fcf63117a6d6fafa894473d47b93

# #
# # # #
2 людей поделились этим
Taciturn mastodon (AP)
Генератор случайных чисел засорился после первых 32-бит, пришлось выкручиваться?
кто-то нарукожопил и не разобрался как работает генератор псевдослучайных чисел (если я правильно понимаю, там вихрь Мерсена)
Разбираю кейс дальше. Взял все свои нагенеренные на чёрный день адреса. Перебрал 4 миллиарада сидов.
Короче, следующее:
Генерируются 4 uint64. Реверсятся. Новое первое число растёт быстро (это foundId, я до 3.5 миллионов оффсеты нашёл), новое последнее число (round) растёт медленно, его значение в пределах 2-3 тысяч от начального.
При этом числа, когда конвертятся в байты, превращаются в них по Big-Endian, не по Little-Endian. Вот у нас получается 256-битный (32-байтный) ключ от адреса.
Таким образом два средних блока приватного ключа по 8 байт не трогаются вообще, они одинаковые для всех адресов с этого сида. Меняются только первый и последний блоки.
А из других двух меняются фактически 3 байта + 2 байт. 5 байт уникальные, остальные неуникальные.