Найти в Дзене
Крипто Энтузиаст

В поисках потерянных ключей

Оглавление

Это статья “взрыв из прошлого”, которая, я думаю, уместна, учитывая, что Новый год уже на носу. Сатоши Накамото запустил Биткоин, первый в истории блокчейн, 3 января 2009 года. Итак, мы приближаемся к 15-летию этого события.

Блокчейны используют кошельки в качестве основного пользовательского интерфейса, и за последние полтора десятилетия кошельки и управление приватными ключами значительно развились. В этой статье, написанной с помощью инженеров из Resonance Security, я рассматриваю некоторые проблемы, с которыми в прошлом сталкивались разработчики и пользователи блокчейн-кошельков.

Это должно дать вам более четкое понимание того, почему кошельки так важны и почему их так сложно обеспечить безопасным использованием.

Что такое кошелек?

Первый релиз Сатоши включал в себя как программное обеспечение для управления блокчейн-узлом, так и блокчейн-кошельком. Программное обеспечение кошелька управляет закрытыми ключами, которые используются теми, кто владеет активами в блокчейне для авторизации транзакций. Эти закрытые ключи получают общедоступные адреса блокчейна, на которых хранятся цифровые активы, и используются для цифровой подписи разрешений на транзакции с этими активами.

Блокчейны используют криптографию с асимметричным ключом; обычно ECDSA, и это означает, что для генерации закрытого ключа вам нужно выбрать случайное 256-битное число (число от 1 примерно до 1,157 * 10⁷⁷, которое равно примерно 1, за которым следуют семьдесят семь нулей, или сто кватуорвигинтиллионов).

Оказывается, что а) выбрать действительно случайное, не поддающееся угадыванию 256-битное число довольно сложно, и б) следить за этим числом, не потеряв его и не позволив кому-либо другому получить к нему доступ и украсть его, еще сложнее.

Оригинальный кошелек

Первый упомянутый выше блокчейн-кошелек иногда называют клиентом Satoshi. В первые дни клиент Satoshi генерировал закрытые ключи случайным образом с помощью генератора случайных чисел C ++ и сохранял их в файле под названием wallet.dat.

Изначально файл был незашифрованным, что означало, что как только биткоин начал иметь долларовую стоимость, хакеры начали пытаться взломать сетевые компьютеры, на которых запущен клиент, чтобы украсть копию wallet.dat файла и, следовательно, криптовалюту, хранящуюся в производных биткоин-адресах.

Позжеwallet.dat был зашифрован случайным мастер-ключом, который сам был зашифрован паролем, называемым парольной фразой кошелька. Иногда пользователи выбирали кодовые фразы кошелька, которые были слишком простыми и могли быть угаданы методом проб и ошибок с течением времени.

Люди все еще время от времени находят старые установки раннего программного обеспечения для биткойнов на своих списанных компьютерах и жестких дисках, с wallet.dat файлами, хранящими ключи, обеспечивающие доступ к старым тайникам биткойнов. Если файлы достаточно ранние, чтобы их можно было расшифровать, или первоначальный владелец может запомнить кодовую фразу, это может привести к неожиданному появлению криптовалюты.

Безмозглые кошельки

Примерно в 2013 году некоторым людям пришла в голову идея, которая поначалу казалась блестящей — создать пароль или кодовую фразу и хэшировать ее с помощью криптографической хэш-функции SHA256, чтобы получить 256-битное число, которое можно было бы использовать в качестве закрытого ключа. Таким образом, вы сможете носить свой биткоин в голове!

У такого подхода есть две проблемы. Первая заключается в том, что люди плохо запоминают вещи в течение длительных периодов времени. Кодовая фраза может показаться запоминающейся сегодня, но через год или десятилетие ... не так уж и много.

Во-вторых, люди не умеют придумывать по-настоящему случайные пароли, и поэтому многие кошельки для мозгов оказались поддающимися угадыванию. Например, кто-то подумал, что строка из 7-й серии 5-го сезона “Симпсонов ” могла бы стать хорошей ключевой фразой: "Салатом друзей не завоюешь!", используя ее для генерации публичного адреса 15gCfQVJ68vyUVdb6e3VDU4iTkTC3HtLQ2

bc1qn4xva3krpduuvrr5ed3w0txtc2vy96z7u4jzxx можете закинуть на этот адресс пару Bitcoin =))

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

Генераторы псевдослучайных чисел

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

Это повторяющаяся проблема в компьютерном программировании. Компьютеры не очень хорошо работают наугад - они детерминированные машины. В большинстве случаев, например, если вы пишете игру, в которой враги появляются случайным образом, достаточно использовать быстрый генератор псевдослучайных чисел (PRNG).

Но PRNG генерируют одну и ту же последовательность “случайных” чисел на любом компьютере при условии, что вы запускаете процесс с одним и тем же начальным значением, и разработчики часто используют текущее время в качестве начального значения PRNG.

PRNG выглядит совсем не так
PRNG выглядит совсем не так

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

Оказалось, что провайдер кошельков под названием Cakewallet допустил именно эту ошибку в своем коде. Учитывая, что первый выпуск Cakewallet состоялся в 2018 году, а уязвимость была обнаружена только в 2021 году, это привело к трехлетнему периоду поиска уязвимых адресов кошельков.

А три года - это всего 95 миллионов секунд. Таким образом, все эти адреса кошельков могут быть принудительно взломаны менее чем со 100 миллионами попыток, что не особенно велико, если вы используете свое программное обеспечение для взлома в автономном режиме и у вас есть приличный компьютер и несколько месяцев.

Нарушения при хранении

Когда на тебя возлагается слишком большая ответственность, инстинктивный подход, используемый многими, заключается в том, чтобы найти кого-то, кто выступит в роли родителя и возьмет на себя обязанности и пассивы. Отсюда и опекунские кошельки. Передайте свои активы компании или отдельному лицу, и пусть они возьмут на себя головную боль по обеспечению безопасности кошельков, запоминанию паролей и предотвращению действий хакеров.

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

На практике существует множество примеров отказа кастодиальных кошельков, больших и маленьких. Два самых известных:

  • Mt. Gox закрылась в 2014 году, когда стало очевидно, что сотни тысяч биткоинов были украдены из их кошелька hot cryptocurrency в течение двух лет. Недостающие средства: примерно 650 тысяч биткоинов и 27 миллионов долларов.
  • FTX закрывает магазин в 2022 году после разоблачений о том, что биржа и близко не располагала активами, необходимыми для возврата внесенных депозитов, поскольку большую их часть она мошенническим путем обменивала, одалживала и тратила на политические пожертвования и собственность на Багамах. Недостающие средства: около 8 миллиардов долларов.
Вы бы отдали свои сбережения этим двоим?
Вы бы отдали свои сбережения этим двоим?

Проблема с кастодианством заключается в том, что нет гарантии, что кастодиан более компетентен, чем вы, и может быть преступником в придачу. Кроме того, в криптовалюте нет Федеральной корпорации по страхованию вкладов, гарантирующей ваши активы от кражи или потери. Более того, централизованный хранитель становится отличной мишенью для хакерских групп.

Доверять смарт-контракту

Как насчет того, чтобы отказаться от кастодианов или сохранить свои собственные активы и использовать смарт-контракт? Именно для этого была разработана библиотека смарт-контрактов Parity wallet в Ethereum. Активы переводятся в смарт-контракт кошелька с использованием библиотеки, и для последующего перевода активов обратно из кошелька требуется несколько подписей авторизации.

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

К сожалению, библиотека кошелька Parity содержала ошибку. Когда она была развернута (или, скорее, повторно развернута для исправления другой ошибки), еще в 2017 году библиотека кошелька не была инициализирована для определения владельца. В код была включена функция “kill”, которая могла быть вызвана владельцем контракта. Кто-то, использующий дескриптор devops199, сначала вызвал функцию инициализации, чтобы стать владельцем библиотеки, а затем вызвал функцию kill, замораживающую все средства, хранящиеся на нескольких кошельках с несколькими подписями, использующих библиотеку кошельков Parity.

Упс.
Упс.

Общее количество потерянных? 513 743 ETH, или около 1,2 миллиарда долларов США в сегодняшних ценах.

Краткие сведения

Забота о своих криптоактивах похожа на игру “орел проигрывает, решка выигрывает у хакеров”. Трудно позаботиться о них самому и еще труднее позволить кому-то другому сделать это за тебя.

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

До тех пор защита себя и своих активов требует работы:

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

А теперь все, что остается мне пожелать вам процветающего, но, прежде всего, безопасного Нового года.