Почему нам нужно широкое принятие кошельков социального восстановления

Почему нам нужно широкое принятие кошельков социального восстановления

Rich Di

Дата написания статьи - 11 января 2021 года, но на текущий момент все вопросы в ней более чем актуальны!


Одной из самых больших проблем при создании криптоваютных и блокчейн приложений, пригодных для использования обычными пользователями, является безопасность: как мы можем предотвратить потерю или кражу средств пользователей? Убытки и кражи — серьезная проблема, часто обходящаяся невиновным пользователям блокчейна в тысячи долларов, а в некоторых случаях даже в большую часть всего их капитала.


Потери средств в 2022 году


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

Но в последнее время появилась лучшая альтернатива: новый тип смарт-контракт кошелька - кошелек социального восстановления (social recovery wallet). Эти кошельки могут потенциально обеспечить высокий уровень безопасности и гораздо лучшее удобство использования, чем предыдущие варианты, но еще многое предстоит сделать, прежде чем их можно будет легко и широко развернуть.

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




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

Вот один пример:

Прошлой ночью около 21:00 по тихоокеанскому времени я щелкнул ссылку, чтобы перейти на CoinChat[.]freetzi[.]com, и мне было предложено запустить java. Я сделал это (думая, что это законный чат), и ничего не произошло. Я закрыл окно и ни о чем не думал. Примерно через 14 минут я открыл свой кошелек bitcoin-qt и увидел, что транзакция, которую я НЕ одобрил, перевела на кошелек 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC почти все мои акивы...

Но воровство — не единственная проблема; есть также убытки от потери личных ключей. Вот история Стефана Томаса:

У биткоин-разработчика Стефана Томаса было три резервных копии своего кошелька — зашифрованная флешка, учетная запись Dropbox и виртуальная машина Virtualbox. Однако ему удалось стереть два из них и забыть пароль к третьему, навсегда потеряв доступ к 7 000 BTC (стоимостью $125 000 на тот момент). Реакция Томаса: «С тех пор [я] полностью посвятил себя созданию лучших клиентов».

Один из анализов биткоин-экосистемы показывает, что каждый день может теряться 1500 BTC — более чем в десять раз больше, чем пользователи биткоина тратят на комиссию за транзакции, что с годами составит до 20% от общего объема предложения. Истории и цифры указывают на одну и ту же неизбежную истину: важность проблемы безопасности кошелька велика, и ее нельзя недооценивать.

Легко увидеть социальные и психологические причины, по которым безопасность кошелька недооценивается: естественно, что люди беспокоятся о том, чтобы не показаться неосторожными или глупыми перед осуждающей публикой, поэтому многие хранят собственный опыт от потери средств после взломов при себе. Утрата средств еще хуже, так как возникает всепроникающее (хотя, на мой взгляд, очень неправильное) ощущение, что «винить некого, кроме себя».

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

Экосистеме, в которой, единственным ответом на потери и кражи является комбинация 12-шаговых руководств, не-очень-безопасных полумер и полусаркастических «сожалеем о вашей потере», будет трудно получить широкое принятие.

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




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

Аппаратные кошельки — это значительное улучшение, и они, безусловно, защитили бы жертву из первого примера, но они не идеальны. Я вижу две основные проблемы с аппаратными кошельками:

  • Атаки на цепочку поставок: если вы покупаете аппаратный кошелек, вы доверяете ряду участников, которые были задействованы в его производстве — компании, разработавшей кошелек, фабрике, которая его произвела, и всем, кто участвовал в его доставке, кто мог бы заменить его подделкой. Аппаратные кошельки являются потенциальным магнитом для таких атак: соотношение украденных средств к количеству скомпрометированных устройств очень велико. К их чести, производители аппаратных кошельков, такие как Ledger, предусмотрели множество мер безопасности для защиты от этих рисков, но некоторые риски все еще остаются. Аппаратное устройство в принципе не может быть проверено так же, как часть программного обеспечения с открытым исходным кодом.
  • Все еще единая точка отказа: если кто-то украдет ваш аппаратный кошелек сразу после того, как встанет у вас за плечом и поймает, что вы вводите PIN-код, он может украсть ваши средства. Если вы потеряете свой аппаратный кошелек, вы потеряете и свои средства — если только аппаратный кошелек не создаст и не выведет резервную копию во время установки, но, как стало понятно, у них есть свои проблемы…




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

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

Мнемонические фразы хороши для защиты от потери, но ничего не делают против кражи. Хуже того, они добавляют новый вектор для кражи: если у вас есть стандартная комбинация аппаратного кошелька + мнемоническая резервная копия, то кто-то, укравший либо ваш аппаратный кошелек + PIN-код, либо вашу мнемоническую резервную копию, может украсть ваши средства. Более того, сохранить мнемоническую фразу и не выбросить ее случайно — само по себе нетривиальное умственное усилие.

Проблемы с воровством можно облегчить, если разделить фразу пополам и отдать половину другу, но:

I. почти никто это на самом деле не практикует;

II. есть проблемы с безопасностью, и если фраза короткая (128 бит) тогда изощренный и мотивированный злоумышленник, который украл одну часть, сможет взломать все "2 в 64-й степени" возможные комбинации, чтобы найти другую часть;

III. это еще больше увеличивает умственную нагрузку.




Нам нужен дизайн кошелька, который удовлетворяет трем ключевым критериям:

  • Нет единой точки отказа: нет ни одной вещи (и, в идеале, ни одной совокупности вещей, которые путешествуют вместе), которая в случае кражи может дать злоумышленнику доступ к вашим средствам, а в случае потери может лишить вас доступа к средствам.
  • Низкие умственные затраты: насколько это возможно, от пользователей не должно требоваться странных новых привычек или приложения умственных усилий, чтобы всегда помнить о следовании определенным моделям поведения.
  • Максимальная простота транзакций: большинство обычных действий не требуют больших усилий, чем в обычных кошельках (например, Status, Metmask...)




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

Изначально эта технология была разработана в экосистеме биткоина, но и для Ethereum существуют отличные кошельки с мультиподписью (например, Gnosis Safe). Кошельки с мультиподписью пользуются большим успехом в организациях: Ethereum Foundation использует кошелек с мультиподписью 4-из-7 для хранения своих средств, как и многие другие организации в экосистеме Эфириума.

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

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




Это подводит нас к моему предпочтительному методу защиты кошелька: социальному восстановлению. Система социального восстановления работает следующим образом:

  1. Существует единый «ключ подписи», который можно использовать для утверждения транзакций.
  2. Существует набор из не менее 3 (или гораздо большего числа) «хранителей» (guardians), большинство из которых могут взаимодействовать, чтобы изменить ключ подписи учетной записи.

Ключ подписи имеет возможность добавлять или удалять хранителей, но только с задержкой (часто 1-3 дня).



При всех обычных обстоятельствах пользователь может просто использовать свой кошелек социального восстановления, как обычный кошелек, подписывая сообщения с помощью своего ключа подписи, чтобы каждая подписанная транзакция могла выполняться одним щелчком подтверждения (как в «традиционном» кошельке, таком как Metamask).

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

Это легко: они могут зайти на веб-страницу, например security.loopring.io, войти в систему, увидеть запрос на восстановление и подписать его. Для каждого хранителя это так же просто, как совершить сделку в Uniswap.

Есть много возможных вариантов, кого выбрать в качестве хранителя. Три наиболее распространенных варианта:

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

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

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

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

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




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

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


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


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

Человеческий мозг довольно плохо приспособлен для запоминания паролей и отслеживания бумажных кошельков. Для менее техничных пользователей все еще более сложно: им может быть тяжелее с кошельками и паролями, но они так же хорошо справляются с социальными задачами, такими как «выбрать 7 человек, которые не сплочатся против меня».

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

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




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

Мы можем расширить социальное восстановление для решения таких проблем, добавив хранилище. Каждый кошелек социального восстановления может поставляться с автоматически сгенерированным хранилищем. Активы могут быть перемещены в хранилище, просто отправив их на адрес хранилища, но они могут быть перемещены из хранилища только с задержкой в 1 неделю. Во время этой задержки ключ подписи (или, соответственно, хранители) может отменить транзакцию. При желании хранилище также можно запрограммировать так, чтобы некоторые ограниченные финансовые операции (например, сделки Uniswap между некоторыми токенами из белого списка) могли выполняться без задержки.




В настоящее время двумя основными кошельками, в которых реализовано социальное восстановление, являются Argent и Loopring.

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



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

Кошелек Loopring наиболее известен тем, что был создан разработчиками (и, конечно же, включая поддержку) протокола Loopring - ZK-роллапа для платежей и децентрализованного обмена. Но в кошельке Loopring также есть функция социального восстановления, которая похоже на ту, что в Argent. В обоих случаях компании бесплатно предоставляют одного хранителя, который использует код подтверждения, отправленный мобильным телефоном, для вашей аутентификации. Другие хранители могут быть либо другими пользователями того же кошелька, либо любыми пользователями Ethereum (нужно просто указать адрес Ethereum).

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

  1. Гладкость в обоих случаях зависит от центрального «ретранслятора», управляемого производителем кошелька, который повторно публикует подписанные сообщения как транзакции.
  2. Высокие комиссии. К счастью, обе эти проблемы преодолимы.




Как упоминалось выше, есть две ключевые проблемы:

I. Зависимость от ретрансляторов для решения транзакций.

II. Высокие комиссии за транзакции.


Первая проблема, зависимость от ретрансляторов, становится все более распространенной проблемой в приложениях Ethereum. Проблема возникает из-за того, что в Ethereum есть два типа учетных записей: внешние учетные записи (externally owned accounts/EOA), которые контролируются одним частным ключом, и контракты. В Ethereum существует правило, согласно которому каждая транзакция должна начинаться с EOA; первоначальное намерение заключалось в том, что EOA представляют «пользователей», а контракты представляют «приложения», и приложение может работать только в том случае, если пользователь разговаривает с приложением. Если нам нужны кошельки с более сложными политиками, такими как мультиподпись и социальное восстановление, нам нужно использовать контракты для представления пользователей. Но это создает проблему: если ваши средства находятся в контракте, вам нужно иметь какую-то другую учетную запись с ETH, которая может платить за начало каждой транзакции, и для этого требуется довольно много ETH на случай, если комиссия за транзакцию станет очень высокой.


Argent и Loopring решают эту проблему, лично запуская «ретранслятор». Ретранслятор прослушивает офф-чейн «сообщения» с цифровой подписью, отправленные пользователями, заключает эти сообщения в транзакцию и публикует их в блокчейне. Но в долгосрочной перспективе это плохое решение; это добавляет дополнительную точку централизации. Если ретранслятор не работает и пользователю действительно нужно отправить транзакцию, он всегда может просто отправить ее из своего собственного EOA, но, тем не менее, вводится новый компромисс между централизацией и неудобством. Предпринимаются попытки решить эту проблему и получить удобство без централизации; две основные категории связаны либо с созданием обобщенной децентрализованной ретрансляционной сети, либо с изменением самого протокола Ethereum, чтобы позволить транзакциям начинаться с контрактов. Но ни одно из этих решений не снижает комиссию за транзакции, и фактически они усугубляют проблему из-за большей сложности смарт-контрактов.


К счастью, мы можем решить обе эти проблемы одновременно, обратившись к третьему решению: переводу экосистемы на протоколы Layer 2, такие как оптимистичные роллапы и ZK роллапы.

Optimistic и ZK роллапы могут быть разработаны со встроенной абстракцией учетных записей (Rich Di: account abstraction - еще одна горячая тема для развития безопасности блокчейн экосистемы. По ним будет короткий пост на следующей неделе), что устраняет необходимость в ретрансляторах. Существующие разработчики кошельков уже изучают роллапы, но в конечном итоге массовый переход на них является проблемой для всей экосистемы.


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


Report Page