лаки лучано

Пользователи
  • Публикаций

    20
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Активность репутации

  1. Like
    лаки лучано получил реакцию от AL CAPONE в МАНУАЛ Bitcoin мультиподпись (Whonix + Electrum)   
    В этом мануале мы рассмотрим технологию Биткоин-мультиподписи на примере кошелька 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:
      
        В следующем окне перейдите на вкладку Server, там должна стоять галочка на Select server automatically:
       
        Теперь перейдите на вкладку Proxy и задайте настройки как на этом скриншоте:
       
        Далее кошелек предложит вам… создать новый кошелек .
            ***Примечание. Чтобы лучше понять как работает мультиподпись, и как она может защитить ваши ВТС при покупке чего то онлайн, давайте смоделируем ситуацию: вы Покупатель, нашли Продавца у которого есть нужный вам товар, сделка проводится через Гаранта.
        Покупатель создает новый мультисиг-кошелек (так мы его и назовем “Покупатель”):
       
        Выбираем Multi-signature wallet:
       
        В следующем окне нужно выбрать схему кошелька. Выбираем 2-из-3, то есть, чтобы произвести транзакцию по данному кошельку, нужно как минимум две подписи из трёх:
            ***Примечание. Все стороны данной сделки должны выбрать одинаковую схему.

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

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

       
        В следующем окне кошелек попросит ввести xpub-ключи других подписантов:
       
            ***Примечание. Все стороны сделки должны проделать эти шаги, и в этом месте обменяться своими 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-ключ Гаранта:
       
        Xpub-ключ Продавца:
       
        В следующем окне задаем пароль свому кошельку:
            ***Примечание. Этот пароль кошелек будет запрашивать при переводе средств. Если вы его забудете, то всегда сможете восстановить свой кошелек по мнемонической фразе (если вы и её не потеряли, гы-гы)

        После того как все стороны сделки ввели правильные xpub-ключи друг-друга, тогда все три кошелька будут иметь одинаковые адреса.
        “Сообразили на троих”:
       
        Обратите внимание, адрес для получения средств начинается с тройки, а не с единицы, это подтверждает что используется мультиподпись.
        Индикатор в правом нижнем углу должен загореться зеленым/синим (зависит от цвета ваше темы), а лучше кликните по нему:
       
        Мой кошелек подключен к десяти нодам, высота блокчейна 540013. Высоту блокчейна можете проверить в своем любимом эксплорере. Например лично я не люблю blockchain.com (бывший .info), он мне напонимает Роджера Вера + не работает с Tor-браузера, даже по .onion-ссылке. Так что высоту блокчейна я проверил на blockchair.com, высота совпала, а значит кошелек готов к работе.
        Ок, у всех сторон сделки кошельки готовые, Покупатель пополняет мультисиг-кошелек. Для нашего мануала берем верхний адрес: 3CPzfG4rCuujKjvNeQHmNTot29DaDrW6XS
       
       
            ***Совет Продавцам и Гарантам. После того как Покупатель отправил ВТС на мультисиг-кошелек, и вы видите что транзакция попала в мемпул, не спешите отправлять товар/услугу Покупателю, дождитесь минимум три подтверждения в сети ВТС.
        Продавец отправил товар Покупателю. После проверки товара, Покупатель остается недовльным качеством товара и обвиняет Продавца в несоблюдении условий сделки, открывается спор, где стороны будут предоставлять пруфы, и последнее слово за Гарантом и его xpub-ключом.
        Припустим, что Продавец схитрил и действительно нарушил условия сделки. Гарант принимает сторону Покупателя. ВТС будут возвращены на личный кошелек Покупателя.
        Покупатель создает транзакцию, где указывает свой личный ВТС-кошелек: 1EjaE6fsrsLEatJ1CJdXDaJ31SdBqDRy8Q
       
        Можно нажать на Preview, чтобы убедиться в правильности личного адреса кошелька и посмотреть другие детали будущей транзакции:
       
        Copy –- на данном этапе скопирует в буфер обмена скрипт неподписанной транзакции.
        После каждого шага я буду постить ВТС-скрипты, чтобы вы видели как они меняются при добавлении каждой подписи. Проверить их можно например здесь: https://txid.io/wallet/#verify или здесь: https://brainwalletx.github.io/#tx (вкладка Transactions – > Raw Transaction)
        Скрипт неподписанной транзакции:
        010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fd0c010001ff01ff01ff4d0201524c53ff0488b21e00000000000000000030ba3ded0764b2ac8c0fd0a1edb62908ea06a1339ef30781898a70482c2008bd039fec5737b12780a9ca81893df3d70e34b77c9aa407eab62b24b1d33b6a67fcf8000000004c53ff0488b21e0000000000000000008cb45bb0fd86b39e748d630325607cebc3519db3c931dd4c0692e5797a81a97202e7b71d6117cb56a07b6df6c97f786bca9a01327b7d2b392b8cf95ed3769f0e40000000004c53ff0488b21e0000000000000000006de36390b85288406f856e85a93c5dc66fdc5045450658b015b542d09f93744c02cdbf5c70ccf9b92247f3ac2f6b6bbd330685bc3c0dd84133b46ce4cd0cbbc16a0000000053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac733d0800
        Export –- экспортирует тот же скрипт сразу в текстовый файл .txn, который потом можно импортировать в другой кошелек для последующей подписи.
        Если все сходится, нажмите на Sign, кошелек запросит ваш пароль, после его ввода вы подпишите данную транзакцию xbub-ключом Покупателя:
       
        Видите? Status signed (1/2), а кнопка Sign уже неактивна. Copy и Export выполняют теже функции что и в предыдущем шаге.
        Вот скрипт подписанной транзакции xpub-ключом Покупателя:
        010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fd530100483045022100881c196d50416cb7233fe96a41f9f938058a6e11b3f2cfc703790389626cd519022039906f77c72cc1c89e8d4783a1c290ccf5b97ea4a432abacf2d7e246639d6cf20101ff01ff4d0201524c53ff0488b21e00000000000000000030ba3ded0764b2ac8c0fd0a1edb62908ea06a1339ef30781898a70482c2008bd039fec5737b12780a9ca81893df3d70e34b77c9aa407eab62b24b1d33b6a67fcf8000000004c53ff0488b21e0000000000000000008cb45bb0fd86b39e748d630325607cebc3519db3c931dd4c0692e5797a81a97202e7b71d6117cb56a07b6df6c97f786bca9a01327b7d2b392b8cf95ed3769f0e40000000004c53ff0488b21e0000000000000000006de36390b85288406f856e85a93c5dc66fdc5045450658b015b542d09f93744c02cdbf5c70ccf9b92247f3ac2f6b6bbd330685bc3c0dd84133b46ce4cd0cbbc16a0000000053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac773d0800
        Этот же скрипт нужно передать Гаранту на подпись.
        Смотрим кошелек со стороны Гаранта. Выбираем Tools → Load transaction – и выбираем нужный вариант. Самый удобный (имхо) from text, то есть – копипаст скрипта:
       
        После того как Гарант загрузит транзакцию (Load transaction), он увидит то же окно, что и Покупатель (после того как он подписал транзакцию):
       
        Гарант сначала должен подписывает транзакцию (Sign) и потом транслировать её в сеть ВТС (Broadcast):
       
        Скрипт подписанной двумя подписями мультисиг-транзакции:
        010000000115aef7d989bd3916e33e8e842462419e19f6d49d5ddf29c9d619d368c8eafd4a01000000fdfd0000483045022100881c196d50416cb7233fe96a41f9f938058a6e11b3f2cfc703790389626cd519022039906f77c72cc1c89e8d4783a1c290ccf5b97ea4a432abacf2d7e246639d6cf201473044022046ecfe5c3274ab70fe80760ad69221e271b77f838462c15a5f4005397368623b02205137ef85e9de9b9152afc280dee88b9f2bab54fcada48291fc6e322353be4b70014c695221030959f58c1ddc7e2a8bd64af700aa9ba8cef29a9825e951b7ea5126d6aeecbf4021039dddec76aa9c75871d44bf7b988cfa4017b1295661c309e506aa8ee1ccc7884f2103a591ad86d8450717764c7c114f4b37722d71d9e4835ea90ca15cb28b61782e0053aefeffffff02c6aa01000000000017a914757141eeed0531e19eec5aa0f0b02b37bcceeda587a0f70300000000001976a91496a6d752a7d5746945c42a1be40648932de685c388ac773d0800
        Этот скрипт можно трансилировать в сеть ВТС прямо из кошелька, или даже через браузер, без разницы:
        https://txid.io/wallet/#broadcast
       
        TxID нашей транзакции: c478260f26a9a8f9cee8a887730d5c633a3cda62d66cb7557bcb833cebc6fb7d
        Скрин мультисиг-кошелька (Покупателя, Гаранта и Продавца):
       
        ____________________________________________________________________________________________________________
        Пожалуй все. Не думайте о мультиподписи как о волшебной пилюле, которая все решит за вас и обезопасит ваши ВТС. Например, если вы создатите личный кошелек по схеме 2-из-3, и потеряете один из ваших приватных ключей, то ваши ВТС не украдут, и у вас будет доступ к ним, но сразу же переводите ВТС на другой адрес, не ждите когда потеряете второй приватный ключ!
        По поводу бекапов ключей/seed-фраз. Никогда не сохраняйте их в черновиках почты, на Гуглово-Яндексо-Дропбоксовых-АйКлауд дисках и т.д. Пользуйтесь PGP, VeraCrypt и другими open source инструментами.
        Пользуйтесь мультиподписью.
        Безопасность ваших ВТС зависит только от вас.
        Спасибо за внимание,  думаю многим будет полезно.