26 августа 2022

Bitcoin-мультисиг с помощью Electrum

С одной стороны кажется (ключевое слово — “кажется”), что эта тема старая, избитая и по ней полно всего, но с другой — нет. Особенно — на русском языке. Точнее — есть ряд инструкций и примеров, допустим:

  1. https://youtu.be/sNfdKRqlBLg;
  2. или в формате форума.

Но они не обозначают многие нюансы, о которых сейчас и расскажу. Но для начала — 

Инструкция. Делаем multisig по шагам

Шаг №01. Скачиваем. Точнее — заходим на сайт https://electrum.org/#download и выбираем пакет для скачивания в зависимости от того, какая у вас OS:

Electrum Multisig 00

Шаг №02. Установка. Процесс стандартный. Описывать его не вижу смысла. Единственное, что отмечу, очень желательно, чтобы версии для одинаковых ОС у разных со-подписантов были одинаковые (поэтому, на тестах у меня старая версия кошелька: у со-подписантов в моменте теста стояла она же). 

Шаг №03. Создание мультисига. И тут сразу рекомендация: делать мультисиг с привязкой к аппаратному кошельку — Ledger или Trezor. Почему так? Читайте здесь и здесь

Шаг №03.01. Выбираем в меню “Создать кошелёк”:

Electrum Multisig 01

Шаг №03.02. Именуем вновь создаваемый кошелёк:

Electrum Multisig 02

Шаг №03.03. Выбираем создание кошелька с несколькими подписями:

Electrum Multisig 03

Шаг №03.04. Устанавливаем количество владельцев и подписантов:

Electrum Multisig 04

И здесь — ВНИМАНИЕ!

Сколько бы человек ни участвовало в подписи (можно до 15-ти) — рекомендую начать с 2-х минимально: 2 из 3 или 2 из 4, или 2 из 14 — не важно. Почему?

  • Во-первых, раз решили сделать мультиподпись, то в ней есть смысл, когда участников больше, чем 2 (если только вы — не профи и не делаете 2 из 2);
  • Во-вторых, при тестировании неизбежны ошибки, в том числе — с учётом человеческого фактора, поэтому проверки лучше делать по круговой системе. Пример на 4-х участниках: первую транзакцию подписывают 1-й и 2-й, далее 2-й и 3-й, далее 3-й и 4-й, далее — 4-й и 1-й; 
  • В-третьих, подтверждение транзакций занимает при 6 стандартных блоках — около часа, поэтому лучше упростить модель вначале; 
  • В-четвёртых, в ситуации “забытых” данных — восстановить будет проще всего именно через эту модель. 

В моём случае сразу поставил 3 из 4, поскольку этап тестов был пройден до написания статьи, а в вашем — нужно терпение и хотя бы 10-20 транзакций подписанных, после чего — переход от 2 из 4 (или 8, или какое число участников у вас именно) к 3 и выше. 

Шаг №03.05. Добавление себя в качестве участника мультисига (в Electrum они именуются “поручители”):

Electrum Multisig 05

Шаг №03.06. Выбор в пункте “Использовать аппаратный ключ”:

Electrum Multisig 06

Если кошельков несколько — будет меню с чек-боксами, но в моём случае я создал отдельное (“чистое”) устройство и переименовал его для простоты восприятия. 

Шаг №03.07. Ввод пин-кода:

Electrum Multisig 08

И здесь — опять ВНИМАНИЕ!

Если у вас на устройстве задана passphrase, то, если она будет запрошена, впоследствии получаемый публичный ключ должен быть именно через неё, потому как общий публичный ключ (xPub, yPub, zPub) формируется иначе, нежели без пасфразы. 

Коротко — выдержка: “Passphrase — дополнительная функция устройства [аппаратного кошелька], которая позволяет пользователям создавать скрытые кошельки. Passphrase выполняет функцию двухфакторной защиты seed-фразы восстановления и является абсолютной защитой от атак, связанных с физическим доступом к устройству или seed”. 

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

Если вы не до конца знакомы с теорией, что есть Seed-фраза и как из неё получаются приватные ключи, рекомендую изучить:

  1. https://fidgett.medium.com/все-про-seed-фразу-25a0aff7cf3d 
  2. https://blog.trusteeglobal.com/ru/seed-fraza-ili-mnemonicheskaya-fraza-osobennosti-i-sposobi-hraneniya/ 

Кроме того, никогда не светите даже часть seed-фразы: это чревато взломом! Зная это, идём дальше. 

Шаг №03.08. Выбираем тип кошелька (дословно: “тип скрипта и путь”): Electrum Multisig 09Рекомендую выбирать SegWit, поскольку его возможности априори шире и есть обратная совместимость. Если же не знаете, что есть SegWit — можно изучить вот этот материал на Forklog: https://forklog.com/cryptorium/chto-takoe-segregated-witness/

Шаг №03.09. Далее — нужно получить публичный ключ и поделиться им со своими со-подписантами:

Electrum Multisig 10

При этом со-подписанты также должны сформировать по указанным выше шагам свои PUB-ключи и выслать вам. Важно помнить, что если делаете SegWit-кошелёк, то и все другие должны выбрать именно этот тип, если создаёте правило, скажем, “2 из 4”, то и все остальные должны задать именно его. А вот — краткий список соответствий как ещё один лайфхак:

  • xPub — для классического (legacy multisig) кошелька (он же p2sh);
  • yPub — для p2sh-segwit multisig;
  • zPub — для segwit. 

Эти четыре буквы появляются в начале PUB-ключа и по ним сразу видно: верный путь проделал со-подписант или нет. 

И опять — ВНИМАНИЕ!

Не берите Pub-ключ из приложения самого Трезора или Леджера: как правило, это вызывает лишнюю сумятицу и ошибки. Только по проведенному выше пути —  через приложение Electrum непосредственно. 

Шаг №03.10. Наконец, после того, как ввели ВСЕ PUB-ключи всех со-подписантов, следует ввести пароль для файла кошелька. Для тестов сделал пароль коротким, но в “боевом” режиме лучше использовать не меньше 14 символов, а ещё — соблюдать цифровую гигиену по описанным ранее принципам и стандартам:

Electrum Multisig 11

И здесь — ВНИМАНИЕ!

Когда вводите пароль, то введите его именно для файла с расширением .psbt. Что это и зачем — можно почитать по ссылкам:

  1. https://bitnovosti.com/2021/11/04/chto-takoe-chastichno-podpisannye-bitkojn-tranzaktsii-psbt/ 
  2. https://hub.forklog.news/chastichno-podpisannye-bitkoin-tranzaktsii-standart-psbt/ 

Фактически — это ещё одна, пусть и не большая, крепость в вашем общем бастионе защиты казны, или, как говорят в мире криптовалют, — Treasury. И последнее: когда вводите пароль — проверьте язык на вкладке, потому как ряд версий Electrum принимает не только “англоязычные” пароли. 

Шаг №04. Кошелёк с мульти-подписью готов: 

Electrum Multisig 12

Шаг №05. Отправка и получение BTC:

Шаг №05.01. Получение BTC: как известно, прежде чем что-то зарыть, это нужно положить, а прежде, чем положить, нужно найти. В том смысле, что для тестов вам потребуется BTC на балансе. Лучше всего, если:

  1. Не будете отправлять BTC с биржи; 
  2. С “именных” аккаунтов (публичных);
  3. Напрямую с непроверенных аккаунтов обменников. 

В общем — тут ваша задача и смекалка. Но одно правило не положено для UTXO: одна транзакция — один адрес: 

Шаг №05.02.(01) Создание транзакции отправки BTC: на первом шаге не отличается ничем от стандартной транзакции: 

Electrum Multisig 14

Шаг №05.02.02. Далее следует подтвердить транзакцию (кошелёк, сумму и комиссию) через ваш аппаратный кошелёк: 

Electrum Multisig 15

Шаг №05.02.03. После этого идёт стадия проверки транзакции (рекомендую это делать всегда) — здесь увидите примерно следующее окно:

Electrum Multisig 16

Шаг №05.02.04. После проверки можете скопировать данные транзакции в файл и отправить его на подпись со-подписантам: 

Electrum Multisig 17

Шаг №05.02.05. Когда все подписанты подпишут транзакцию, то последний из них (как правило, хотя может сделать любой) — отправляет её в сеть, так как до этого момента это — оффлайн-транзакция, то есть кнопка “Подписать” активна в момент загрузки файла, а кнопка “Разослать” — когда все подписи собраны:

Electrum Multisig 18

Шаг №06. Всё, вы научились пользоваться мультисигом. Дальше — повторите несколько транзакций ввода-вывода; “восстановите” кошелёк с теми же подписантами и научитесь делать всё оперативно. 

Tips and tricks

Итак, если резюмировать, то:

  1. Обязательно делайте мультисиг в связке с аппаратными кошельками: опыт взлома аккаунтов Solana доказал эффективность таковой; 
  2. Используйте одинаковую (для одной ОС) версию кошелька Electrum для разных со-подписантов; 
  3. Не торопитесь:
    1. Применяйте на практике правила личной и коллективной цифровой гигиены;
    2. Начинайте всегда с 2 подписей из N и двигайтесь по шагам; 
  4. Старайтесь использовать максимум защиты:
    1. Аппаратный кошелёк по умолчанию;
    2. Passphrase на нём — по возможности; 
    3. Сложный пин-код; 
    4. Криптостойкий пароль (не менее 14 символов хотя бы) на файл кошелька;
    5. Никому, кроме со-подписантов, не давайте PUB-ключ: он раскрывает данные по всем кошелькам, а это снижает приватность и анонимность в UTXO-системах; 
    6. Не передавайте файл для подписания через открытые источники, такие как публичные чаты telegram, email и подобные: лучше это делать через более защищённые вещи (SSH в почте, приватные чаты с удалением файлов и т.д.). Если же другой возможности нет — удаляйте лишнюю информацию после транзакции;
    7. Не забывайте про VPN: нынче он нужен повсюду. 

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

До!