Вернуться в блог
Безопасность

Ваша seed-фраза — единая точка отказа

Плоская иллюстрация: плита из монет балансирует на единственной трескающейся карточке с seed-фразой, а рядом та же плита прочно стоит на трёх ключах.

Двенадцать слов. Для большинства тех, кто это читает, в них и заключена вся модель безопасности: двенадцать или двадцать четыре обычных английских слова, сгенерированных однажды, записанных на бумаге и управляющих всем, чем человек владеет on-chain. Seed-фраза BIP39 заслуживает искреннего признания — она сделала резервную копию кошелька переносимой, стандартизированной и независимой от производителя. Но она же тихо превратилась в самый концентрированный риск во всей отрасли. Seed-фраза — это единая точка отказа: один секрет, который отдаёт всё тому, кто его прочитает, и хоронит всё, если единственный человек, знающий его, его теряет.

Главный вывод сразу: залатать это более удачными тайниками невозможно. Любая схема с одной seed-фразой лишь разменивает риск раскрытия на риск потери. Решение — структурное: распределить контроль между независимыми ключами так, чтобы ни один отдельный секрет не мог опустошить кошелёк или, исчезнув, запереть его навсегда.

Один секрет — два противоположных способа отказать

Seed-фраза — это полный мастер-ключ к кошельку: она детерминированно порождает каждый приватный ключ и каждый адрес, поэтому тот, у кого есть эти слова, распоряжается средствами без лишних вопросов. Это секрет на предъявителя. Здесь нет счёта, который можно заморозить, нет сброса пароля и нет службы поддержки, у которой хватило бы полномочий отменить перевод.

Единая точка отказа — это любой компонент, чья компрометация или потеря обрушивает всю систему. По этому определению хранение на одной seed-фразе даёт сбой сразу в обе стороны:

  • Раскрытие. Любой, кто прочитает эти слова — вор, фотоплёнка, синхронизированная с облаком, вредонос, сканирующий приложение заметок, родственник, который знает, где вы храните вещи, — может вывести кошелёк за считанные минуты, откуда угодно и необратимо.
  • Потеря. Если единственная копия сгорит, утонет, выцветет или уйдёт с мусором, монеты навсегда останутся видимыми on-chain и никогда — доступными для траты. Блокчейн с радостью покажет ваш баланс вашим внукам; притронуться к нему не сможет никто из них.

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

Самые задокументированные потери в отрасли

Ничего гипотетического в этом нет. В 2013 году Джеймс Хоуэллс, ИТ-специалист из Уэльса, выбросил жёсткий диск с ключами примерно от 7500 BTC. С тех пор он покоится на свалке в Ньюпорте, и десятилетие проектов раскопок не сдвинуло с места ни местный совет, ни монеты. Стефан Томас, программист из Сан-Франциско, держит зашифрованный накопитель IronKey с ключами от чуть более 7000 BTC — он потерял пароль много лет назад и, как широко сообщалось в 2021 году, израсходовал восемь из десяти попыток накопителя, прежде чем тот заблокируется навсегда. Помимо громких случаев, часто цитируемые оценки Chainalysis относят к безвозвратно потерянным примерно 20% всех когда-либо добытых биткоинов.

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

Одна seed-фраза управляет всеми средствами: если фразу скопируют, посторонний тратит всё, а если её потеряют, средства заморожены навсегда.
Хранение на одной seed-фразе: оба направления отказа заканчивают историю.

Почему дополнительные резервные копии этого не решают

Стандартный совет после каждой истории о потере один и тот же: сделайте нормальную резервную копию. Выбейте слова на стали, чтобы огонь и вода не смогли их уничтожить. Держите копии в нескольких местах. Арендуйте банковскую ячейку. Всё это разумно — насколько это вообще возможно, — и ничто из этого не затрагивает саму структуру, потому что каждая копия seed-фразы и есть весь ключ целиком. Стальная пластина переживёт пожар в доме; но она же проживёт достаточно долго, чтобы её нашли. Каждое дополнительное место хранения копии — это ещё одно место, где полная, готовая к трате копия вашего состояния лежит и ждёт не того читателя.

Отрасль это знает — потому и не оставляет попыток сделать «резервное копирование seed как услугу». В мае этого года Ledger анонсировала Recover — подписку по желанию, которая дробит зашифрованную копию seed устройства между тремя кастодианами и привязывает её к проверке личности. Возмущение технически подкованных пользователей было мгновенным и достаточно громким, чтобы Ledger приостановила запуск. В своё время мы разобрали, чему этот эпизод научил нас в отношении самостоятельного хранения; здесь же важнее более узкий момент — почему подобный продукт вообще существует. Одна seed без резервной копии — это потеря, которая только и ждёт случая, и производители ежедневно ощущают это давление по обращениям в поддержку. Но пересборка seed через третьи стороны не устраняет единую точку отказа — она меняет её на риск контрагента и риск процесса, категорию, цену которой крах FTX в ноябре прошлого года наглядно показал всем, кому ещё требовался этот урок.

Аппаратные кошельки, надо признать, действительно хороши в том, что заявляют: они держат ключ вдали от компьютера, подключённого к интернету. Но seed внутри аппаратного кошелька — всё та же одна seed. Потеряйте устройство вместе с его бумажной резервной копией — и исход будет тот же, что и на свалке.

Что действительно устраняет единую точку отказа

Мультиподпись — хранение с несколькими подписями — меняет структуру, а не тайник. MultiSig-кошелёк требует M из N независимых ключей, чтобы авторизовать любую транзакцию: 2-of-3, 3-of-5 и так далее. Ни один отдельный ключ не может переместить средства, и уничтожение ни одного отдельного ключа не может их заморозить. Единую точку отказа не прячут лучше — она перестаёт существовать.

Если сделать всё правильно, каждый из N ключей генерируется как собственная стандартная seed-фраза BIP39, на своём устройстве, хранится в своём месте — и каждый может принадлежать разному человеку. У кошелька 2-of-3 с ключами в двух городах и в руках двух людей нет ни места, ни устройства, ни человека, чей сбой был бы фатальным.

Справедливости ради об альтернативах: MPC-кошельки преследуют ту же цель другой математикой, разбивая один ключ на доли, которые совместно вычисляют подпись, — разумная конструкция со своими компромиссами в части прозрачности протокола и восстановления. Кастодианы вовсе снимают с вас управление ключами, что некоторым институтам действительно нужно, ценой доверия к кастодиану. Особое достоинство мультиподписи в том, что правило обеспечивает сама сеть: любой может проверить порог для траты on-chain, а восстановление не зависит от того, останется ли какая-либо компания в бизнесе. Именно из-за этой проверяемости MultiSig от Ownbit держит свои ончейн-контракты в открытом исходном коде, хотя само приложение закрыто, и именно поэтому каждый ключ со-подписанта в кошельке Ownbit — это обычная фраза BIP39, которую вы могли бы восстановить стандартными инструментами.

2-of-3, который выдерживает реальную жизнь

Вот схема, которую мы рекомендуем чаще всего, — с использованием одних только телефонов:

  1. Ключ 1 — ваш повседневный телефон. Приложение-кошелёк хранит одну seed и координирует транзакции.
  2. Ключ 2 — запасной телефон в роли холодного кошелька. Старый аппарат, очищенный и оставленный навсегда офлайн, хранит вторую seed. Внутрь заходят неподписанные транзакции, а наружу выходят подписи в виде QR-кодов, так что этот ключ никогда не касается сети. Сценарий холодного кошелька Ownbit существует именно для этого — и не требует покупать дополнительное железо.
  3. Ключ 3 — резервная seed в другом месте. Третья seed-фраза живёт на бумаге или стали во втором месте — или у члена семьи, которому вы доверяете.

Теперь пройдёмся по сбоям. Пожар в доме уносит повседневный телефон и холодный телефон? Ключ 3 плюс новые устройства восстанавливают контроль 2-of-3. Вор находит резервную seed? В одиночку она ничего не подписывает, а вы спокойно, в удобном вам темпе переводите средства в новый кошелёк. Телефон украли в аэропорту? Ответ тот же. В мультиподписи 2-of-3 потеря любого одного ключа переживаема, а кража любого одного ключа бесполезна — два риска, тянувшие в разные стороны при одной seed, теперь оба поглощаются одной и той же структурой.

Цель не в том, чтобы сделать потерю ключа невозможной. Она в том, чтобы любая отдельная потеря была переживаемой, а любая отдельная кража — бесполезной.
В мультиподписи 2-of-3 два оставшихся ключа по-прежнему тратят после потери одного ключа, тогда как вор с одним украденным ключом потратить не может.
2-of-3: один потерянный ключ переживаем, один украденный ключ бесполезен.

Честные издержки

Мультиподпись не бесплатна. Каждая трата требует второй подписи, а это добавляет шаг согласования — терпимый для сбережений и раздражающий для «денег на кофе», поэтому небольшой горячий кошелёк на одном ключе по-прежнему имеет законное место рядом с MultiSig-хранилищем. В некоторых сетях транзакции с мультиподписью стоят чуть дороже по комиссиям. И теперь вам нужно надёжно хранить три seed-фразы вместо одной; дисциплина не исчезает, она децентрализуется. Меняется последствие ошибки: промах, который прежде был фатальным, становится поправимым инцидентом.

Есть и более тихое преимущество. Поскольку ключи могут принадлежать разным людям, мультиподпись — естественная основа для наследования: наследники могут держать ключ уже сегодня, не имея возможности тратить сегодня, и никому никогда не приходится раскрывать seed-фразу при жизни. Это заслуживает отдельной статьи — а пока мысль верна и сама по себе. Если всё ваше состояние on-chain зависит от того, останется ли одна строка слов одновременно секретной и сохранной, вопрос не в том, может ли такая схема дать сбой, а в том, в какую сторону она даст сбой первой.

Часто задаваемые вопросы

Что произойдёт, если кто-то найдёт мою seed-фразу?

Он полностью распоряжается кошельком. Seed-фраза восстанавливает каждый приватный ключ, поэтому нашедший может за считанные минуты перевести всё на подконтрольные ему адреса, а ончейн-переводы нельзя отменить. Единственная защита — немедленно перевести средства в новый кошелёк, и то лишь если вы вовремя обнаружите раскрытие.

Достаточно ли металлической резервной копии seed-фразы?

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

Значит ли мультиподпись, что у меня больше нет seed-фразы?

Нет — у вас их несколько. В стандартной мультиподписи каждый ключ со-подписанта — это своя seed-фраза BIP39, сгенерированная и хранящаяся независимо. Разница в том, что ни одна из них по отдельности не может ни потратить средства, ни, будучи потерянной, их заморозить; такой властью обладает только порог, например 2-of-3.

Разве passphrase BIP39 (то самое «25-е слово») не достаточная защита?

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

Если вы предпочли бы поменять структуру, а не бесконечно улучшать тайники, MultiSig от Ownbit настраивает 2-of-3 из вашего телефона, офлайн-запасного аппарата и резервной seed — где каждый ключ представляет собой стандартную фразу BIP39, которую вы могли бы восстановить без наших серверов. Страница сценария холодного кошелька шаг за шагом показывает настройку офлайн-подписания по QR-кодам.