Безопасность кошелька Waves


#1

Добрый день, форумчане!

Меня все тревожит вопрос безопасности waves-кошельков, забегу вперед, для себя я его решил, о чем позже. Как всем, кто создавал адрес кошелька, известно, самое главное запомнить секретную фразу, состоящую из предложенных программой 15 слов. Казалось бы подобрать фразу к кошельку нереально и это, наверное, почти правда. Почти! Тут многие скажут, что все это еще сложнее, чем перебирать пароль. И это опять же правда. Но злоумышленнику все равно с какого кошелька «угнать» средства, верно? Лишь бы эти средства были на балансе.

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

Так мы получаем «условно неограниченный» массив фраза-адрес. Далее просто прогоняем известные непустые кошельки и ищем совпадения с нашим массивом. Вполне реально найти совпадения, а дальше идет оценка рисков и принятие решения. Баланс волн посмотреть элементарно. Другие токены посмотреть тоже труда не составит.

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

Может я где-то ошибаюсь? Это только теория, проверять на практике не собираюсь. Если только в рамках эксперимента под руководством разработчика, но я думаю они и без меня это смогут проверить.

Решение.

Создавать адрес кошелька, на мой взгляд, безопаснее через «Импорт аккаунта», а не через «Создать новый кошелек». Придумываем фразу, можно с использованием русских слов латиницей, вроде даже кириллицу можно использовать, цифры, слова с ошибками, простор для фантазии. Желательно только писать бред какой-нибудь, а не стихи Пушкина. Вдруг какой-нибудь «друг» на мгновение увидит фразу, а она обще известная, запомнит быстро.

Фразой, кстати, и иконку себе подберете по душе))). Я вон бульдога создал какого-то для визуализации.

Таким образом через восстановление мы создаем более безопасный кошелек. Проверил, работает, волны отправляются.

Надеюсь увидеть комментарии по делу, может даже кто-то переубедит меня и успокоит. Правда, я как «знатный параноик» все равно буду использовать кошельки, созданные через импорт.

Спасибо за внимание!


#2

Все верно, алгоритм рабочий, вероятность найти кошелёк действительно не равна 0.

Теперь давайте оценим вероятность, необходимые мощности и время для нахождения 1 кошелька из миллиона существующих.

Имеем 20 байт публичного ключа в адресе, которые должны совпасть, это 2^160 вариантов.

(Здесь же отметим, что 15 слов по 2048 (2^11) вариантов каждый, что даёт 2^(11*15) = 2^165, то есть перекрывают 160 бит с запасом в 5 бит, то есть 15 слов взяты не с потолка, это минимально достаточное количество, больше будет излишним, меньше не покроет всех бит публичного ключа в адресе).

Предположим скорость перебора у нас 2 миллиона проб в секунду (такие результаты даёт например F72s_v2 (72 виртуальные цп, память 144 ГБ) на Azure, стоит сие 171 тысяча рублей в месяц).

Начинаем считать: 2 миллиона это ~2^21 проб в секунду, за год будет 60*60*24*365 = 31536000 секунд, это ~2^25, получаем 2^(21+25) = 2^46 проб за год.

Вероятность найти конкретный кошелёк 1/2^(160-46) = 1/2^114

Миллион это ~2^20, тогда вероятность найти кошелёк из миллиона кошельков: 1/2^(114-20) = 1/2^94

Пока тяжело… давайте предположим у нас не 1 машина, а миллион: 1/2^(94-20) = 1/2^74

И не один год, а миллион лет: 1/2^(74-20) = 1/2^54

Умножим миллион имеющихся мощностей на миллион дата-центров: 1/2^(54-20) = 1/2^34

Ну вот, получилась нормальная такая вероятность (которую хотя бы в голове можно представить): 1 шанс из 17 миллиардов найти за миллион лет, в миллионах дата-центров с миллионом машин в каждом 1 кошелёк из миллиона.

Удачи.


#3

Исчерпывающий ответ, спасибо @deemru. Действительно, вероятность на успех у брутфорсера крайне мала

https://youtu.be/hNBBwRyTy5g (16+)


#4

Спасибо за развернутый ответ. Похвально, что так с цифрами заморочились. “+” к карме))) То что вероятность крайне мала, это понятно. Если список слов долгое время меняться не будет (если я правильно нашел список фраз, то их 2048), количество счетов вырастет, мощности и алгоритмы совершенствуются, где гарантия, что кражи не произойдет? Предположим, что рядовой единице вычислить пару - это чуть ли не случайность. А если серьезные ребята захотят скомпрометировать сеть? Или с помощью вирусни всякой. Шансов больше. Не обязательно же искать все возможные комбинации для того, чтобы принести беду, речь же может идти не только об окупаемости взлома.

Мне еще интересно, а перед тем, как клиент предлагает адрес кошелька на выбор, он проверяет на наличие действующего кошелька? Или там алгоритм с временными метками? Если нет, то чисто в “теоретической сказочной случайности” новому клиенту может сгенерироваться адрес с балансом. Ведь адреса удачно генерируются в офф-лайн режиме. Или я опять фантазирую?


#5

Матчасть:

Гарантии нет, есть вероятность. Если вероятность приемлема, использование допускается. Выше на пальцах показано, что в настоящий момент вероятность приемлема. Если в будущем что-то изменится (например прогнозируется появление квантового компьютера в ближайшие 20 лет), достаточно будет сменить алгоритм, чтобы снова уложиться в приемлемую вероятность. Процедура смены ключей не простая, но неизбежная на большом промежутке времени.

  1. Шансы подобрать SEED от этого не изменятся
  2. Вы правы, вирусы, поддельные сайты, лохотроны, а также методы терморектального криптоанализа могут быть существенно эффективнее в краже кошелька, однако читай пункт 1.

Да, это возможно. Вероятность 1/2^160.


#6

Какова там мощность сети битка? Надо всего-то подкорректировать алгоритм… А вирусы я имел ввиду те, что будут использовать вычислительные мощности железа… Но это сложная дорожка, их легче вылавливать…