Pages:
Author

Topic: Как хранить seed в блокчейне биткоина (гайд) - page 4. (Read 1252 times)

sr. member
Activity: 728
Merit: 317
Crypto Casino & Sportsbook
Игорь, благодарю Вас за то что потрудились и составили для нас гайд! + 2WO`s мерита вам!!  Wink
full member
Activity: 644
Merit: 135
1  чем это надёжнее NXT?

2  по сути это экв. краже шифрованного wallet.dat - только тут уже красть даже не надо...


То есть всё сводиться по сути к надёжности парольной фразы - с таким-же успехом можно просто хранить свой шифрованный wallet.dat на открытом форуме...  (если пароль надёжен, то вроде как пока покупатели кладов обламываются? )


Ps  подумайте лучше вот над чем:
 - любой кусок пароля(даже из открытых данных, не говоря о паспортных!) всё равно добавляет какую-то энтропию, и если их достаточно много, то перебирать замучишься там будет более 256 бит экв."чистой" энтропии, легко!   Ну длина пароля при этом может быть хоть 2500 бит - всё равно ведь легко будет запомнить комбинацию из известных данных которые никогда не забываешь(адрес там, имя и тд - особенно если старый адрес уже отсутствует в паспортных базах и тд)
 - в принципе как-то ограничивать скорость перебора - допустим пароль разбит на 10 частей и храниться на 100 серверах(для надёжности каждый из них ещё продублирован раз 10), по вводу какого-то номера и ключа каждый выдает какую-то перекодированную инфу, но с задержкой скажем 1 сек - в этом случае более 1 варианта в сек просто не переберёшь никак, даже если есть мощный комп!..   (то есть опять-таки идея физ.доступа - что _всё равно нынче вынужденно используется в аппаратных кошельках и для биткойна_, может в этом есть какой-то глубокий смысл?.. )
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
В этом посте по пожеланию одного из пользователей форума я напишу инструкцию, как можно хранить резервную копию сид-фразы в блокчейне биткоина. Это не перевод и не пересказ (такая тема мне не встречалась), а только моя версия, как это можно сделать, поэтому конструктивная критика приветствуется. Ничего интересного и нового здесь не будет, просто собраны описания нескольких известных приемов для решения данной задачи. Дисклеймер: так как я не могу гарантировать 100% безопасность и работоспособность этого метода в будущем, я не могу советовать вам его использовать. Короче говоря, если что - я не виноват ). Сам я этот способ буду использовать как резервный и со страховкой. Страховкой служит надежная парольная фраза к сиду (известная как passphrase или 13-е (25-е) слово), которая, естественно, хранится отдельно в офлайне (и в голове). С хорошей парольной фразой даже при компрометации 12 (24) слов, взломать весь сид практически нереально.




Сид-фразу мы поместим в блокчейн транзакцией с опкодом OP_RETURN, который позволяет отправить до 80 байт произвольной информации.

1. Шифруем сид и получаем 16-ричную строку.

Так как работаем с сидом, нужно обезопаситься и использовать "холодный" компьютер. Допустим, что у меня такого нет, поэтому я физически отключил интернет и загрузился с флешки Tails (это такая анонимная и безопасная операционная система (linux) на флешке, если кто не знает).

Создаем текстовый файл seed.txt с сид-фразой (возьмем такую - runway exist coconut cinnamon attack laptop oil wild yellow drink lawn cattle), чтобы сократить строку, оставляю по 4 первые буквы каждого слова (этого достаточно для однозначной идентификации) и убираю пробелы (получилось runwexiscococinnattalaptoil_wildyelldrinlawncatt), сохраняем файл. Из этой папки запускаем терминал и даем команду:
Code:
openssl enc -aes-256-cbc -in seed.txt -out enc.txt -nosalt -k bitcointalk -iter 21000000
Тут я поставил плохой пароль bitcointalk для примера, в реальности нужно выбрать хороший пароль, длинный (символов 12 хотя бы), уникальный, но желательно легко запоминающийся. 21000000 - это число итераций функции pbkdf2, такое огромное поставил, потому что я его легко вспомню, а главное - это сильно замедляет кодирование/декодирование (мой старенький комп почти 2 минуты шифровал/расшифровывал), что делает нереальным брутфорс и позволяет использовать не очень сложный пароль. Так, получили файл с шифрованным сидом, теперь нужно получить последовательность байтов (дамп). Даем команду:
Code:
xxd -ps -c 1000 enc.txt enc_hex.txt
-c 1000 здесь - число колонок, поставил от фонаря побольше (можно было 80 поставить), без этого ключа будет разбивать по 32 байта на строку, а нам нужно одной строкой. Сохраняем файл enc_hex.txt на флешку или жесткий диск компа, выключаем, вынимаем флешку, включаем интернет и загружаем обычную систему.

2. Нам нужно озаботиться тем, чтобы транзакцию с шифровкой потом нетрудно было найти. Можно, наверное, придумать разные варианты, можно ее просто записать, но я стремился ничего не записывать и поэтому выбрал вариант с созданием адреса из хеша любимого слова/фразы и последующим поиском адреса в блок-эксплорере. Для этого я использовал этот brainwallet (можно любой другой), там в поле "Brain Wallet Input" вводим незабываемое слово-ключ, например имя любимой тещи, собаки итп, здесь секьюрность не важна, если украдут этот ключ, то и на здоровье. Для примера я ввел слово bitcointalk, получаем приватник L1AHAuRLxZ14PspT4UjooZa3Jx2Y9hcKfuQpC19b4AqHq8V12u9o, импортируем его в Electrum (созданием нового кошелька из приватника, я предпочитаю bech32-адрес, поэтому импортирую с соответствующим префиксом p2wpkh:L1AHAuRLxZ14PspT4UjooZa3Jx2Y9hcKfuQpC19b4AqHq8V12u9o, в принципе, можно и легаси - особой разницы нет). Получили адрес bc1qc0kwr8clxgj63dp77sr4ql9zhexq2a6aw85ltw, перевели на него 300 сатоши (для сегвит-адреса и записи одного сида этого хватит, даже с запасом) ). С этого адреса сейчас будем отправлять транзакцию с OP_RETURN. Можно было и сразу это сделать, но я разбил на две транзакции для наглядности.

3. Копируем шестнадцатеричную строку из сохраненного в 1-м пунуте файла enc_hex.txt и в Electrum формируем транзакцию, поле "Pay to" заполняем так:
Code:
OP_RETURN наша_строка, 0
(запятую с нулем в конце не забываем).



Отправляем. Вот моя транзакция: https://www.blockchain.com/ru/btc/tx/0e0546d004f3373822178ceddb3084247912e400b75e5971e66522f6b398f123



Теперь - как восстановить исходный сид?

4. Вспоминаем ключевое слово (bitсointalk в моем примере) и получаем адрес (как во 2-м пункте). Адрес вставляем в блок-эксплорер и легко находим нашу транзакцию. Жмем на нее, открываются детали, и внизу страницы видим наш зашифрованный сид 3222e79b5c94efcea7b8e1704e1bdd8fb9257baf7bbecf1a9bb5b5a5b8da094ad570dddc7754220 c2e2359081956d238ba24429639c90b2348f15f052617aab8. Сохраняемем эту строчку в текстовый файл (у меня enc_hex.txt) и переносим его на флешку.

5. Выключаем интернет, перезагружаемся в Tails. Там копируем с флешки файл с шифровкой, запускаем из папки с файлом терминал и даем команду:
Code:
xxd -ps -r enc_hex.txt enc.txt
Затем такую:
Code:
openssl enc -aes-256-cbc -d -in enc.txt -out seed.txt -nosalt -k bitcointalk -iter 21000000

(значение параметра -iter обязательно должно совпадать с тем, которое использовали при шифровании, поэтому важно его не забыть, лучше записать где-нибудь).
Всё, открываем файл seed.txt и переписываем на бумажку сид-фразу (разделяя слова по четыре буквы).


И последнее. Если вам необходимо сохранить сид-фразу из 24-слов, то они так просто не влезут в 80 байт. В этом случае шестнадцатеричную строку шифровки следует разбить на две части и создать два выхода OP_RETURN. Либо взять не мнемонику сид-фразы, а энтропию в iancoleman-конвертере, тогда получится ровно 80 байт.



p.s. Если кто-то хочет повторить, потренируйтесь сначала в тестнете, старайтесь не захламлять блокчейн бесполезным мусором.
Pages:
Jump to: