Полезные статьи

Как таймлоки позволяют защитить биткоины в вашем кошельке.

Некая дискуссия в чате Телеграма о вредности использования кошельков Blockchain.info(com), которые 1) формируют более длинные и дорогие транзакции, 2) скорее всего собирают о пользователях множество приватной информации, 3) хранят бэкапы кошельков у себя на сервере от противного вела к выгодности использования кошельков Samourai или GreenAddress. Они отличаются между собой, но сегодня мы постараемся разобраться в достаточно уникальной особенности GreenAddress — резервирование доступа к средствам через TimeLock транзакции. Эта схема может быть интересна даже тем, кто по каким-либо причинам не любит GreenAddress (по-моему, есть за что), поскольку пост будет посвящён резевному методу восстановления доступа, не связанному с криптографическими приёмами или программным обеспечением, а поддерживаемым в протоколе Биткоин (и его форках). Другими словами, мы можем воссоздать схему с использованием любого клиента сети протокола.

Временно заблокированный выход транзакции

Ниже использована схема, относящаяся к TimeLock транзакциям, и приведённая в статье, содержащей много других интересных схем. Таймлок — это блокировка подтверждения транзакции в абсолютном или относительном времени. В соответствии с правилами протокола Биткоин, непотраченный выход транзакции (UTXO) также может быть заблокирован, т.е. можно создать «самоблокирующуюся» транзакцию, которая должна приводить к условию, удовлетворяющему блокировке по времени, перед тем как UTXO будет использован. Только тогда биткоины могут быть «потрачены», т.е. право их потратить вновь (новый непотраченный выход) перейдёт к другому пользователю.

Как таймлоки позволяют защитить биткоины в вашем кошельке.

Абсолютное или относительное время различается способом задания: в первом случае это будет так называемое unix-время (дробное или целочисленное значение, отсчитывающее секунды от начала эпохи 00:00:00 on 1 January 1970, во втором — разница во времени от события создания транзакции. Для второго способа наиболее убедительно задавать целевую высоту блока, на которой транзакция разблокируется, поскольку это внутреннее событие протокола Биткоин.

Восстановление доступа к средствам

Отметим, что GreenAddress как сервис создаёт 2-2 мультисиг кошельки также в целях создания мгновенных транзакций с «0» подтверждением, чтобы гарантировать реципиенту определённый уровень доверия силой своего бренда. Как и функция восстановления, она опциональна. Рассмотрим вариант, в котором мы имеем доступ к обоим ключам кошелька с мультиподписью 2-из-2, т.е. выкинули сервисы GreenAddress вон, а пользуемся, например, ключом хранимым на мобильном устройстве и дополнительным ключом вроде Ledger Nano или Trezor, подключаемым к нему через USB-интерфейс.

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

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

Что произойдёт, если вы потеряете телефон или у вас его украдут? Вы подготавливаете всё для восстановления доступа к средствам: достаёте подписанные ключом телефона транзакции оттуда, куда вы их положили (или автоматически отправил ваш кошелёк), проверяете наличие второго ключа, и подписываете им транзакцию с таймлоком и отправляете её в сеть после того, как событие таймлока осуществится. В данном случае существует вероятность, что вам вернут ваш телефон до того как таймлок разблокирует транзакцию, но использовать телефон для перевода средств я бы не стал. Для подписи транзакции восстановления в GreenAddress написана отдельная утилита garecovery.

Для случая, когда оба ключа кошелька 2-из-2 принадлежат вам ситуация получается несколько вырожденной, потому что можно автоматически подписывать транзакции для всех UTXO без необходимости накладывать дополнительное ограничение в скрипте, хотя это повышает защищённость механизма восстановления. Более акутальной ситуация рассматривается именно для третьих лиц, которые мы не контролируем, ведь в общем случае мы можем наладить механизм постоянно проверки обновлённого множества UTXO, гарантирующего обновление временно заблокированных транзакций и защищающего нас от полной неработоспособности сервиса, когда ключ на его стороне будет вообще не доступен. И это является более надёжной схемой по сравнению с «резервированием вашего кошелька» (на самом деле это завуалированное хранение ваших ключей) на сервере blockchain.com, с «двойным шифрованием». Пусть даже «второе» шифрование в целом является гарантией для пользователей, которые обычно создают легко запоминаемые пароли (иначе их просто забыть, ваш капитан), размещение тысяч, десятков тысяч, сотен тысяч кошельков в одном месте (на сервере сервиса) является крайне заманчивой целью для хакеров.

Похожие статьи

Кнопка «Наверх»
Закрыть