Bitcoin мультиподпись (Whonix + Electrum)

Shotdown

Exploit Developer
Joined
Jun 18, 2016
Messages
552
Reaction score
143
В этом теме мы рассмотрим технологию Биткоин-мультиподписи на примере кошелька 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:​
С 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:
View attachment 8073
В следующем окне перейдите на вкладку Server, там должна стоять галочка на Select server automatically:
View attachment 8074
Теперь перейдите на вкладку Proxy и задайте настройки как на этом скриншоте:

View attachment 8075


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

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

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

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

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

View attachment 8080
Далее, выбираем создать новую мнемоническую фразу (Create a new seed):
View attachment 8081
Выберите тип адресов которые будут использоваться в вашем мультисиг-кошельке. Все стороны сделки должны выбрать один и тот же тип адресов. Выбираем Standard:

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

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

***Примечание. Master public key, не содержит в себе секретных данных, которые могут нанести ущерб вашим ВТС. Им можно делиться с другими. А сохранить его как раз для этого и нужно, чтобы потом поделиться им с другими сторонами сделки (подписантами).
View attachment 8085
В следующем окне кошелек попросит ввести xpub-ключи других подписантов: View attachment 8086
**Примечание. Все стороны сделки должны проделать эти шаги, и в этом месте обменяться своими xpub-ключами.
Имя кошелькам можно задавать любые. Оставляю вам мнемонические фразы. Кто будет быстрее всех, того ждет маленький приз –- понимание как работает мультисиг
wink.png
.

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-ключ Гаранта:

View attachment 8087
Xpub-ключ Продавца:
View attachment 8088
В следующем окне задаем пароль свому кошельку:

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

View attachment 8100


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

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

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

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

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

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

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

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

Спасибо за внимание.
 
Last edited:

vibvip

New member
Joined
Nov 27, 2004
Messages
2
Reaction score
0
"Cool setup you got there, using Whonix for anonymity and Electrum for a more secure wallet. Have you looked into using Tor with Electrum directly, or do you think Whonix's VPN is enough for your needs?"
 

asasd12

New member
Joined
Aug 23, 2017
Messages
3
Reaction score
0
"Yo, just wanted to chime in - I've been using Whonix with Electrum for a bit now and it's been solid. The extra layer of anonymity is a nice feel-good, but I gotta ask, is мультиподпись (multi-signature) actually worth the added hassle? Anyone got experience with it and can give some insights?"
 

default666

New member
Joined
May 24, 2017
Messages
4
Reaction score
0
"Been experimenting with Whonix and Electrum myself. I found that combining the two for Bitcoin transactions is a solid way to add an extra layer of anonymity, but the setup can be a bit of a beast to get running smoothly. Has anyone else here had issues with the Tor bridge? "
 
Top