Подписание транзакций в оффлайн-режиме


ВНИМАНИЕ!!!

Данный материал НЕ ЯВЛЯЕТСЯ обязательной рекомендацией по настройкам «холодного хранения» ввиду высокой сложности и столь же высокой вероятности возникновения ошибок, а также необходимости в использовании универсального компьютера для подписания транзакций (даже в оффлайн-режиме).

Материал опубликован исключительно в образовательных целях, чтобы понять, что необходимо сделать, чтобы подписать транзакцию в оффлайн-режиме. В большинстве случаев рекомендуется использовать аппаратный кошелёк, такой как Trezor или Ledger.

Примечание

Данное руководство было опубликовано гостем под ником crocket.

Процесс подписания транзакций в оффлайн-режиме включает в себя следующие шаги:

  • создание неподписанной транзакции в подключённом к сети, но предназначенном только для просмотра кошельке (view only);
  • перенос неподписанной транзакции на компьютер, находящийся в оффлайн-режиме;
  • подписание неподписанной транзакции на компьютере, находящейся в оффлайн-режиме;
  • перенос подписанной транзакции обратно в подключённый к сети, предназначенный только для просмотра кошелёк;
  • ретрансляция транзакции.

Создание нового оффлайн кошелька

Для создания нового оффлайн кошелька используется команда

monero-wallet-cli --generate-new-wallet /path/to/wallet-file

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

Создание нового оффлайн кошелька, использующего замещающую мнемоническую фразу фразу-пароль

Мнемоническая фраза и замещающая её фраза-пароль могут быть объединены для создания новой мнемонической фразы. Обе фразы можно хранить в разных местах, чтобы злоумышленник не смог похитить ваши средства, не украв для этого одновременно мнемоническую фразу и замещающую её фразу-пароль. Для создания замещающую мнемоническую фразу фразы-пароля я рекомендую использовать от 6 до 8 (английских) слов, поскольку одно английское слово в среднем обеспечивает 11-битную энтропию, а 8 слов уже предполагают наличие энтропии в 88 бит. При помощи такой фразы-пароля также можно создавать фальшивые кошельки, в которых будет храниться совсем небольшая сумма, что защитит вас от вымогателей, которым захочется заполучить ваши деньги.

Если вы хотите создать оффлайн кошелёк, использующий мнемоническую фразу и замещающую её фразу-пароль, создайте оффлайн кошелёк, запишите мнемоническую фразу на бумаге, удалите файл кошелька, сгенерируйте замещающую мнемоническую фразу фразу-пароль, запишите её на бумаге и введите команду

monero-wallet-cli --generate-new-wallet /path/to/wallet-file \
---restore-deterministic-wallet

Чтобы восстановить кошелёк, воспользовавшись мнемонической фразой и замещающей её фразой-паролем. После того, как вы восстановите кошелёк с помощью мнемонической фразы, вы сможете ввести замещающую её фразу-пароль.

Фразу-пароль следует генерировать на компьютере, находящемся в оффлайн-режиме, или метод Diceware, так как люди не особо сильны в создании надёжных паролей.

Если вы захотите восстановить существующий оффлайн кошелёк, на который были получены или с которого были отправлены транзакции, вам придётся предпринять дополнительные шаги, см. раздел Восстановление оффлайн кошелька.

Создание нового кошелька, предназначенного только для просмотра

Чтобы создать кошелёк, предназначенный только для просмотра, следует скопировать основной адрес и секретный ключ просмотра оффлайн кошелька и перенести его на компьютер, подключённый к сети, на котором будет создан кошелёк предназначенный только для просмотра. Основной адрес оффлайн кошелька можно получить, введя в нём команду address, а секретный ключ просмотра выводится командой viewkey.

Для переноса данных с оффлайн кошелька на кошелёк предназначенный только для просмотра можно воспользоваться картой microSD и двумя USB считывателями для карт microSD. Также можно использовать обычный USB-накопитель.

Чтобы создать кошелёк предназначенный только для просмотра, введите команду

monero-wallet-cli --generate-from-view-key /path/to/wallet-file \
--daemon-address remote-node-address:port

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

Запуск оффлайн кошелька

Введите команду

monero-wallet-cli --wallet-file /path/to/wallet-file

Запуск кошелька предназначенного только для просмотра

Введите команду

monero-wallet-cli --wallet-file /path/to/wallet-file \
--daemon-address remote-node-address:port

Синхронизация кошелька через сеть Clearnet безопасна. Если вы хотите транслировать транзакцию, не раскрывая своего IP-адреса, введите команду

monero-wallet-cli --wallet-file /path/to/wallet-file \
--daemon-address tor-or-i2p-remote-node-address:port \
--proxy 127.0.0.1:tor-or-i2p-port

Синхронизация кошелька по сети Clearnet происходит гораздо быстрее, чем через Tor или i2p. Поэтому, рекомендуется выполнять синхронизацию именно через Clearnet, даже если вы транслируете транзакции через Tor или i2p.

Подписание транзакций в оффлайн-режиме

Введите любую команду кошелька, используемую для передачи Monero по какому-то адресу. Например:

transfer xmr-address amount-of-xmr-to-send

При использовании любой команды передачи средств в кошельке, предназначенном только для просмотра, приведёт к созданию unsigned_monero_tx в текущей рабочей директории.

Следует переместить unsigned_monero_tx на компьютер, работающий в оффлайн-режиме, на который был установлен оффлайн кошелёк.

Введите команду

sign_transfer

Это делается в оффлайн кошельке в директории, в которой находится unsigned_monero_tx. Файл signed_monero_tx создаётся в текущей рабочей директории. Затем файл signed_monero_tx переносится на компьютер, подключённый к сети, на котором установлен кошелёк предназначенный только для просмотра. Запустите кошелёк предназначенный только для просмотра в директории, в которой находится signed_monero_tx, и введите команду

submit_transfer

Поскольку кошелёк предназначенный только для просмотра не использует образы ключей, он не видит исходящих транзакций. Чтобы у него появилась такая возможность, требуется экспортировать новые выходы, созданные командой submit_transfer, в оффлайн кошелёк, который создаст образы ключей из новых выходов.

В кошельке предназначенном только для просмотра введите команду

export_outputs outputs

Переместите файл outputs на компьютер, находящийся в оффлайн-режиме, на котором установлен оффлайн кошелёк. Запустите оффлайн кошелёк и введите команду

import_outputs /path/to/outputs

Экспортируйте образы ключей, выведенные на основе новых выходов, путём выполнения команды

export_key_images key_images

В оффлайн кошельке. Переместите файл key_images на компьютер, на котором установлен кошелёк предназначенный только для просмотра. Запустите этот кошелёк и введите команду

import_key_images /path/to/key_images

Обновление программного обеспечения кошелька на компьютере, используемом для подписания в оффлайн-режиме

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

Вместо этого следует загрузить установочную среду ОС, стереть файловые системы, а затем подключиться к сети интернет и снова всё установить с нуля.

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

Восстановление кошелька предназначенного только для просмотра

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

Восстановить оффлайн кошелёк на основе мнемонической фразы (или замещающей её фразы-пароля) путём ввода команды

monero-wallet-cli --generate-new-wallet wallet-file --restore-deterministic-wallet

Новый оффлайн кошелёк не позволяет подписывать новые транзакции, поскольку у него нет всех выходов транзакций, которые предшествовали ещё неподписанной транзакции. Поэтому, сначала необходимо импортировать все выходы из кошелька, предназначенного только для просмотра.

В кошельке предназначенном только для просмотра, который был создан на основе оффлайн кошелька, введите команду

export_outputs all all_outputs

Важно указать all, поскольку команда export_outputs экспортирует только новые выходы, которые ранее не экспортировались, а при использовании export_outputs all будут экспортированы все выходы. Файл all_outputs следует перенести на компьютер, находящийся в оффлайн-режиме, на который установлен оффлайн кошелёк.

Ведите команду в новом оффлайн кошельке

import_outputs /path/to/all_outputs

Восстановление кошелька предназначенного только для просмотра

Если вы хотите восстановить свой кошелёк, предназначенный только для просмотра, учтите, что, поскольку он не использует образы ключей, он не может видеть исходящие транзакции. А так как он не видит исходящие транзакции, он будет показывать неверный баланс на счёте. Поэтому, требуется импортировать все образы ключей из соответствующего оффлайн кошелька.

Введите в оффлайн кошельке команду

export_key_images all all_key_images

Просто export_key_images не работает, поскольку экспортирует только новые образы ключей, которые не экспортировались ранее.

export_key_images all экспортирует все образы ключей. Переместите файл all_key_images на компьютер, на который установлен кошелёк предназначенный только для просмотра. Введите команду

import_key_images /path/to/all_key_images