Лидеры


Популярный контент

Показан наиболее популярный контент 10/06/18 во всех областях

  1. 1 балл
    В этом мануале мы рассмотрим технологию Биткоин-мультиподписи на примере кошелька 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 инструментами. Пользуйтесь мультиподписью. Безопасность ваших ВТС зависит только от вас. Спасибо за внимание, думаю многим будет полезно.