Подписывающие ключи и ключи безопасности

Кошелёк Vela — это Safe, а у Safe есть владельцы. У вашего их может быть до семи при пороге один: любой подписывающий ключ авторизует транзакцию в одиночку. Это записывается как 1-of-n.

Что может быть подписывающим ключом

Три вида, и их можно свободно сочетать:

СпособЧто этоТипичный пример
ПлатформенныйАутентификатор, встроенный в устройство, которым вы пользуетесьFace ID / Touch ID на этом телефоне или ноутбуке, синхронизируемый Связкой ключей iCloud или Менеджером паролей Google
Устройство рядомДругое устройство, к которому вы подключаетесь, отсканировав кодТелефон подписывает за компьютер через гибридный транспорт WebAuthn
Ключ безопасностиСъёмный аутентификатор с USB или NFCYubiKey и другие ключи FIDO2

Все три — учётные данные WebAuthn на кривой P-256. Для Safe они неразличимы: каждый — владелец, чью подпись модуль passkey от Safe проверяет в блокчейне одним и тем же способом. (Первый ключ проверяет общий подписант Safe, а каждый дополнительный — свой небольшой контракт-подписант, который фабрика Safe создаёт, когда кошелёк впервые разворачивается в сети.)

Какие виды ключей поддерживает каждое приложение:

ПриложениеЭто устройствоТелефон рядом (QR)Ключ безопасности
Веб-кошелёк, расширение для браузераДаДаUSB или NFC, через браузер
Десктоп (macOS, Windows, Linux)macOS и WindowsДаUSB
AndroidДа (с сервисами Google Play)ДаUSB
iOSДаДаYubiKey с USB-C или Lightning, прошивка 5.8 или новее

Вариант «Это устройство» в настольном приложении (Touch ID, Windows Hello), да и поддержка Windows в целом, появились недавно и протестированы хуже остальных способов; на компьютере сегодня надёжнее выбрать телефон или ключ безопасности.

Ключ безопасности может быть вашим первым ключом, а не только запасным. Если вы хотите, чтобы кошелёк вообще не зависел от аккаунта Apple или Google, создайте его с двумя ключами безопасности и один храните в надёжном месте. (Кошелёк, у которого единственный ключ нигде не синхронизируется, создать нельзя: приложение попросит второй ключ, потому что потеря этого одного устройства означала бы потерю кошелька.)

Почему они выбираются при создании

Эта часть многих удивляет, поэтому вместо извинений — механизм.

Адрес вашего кошелька выводится из набора владельцев. Vela вычисляет его через CREATE2 из данных инициализации Safe — в них входит публичный ключ каждого подписывающего ключа — ещё до того, как что-либо развёрнуто в блокчейне. Именно поэтому можно получать средства на адрес, которого ещё нет.

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

Поэтому у вопроса «можно ли добавить ключ позже?» два честных ответа:

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

От чего это на самом деле защищает

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

Аккаунт платформы, которому вы больше не доверяете. Если ваш passkey хранится в Связке ключей iCloud или Менеджере паролей Google, тот, кто контролирует этот аккаунт, потенциально может им воспользоваться. Ключ безопасности находится у вас и никуда не синхронизируется.

И то, от чего это не защищает, потому что 1-of-n режет в обе стороны: второй ключ — это второй вход, а не второй замок. Любой, кто получит хотя бы один из ваших подписывающих ключей, сможет подписать в одиночку. Больше ключей — больше устойчивости к потере и больше поверхности для кражи; таков компромисс, и решать вам.

Если ключ мог быть скомпрометирован

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

Восстановление — это не добавление

Это разные вещи, и документация их разделяет:

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