Холодный кошелек для Bitcoin и Ethereum с воздушным зазором

Ответить
Аватара пользователя
cemehbl4
Newbie
Сообщения: 14
Зарегистрирован: 10 май 2022, 18:27

Холодный кошелек для Bitcoin и Ethereum с воздушным зазором

Сообщение cemehbl4 »

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

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

Ознакомьтесь:
1) После запуска системы теперь появляется диалоговое окно подключения к Tor. На этапе первоначальной настройки нам нужен интернет для скачивания кошельков. Выбираем Connect to Tor automatically >> Configure a Tor bridge, нажимаем Connect to Tor. В следующем окне - Ask for a Tor bridge by email.
Изображение
Изображение
Далее необходимо отсканировать QR-код с настройками мостов Tor. Получить настройки можно двумя способами:

- Непосредственно на сайте Tor Project. Вводим капчу, сканируем QR-код смартфоном и передаем в Tails с помощью обычного приложения для сканирования/генерации QR - например, SecScanQR.

- С помощью отправки пустого email на адрес bridges@torproject.org, в ответ получите настройки мостов и заветный QR.

2) Кошелек Electrum теперь подписывается тремя ключами разработчиков, но отпечаток основной подписи не изменился.
Изображение
3) zbarcam теперь устанавливать не нужно, он уже есть в системе. Следовательно даже не нужно задавать временный пароль администратора, поскольку ничего лишнего не устанавливаем.

4) Настройка офлайна теперь осуществляется при запуске в Additional Settings >> Offline mode.
Изображение
5) В MyCrypto, как выяснилось, нельзя использовать мнемоническую фразу, если использовать блокчейн, добавленный вручную. Например, BSC или Polygon. В этом случае используйте опцию Keystore File при создании кошелька, придется записать на бумагу приватный ключ, а не слова, сохранить его в KeePassXC, а созданный json-файл удалить. Вход в кошелек производится через опцию Private Key.

Пример добавления Smart Chain с помощью опции Add Custom Node:
Изображение
Значения Chain ID для различных блокчейнов можно найти на https://chainlist.org.

6) Обязательно проверьте вход в созданные кошельки, введя сид/приватный ключ с бумажного носителя.

7) Экспортировать очень большую биткоин транзакцию в QR-код не всегда возможно из-за ограничения на количество данных в одном коде. Это может произойти, если вы часто получаете небольшие транзакции, например, вознаграждения за майнинг на пуле. В этом случае необходимо на онлайн системе экспортировать транзакцию в файл psbt, вместо QR, передать файл в Tails, подписать транзакцию из файла, экспортировать подписанную транзакцию в файл psbt, и передать на онлайн компьютер.

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

Нам понадобится приложение QRStream и простые скрипты в Tails, которые можно взять отсюда https://github.com/xloem/qrstream.

Приложение имеет спартанский вид и не богато настройками:
Изображение
Предварительно нужно вычислить хэш sha256 файла с неподписанной транзакцией на онлайн компьютере:

Код: Выделить всё

sha256sum unsigned.psbt
# вместо unsigned.psbt - имя файла вашего файла транзакции
И передать файл на смартфон.

В приложении QRStream выбираем нашу неподписанную транзакцию в меню Send File.
Изображение
Клавишами громкости можно отрегулировать размер QR-кодов, тут всё зависит от камеры, которая будет коды принимать. Чем крупнее каждый код, тем их соответственно больше. После регулировки, обратите анимание на параметр blocksize в приложении, он понадобится в Tails.

Для приема QR-потока в Tails:

Код: Выделить всё

cd Persistent/Tor\ Browser/

zbarcam --raw | iconv -f UTF-8 -t ISO-8859-1 | while true; do dd bs=718 count=1 status=none | head -c -1; done > unsigned.psbt

# 718 - это значение blocksize в приложении на смартфоне + 1
# unsigned.psbt - имя файла в который будет сохранен поток
Запустится zbarcam, остается прицелиться, чтобы получить зеленую рамку по периметру QR-кода (значит, код принят) и нажимать кнопку Advance в приложении для перехода к следующему QR. По завершении закройте окно zbarcam и нажмите ctrl+C, чтобы остановить процесс записи в файл. С первого раза не получится, это нормально. В моём тесте я передал файл размером 35 КБ с помощью 51 кода, передача заняла около минуты.

Вычислите хэш полученного файла, он должен совпадать с полученным ранее на онлайн системе:

Код: Выделить всё

sha256sum unsigned.psbt
Если не совпало, значит какой-то из QR-кодов либо не отсканировался, либо отсканировался дважды, придется по новой. Если всё в порядке, импортируем полученный файл в Electrum, подписываем транзакцию, экспортируем готовую транзакцию в файл.

Для передачи транзакции на смартфон выбираем в приложении QRStream "Receive QR Stream". Для работы приложения нужно установить Barcode Scanner, на него ведет ссылка из приложения QRStream. Play Market может ругаться на слишком новую версию Android, но приложение без проблем можно скачать и установить с GitHub.

В Tails используем скрипт:

Код: Выделить всё

signed.psbt -b 367 'Code #' -a 4 --numeric-suffixes=1 --filter='clear; echo $FILE; qr; read </dev/tty'

# скрипт немного изменен, используется утилита qr вместо qrencode
# signed.psbt - это имя файла, в который вы сохранили подписанную транзакцию
# 367 - размер QR-кода, по аналогии с настройкой передачи со смартфона на компьютер
Появится первый QR-код, сканируем, нажимаем enter для вывода следующего. Приложение QRStream не позволит отсканировать один и тот же код дважды, так что эта операция проще предыдущей.

Переданный файл сохранится под именем qrstream в папке /storage/emulated/0/Android/data/com.github.xloem.qrstream/cache/

Да, сложно, но вполне можно приноровиться. Слава богу, что это нужно достаточно редко. Ну и, повторюсь, передачу файла через флэшку никто не отменял.

Я очень долго искал, и QRStream - единственный полноценный (но весьма неудобный) вариант для решения подобной задачи. Если знаете еще какие-то рабочие варианты передачи потокового QR, напишите в комментариях или в мой чат. Пользователям iOS могу только посочувствовать, есть старый проект https://github.com/divan/txqr, там даже весьма впечатляющее демо, но в AppStore приложение отсутствует.

Статья будет обновляться, оригинал опубликован на Slabber.
Ответить

Вернуться в «Уголок Семеныча»