Авторизация  
лаки лучано

МАНУАЛ Bitcoin мультиподпись (Whonix + Electrum)

В теме 2 сообщения

В этом мануале мы рассмотрим технологию Биткоин-мультиподписи на примере кошелька Electrum, и операционной системе Whonix.

    ***Примечание. Данный мануал одинаково будет работать как на Windows, Mac и BSD, отличаться будет только процесс установки самого кошелька Electrum.

1) Начнем с истории и скучных терминов, но может кому то будет интересно
 

    Мультиподпись впервые была реализована в кошельке BitGo (2013 год).

    В 2015-ом году разработчики Electrum выпустили апдейт 2.0, с возможностью создания мультисиг-адреса по схеме “2-из-3”.

    Термины

    * multi-signature transaction – транзакция с несколькими подписями;

    Давайте разделим понятия seed и mnemonic phrase:

    * seed -- 256-битное число, обычно представляется в виде 64-значного 16-ричного числа;

    * mnemonic phrase -- словесная форма seed с дополнительным контрольным словом. То есть, мнемоническая фраза и seed представляют собой одно и то же, просто мнемоническая фраза является более удобочитаемой для человека;

    * master private key (xprv) – формируется из мнемонической фразы, используется для генерации бесконечной последовательности приватных ключей (private key).

    * master public key (xpub) – позволяет генерировать одинаковую последовательность адресов (address) независимо от мнемонической фразы (seed). Таким образом, вы можете импортировать master public key (xpub) в кошелек, и получить безопасный вариант только для приема средств (watch-only wallet).

    Некоторые иерархически детерминированные кошельки (HD-кошельки), куда относится Electrum, для большей безопасности позволяют разделять создание master private key (xprv) и публичного ключей (public key). Сам кошелек можно настроить указав ему только master public key (xpub). Что мы получим:

        кошелек который сможет создавать бесконечное количество адресов (address);

        при скомпрометированном master public key (xpub) злоумышленник не сможет вывести ВТС из кошелька;

    * watch-only wallet – безопасная модель кошелька только для приема ВТС. Для этого достаточно импортировать свой master public key (xpub). Можно видеть баланс кошелька, генерировать новые адреса, но нельзя отправить с него средства. ВТС отправленные на новые сгенерированные адреса, автоматически будут отображены в истории кошелька.

    * private key – приватный ключ, участвует при создании подписи;
    И еще один момент, не совсем правильно считать, что публичный ключ и адрес кошелька одно и тоже. Адрес кошелька (address) --- это хэш публичного ключа (public key).

    Где можно применить технологию мультиподписи?

    Мультиподпись усложняет операцию траты и повышает уровень безопасности хранения ВТС, но также разделяет ответственность между совладельцами мультисиг-кошелька.
    Разделение ответственности означает, что несколько человек (владельцы xpub-ключей от мультисиг-кошелька) должны достичь консенсуса, и принять решение о трате/переводе ВТС. Ихнее решение будет зафиксировано с помощью цифровой подписи каждого подписанта.

    Пример. Есть бизнес, у которого пять совладельцев. Чтобы один человек не мог принимать решения о трате средств (а также чтобы он не смог украсть ВТС компании) – здесь пригодится мультисиг-кошелек, например 3-из-5. То есть, чтобы потратить/перевести ВТС с мультисиг кошелька нужно как минимум три подписи (в данном случае большинства) совладельцев компании. Или же можно завести кошелек 4-из-5, или даже 5-из-5.

        ***Примечание. На момент написания этого мануала, кошелек Electrum поддерживает разные варианты с количеством обязательных подписей и подписантов, вплоть до 15-из-15.

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

    На данный момент самой популярной схемой мультисиг-кошелька является – 2-из-3. Таким образом решается одно из главных торговых взаимоотношений – спор за невыполнение условий сделки одной из сторон (попытка мошенничества), в котором участвуют покупатель, гарант и продавец (у каждого свой xpub-ключ от мультисиг-кошелька).

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


2) Установка кошелька Electrum на Whonix
 

    Думаю не стоит лишний раз напоминать о фишинге и загрузки софта с непроверенных источников, поэтому перейдем к установке.

    Если вы используете Windows, Mac или другой Debian-based дистрибутив, всю необходимую информацию вы найде на официальном сайте Electrum:

    https://electrum.org/#download

    С Whonix чуть другая ситуация, ибо чего нету в репозиториях Debian, то не является безопасным, больше информации здесь (тор).

    Поэтому установим Electrum как советует Whonix-сообщество.

    1) Откройте терминал (Konsole).

    Если вы используете Qubes-Whonix, выполните следующие шаги:

    Qubes App Launcher (blue/grey "Q") --> Whonix-Workstation AppVM (commonly named anon-whonix) -> Konsole

    Если вы используете Whonix-Workstation, выполните следующие шаги:

    Start Menu -> Applications -> System -> Konsole

    2) В Whonix-Workstation (whonix-ws-14 Qubes-Whonix) терминале, добавьте стабильное название Debian "stretch" в Apt-conf default-release.

    Откройте в редакторе с root-правами:

    /etc/apt/apt.conf.d/70defaultrelease

    Если вы используете Qubes-Whonix, выполните следующие шаги:

    kdesudo kwrite /etc/apt/apt.conf.d/70defaultrelease

    Если вы используете Whonix-Workstation, выполните следующие шаги:

    sudo nano /etc/apt/apt.conf.d/70defaultrelease

    Добавьте следующий текст:

    APT::Default-Release "stretch";

    Сохраните и закройте редактор

    3) Добавьте текущее тестовое название Debian "buster" в sources.list

    sudo su -c "echo -e 'deb http://http.debian.net/debian buster main' > /etc/apt/sources.list.d/testing.list"

    Или воспользуйтесь .onion-зеркалом:

    sudo su -c "echo -e 'deb tor+http://vwakviie2ienjx6t.onion/debian buster main' > /etc/apt/sources.list.d/testing.list"

    4) Обновите список пакетов:

    sudo apt-get update

    5) Установите Electrum из тестовой ветки Debian "buster"

    sudo apt-get install electrum/buster

__________________________________________________________________________________________________________
3) Запуск, настройка Electrum и создание мультисиг-кошелька
 

    Start Menu -> Applications -> Electrum

    Если не запускается, откройте терминал и введите electrum и нажмите клавишу Enter.

    Кошелек спросит вас как подключиться к серверу, выберите Select server manually:

   1.png.a39f1c852ae087916c4c48a5c25e7d33.png

    В следующем окне перейдите на вкладку Server, там должна стоять галочка на Select server automatically:

    2.png.a2b1905f6073a76ba9b326e708b1a022.png

    Теперь перейдите на вкладку Proxy и задайте настройки как на этом скриншоте:

    3.png.2aaf76986f6e64ae65310be131584648.png

    Далее кошелек предложит вам… создать новый кошелек :).

        ***Примечание. Чтобы лучше понять как работает мультиподпись, и как она может защитить ваши ВТС при покупке чего то онлайн, давайте смоделируем ситуацию: вы Покупатель, нашли Продавца у которого есть нужный вам товар, сделка проводится через Гаранта.

    Покупатель создает новый мультисиг-кошелек (так мы его и назовем “Покупатель”):

    4.png.ffa390157a8533d1eb9ac5bd8aced413.png

    Выбираем Multi-signature wallet:

    5.png.e55549e4b21590fecb0f8c1dcaf34f92.png

    В следующем окне нужно выбрать схему кошелька. Выбираем 2-из-3, то есть, чтобы произвести транзакцию по данному кошельку, нужно как минимум две подписи из трёх:

        ***Примечание. Все стороны данной сделки должны выбрать одинаковую схему.


   6.png.16b18f198bf60899e45c38a27e72e749.png

    Далее, выбираем создать новую мнемоническую фразу (Create a new seed):

    7.png.9785d1455503848f9d7c64c9e4b1fab2.png

    Выберите тип адресов которые будут использоваться в вашем мультисиг-кошельке. Все стороны сделки должны выбрать один и тот же тип адресов. Выбираем Standard:

        ***Примечание. Хотя новости и хорошие, число SegWit-транзакций в сети растет, но на данный момент довольно мало сервисов поддерживают SegWit-адреса (bech32). Тот же гиганг Binance не поддерживает вывод ВТС на bech32-адреса, лично тестил.

8.png.316407b6f37ba6e355308c380ebb19e0.png

    В следующем окне мы видим мнемоническую фразу, которую нужно сохранить и ни с кем ею не делиться!

    9.png.c5fc92b16723c06db857af975dedae9b.png

    В следующем окне вы увидите свой master public key (xpub), который нужно обязательно сохранить.

        ***Примечание. Master public key, не содержит в себе секретных данных, которые могут нанести ущерб вашим ВТС. Им можно делиться с другими. А сохранить его как раз для этого и нужно, чтобы потом поделиться им с другими сторонами сделки (подписантами).


    10.png.79418623b0d4cf8116efa98c0d055856.png

    В следующем окне кошелек попросит ввести xpub-ключи других подписантов:

    11.png.2848a03e4a151ed7e8c57262d26923c4.png

        ***Примечание. Все стороны сделки должны проделать эти шаги, и в этом месте обменяться своими xpub-ключами.

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

    Seed_1: panther frequent nice soap can bean image trade thumb swarm fox above
    Seed_2: taxi today special enter drift flip mechanic again boss shiver bunker matter
    Seed_3: arrange throw purse sell divide mandate wide grain document water mango urban

    Выбираем Enter cosigner key, и вводим по очереди xpub-ключи Гаранта и Продавца. Последовательность добавления других подписантов ни на что не влияет.

    Xpub-ключ Гаранта:

    12.png.df00c56082ce7efcfb606ea714450ecb.png

    Xpub-ключ Продавца:

    13.png.dced0e5bae25a6b81d5b3371a1397d29.png

    В следующем окне задаем пароль свому кошельку:

        ***Примечание. Этот пароль кошелек будет запрашивать при переводе средств. Если вы его забудете, то всегда сможете восстановить свой кошелек по мнемонической фразе (если вы и её не потеряли, гы-гы)

14.png.db926f7e89f3f0d6b05bb6db4e24f1d3.png

    После того как все стороны сделки ввели правильные xpub-ключи друг-друга, тогда все три кошелька будут иметь одинаковые адреса.

    “Сообразили на троих”:

    15.png.d4d194967e3c6b2f6052ef7db8991a11.png

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

    Индикатор в правом нижнем углу должен загореться зеленым/синим (зависит от цвета ваше темы), а лучше кликните по нему:

    16.png.e4ebfe5f0a6b4542e61ccd76bc6a8a56.png

    Мой кошелек подключен к десяти нодам, высота блокчейна 540013. Высоту блокчейна можете проверить в своем любимом эксплорере. Например лично я не люблю blockchain.com (бывший .info), он мне напонимает Роджера Вера + не работает с Tor-браузера, даже по .onion-ссылке. Так что высоту блокчейна я проверил на blockchair.com, высота совпала, а значит кошелек готов к работе.

    Ок, у всех сторон сделки кошельки готовые, Покупатель пополняет мультисиг-кошелек. Для нашего мануала берем верхний адрес: 3CPzfG4rCuujKjvNeQHmNTot29DaDrW6XS

    17.png.4c6461aeb857390413f01fb9dc56ac28.png

    18.png.02b379cdf31789908e86815413edbc24.png

        ***Совет Продавцам и Гарантам. После того как Покупатель отправил ВТС на мультисиг-кошелек, и вы видите что транзакция попала в мемпул, не спешите отправлять товар/услугу Покупателю, дождитесь минимум три подтверждения в сети ВТС.

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

    Припустим, что Продавец схитрил и действительно нарушил условия сделки. Гарант принимает сторону Покупателя. ВТС будут возвращены на личный кошелек Покупателя.
    Покупатель создает транзакцию, где указывает свой личный ВТС-кошелек: 1EjaE6fsrsLEatJ1CJdXDaJ31SdBqDRy8Q

    19.png.ec8f84dfef8ecdb9c70f98846f1b3047.png

    Можно нажать на Preview, чтобы убедиться в правильности личного адреса кошелька и посмотреть другие детали будущей транзакции:

    20.png.d39a4696a838c1cd1249a93191c3ac26.png

    Copy –- на данном этапе скопирует в буфер обмена скрипт неподписанной транзакции.

    После каждого шага я буду постить ВТС-скрипты, чтобы вы видели как они меняются при добавлении каждой подписи. Проверить их можно например здесь: https://txid.io/wallet/#verify или здесь: https://brainwalletx.github.io/#tx (вкладка Transactions – > Raw Transaction)

    Скрипт неподписанной транзакции:

    010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fd0c010001ff01ff01ff4d0201524c53ff0488b21e00000000000000000030ba3ded0764b2ac8c0fd0a1edb62908ea06a1339ef30781898a70482c2008bd039fec5737b12780a9ca81893df3d70e34b77c9aa407eab62b24b1d33b6a67fcf8000000004c53ff0488b21e0000000000000000008cb45bb0fd86b39e748d630325607cebc3519db3c931dd4c0692e5797a81a97202e7b71d6117cb56a07b6df6c97f786bca9a01327b7d2b392b8cf95ed3769f0e40000000004c53ff0488b21e0000000000000000006de36390b85288406f856e85a93c5dc66fdc5045450658b015b542d09f93744c02cdbf5c70ccf9b92247f3ac2f6b6bbd330685bc3c0dd84133b46ce4cd0cbbc16a0000000053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac733d0800

    Export –- экспортирует тот же скрипт сразу в текстовый файл .txn, который потом можно импортировать в другой кошелек для последующей подписи.
    Если все сходится, нажмите на Sign, кошелек запросит ваш пароль, после его ввода вы подпишите данную транзакцию xbub-ключом Покупателя:

    21.png.525a72df1f8dfd8235d43f3ce1c6758a.png

    Видите? Status signed (1/2), а кнопка Sign уже неактивна. Copy и Export выполняют теже функции что и в предыдущем шаге.

    Вот скрипт подписанной транзакции xpub-ключом Покупателя:

    010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fd530100483045022100881c196d50416cb7233fe96a41f9f938058a6e11b3f2cfc703790389626cd519022039906f77c72cc1c89e8d4783a1c290ccf5b97ea4a432abacf2d7e246639d6cf20101ff01ff4d0201524c53ff0488b21e00000000000000000030ba3ded0764b2ac8c0fd0a1edb62908ea06a1339ef30781898a70482c2008bd039fec5737b12780a9ca81893df3d70e34b77c9aa407eab62b24b1d33b6a67fcf8000000004c53ff0488b21e0000000000000000008cb45bb0fd86b39e748d630325607cebc3519db3c931dd4c0692e5797a81a97202e7b71d6117cb56a07b6df6c97f786bca9a01327b7d2b392b8cf95ed3769f0e40000000004c53ff0488b21e0000000000000000006de36390b85288406f856e85a93c5dc66fdc5045450658b015b542d09f93744c02cdbf5c70ccf9b92247f3ac2f6b6bbd330685bc3c0dd84133b46ce4cd0cbbc16a0000000053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac773d0800

    Этот же скрипт нужно передать Гаранту на подпись.

    Смотрим кошелек со стороны Гаранта. Выбираем Tools → Load transaction – и выбираем нужный вариант. Самый удобный (имхо) from text, то есть – копипаст скрипта:

    22.png.96834aba5eb3576d32d9b6f12167e60d.png

    После того как Гарант загрузит транзакцию (Load transaction), он увидит то же окно, что и Покупатель (после того как он подписал транзакцию):

    23.png.3974897a281779cb62bc033a3b6d8a40.png

    Гарант сначала должен подписывает транзакцию (Sign) и потом транслировать её в сеть ВТС (Broadcast):

    24.png.e44a78fad1ab7449b3f8527a4cb5c06c.png

    Скрипт подписанной двумя подписями мультисиг-транзакции:

    010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fdfd0000483045022100881c196d50416cb7233fe96a41f9f938058a6e11b3f2cfc703790389626cd519022039906f77c72cc1c89e8d4783a1c290ccf5b97ea4a432abacf2d7e246639d6cf201473044022046ecfe5c3274ab70fe80760ad69221e271b77f838462c15a5f4005397368623b02205137ef85e9de9b9152afc280dee88b9f2bab54fcada48291fc6e322353be4b70014c695221030959f58c1ddc7e2a8bd64af700aa9ba8cef29a9825e951b7ea5126d6aeecbf4021039dddec76aa9c75871d44bf7b988cfa4017b1295661c309e506aa8ee1ccc7884f2103a591ad86d8450717764c7c114f4b37722d71d9e4835ea90ca15cb28b61782e0053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac773d0800

    Этот скрипт можно трансилировать в сеть ВТС прямо из кошелька, или даже через браузер, без разницы:

    https://txid.io/wallet/#broadcast

    25.thumb.png.4277e4fa8f84b32281071d8e58b87693.png

    TxID нашей транзакции: c478260f26a9a8f9cee8a887730d5c633a3cda62d66cb7557bcb833cebc6fb7d

    Скрин мультисиг-кошелька (Покупателя, Гаранта и Продавца):

    26.thumb.png.880135e40f841421eb367a9203a90c1d.png
    ____________________________________________________________________________________________________________

    Пожалуй все. Не думайте о мультиподписи как о волшебной пилюле, которая все решит за вас и обезопасит ваши ВТС. Например, если вы создатите личный кошелек по схеме 2-из-3, и потеряете один из ваших приватных ключей, то ваши ВТС не украдут, и у вас будет доступ к ним, но сразу же переводите ВТС на другой адрес, не ждите когда потеряете второй приватный ключ!

    По поводу бекапов ключей/seed-фраз. Никогда не сохраняйте их в черновиках почты, на Гуглово-Яндексо-Дропбоксовых-АйКлауд дисках и т.д. Пользуйтесь PGP, VeraCrypt и другими open source инструментами.

    Пользуйтесь мультиподписью.
    Безопасность ваших ВТС зависит только от вас.

    Спасибо за внимание,  думаю многим будет полезно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация