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

У вас есть 2 компьютера. Один на 100% оффлайн и, следовательно, ему доверяют. Другое в сети. Закрытые ключи хранятся на автономном компьютере, и онлайн-компьютер не имеет к ним доступа. Есть ли способ подписать транзакцию с помощью офлайн-компьютера, а затем вручную (набрав клавиатуру) передать ее на онлайн-компьютер, чтобы он передал ее в блокчейн?

Я написал руководство на основе командной строки, как создавать транзакции Ethereum в автономном или полуавтономном режиме (вы все равно запрашиваете у сети одноразовый номер и цену на газ): tokenmarket.net/blog/…

Ответы (5)

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

  1. Перейдите на вкладку «Оффлайн-транзакция» через свой онлайн-компьютер. Здесь вы будете генерировать текущую цену на газ и одноразовый номер.

  2. Введите адрес ОТ в поле. Обратите внимание, что это адрес, ОТ которого вы отправляете, а не КОМУ. Это генерирует одноразовый номер и цену газа.

  3. Перейдите на офлайн-компьютер. Введите АДРЕС КОМУ и СУММУ, которую вы хотите отправить.

  4. Введите ЦЕНУ НА ГАЗ, как она была показана вам на вашем онлайн-компьютере на шаге № 1.

  5. Значение GAS LIMIT по умолчанию равно 21000. Это покрывает стандартную транзакцию. Если вы отправляете на контракт или включаете дополнительные данные с вашей транзакцией, вам нужно будет увеличить лимит газа. Любой лишний газ будет возвращен вам.

  6. Введите NONCE, как это было показано на вашем онлайн-компьютере на шаге № 1. Если хотите, введите некоторые данные. Данные необязательны. Если вы вводите данные, вам нужно будет включить более 21 000 лимита газа по умолчанию. Все данные в формате HEX. Выберите файл кошелька или введите/вставьте свой закрытый ключ и разблокируйте кошелек.

  7. Нажмите кнопку «СОЗДАТЬ ПОДПИСАННУЮ ТРАНЗАКЦИЮ».

  8. Поле под этой кнопкой будет заполнено вашей подписанной транзакцией. Скопируйте это и переместите обратно на свой онлайн-компьютер, или вы можете использовать предоставленный QR-код.

  9. На своем онлайн-компьютере вставьте подписанную транзакцию в текстовое поле на шаге 3 и нажмите «ОТПРАВИТЬ ТРАНЗАКЦИЮ». Это будет транслировать вашу транзакцию.

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

drcode на Reddit создал инструмент для декодирования подписанной транзакции, чтобы вы могли убедиться, что он делает то, что говорит.


К вашему сведению, все в MyEtherWallet почти на 100% отключено от сети. Единственное, что покидает ваш компьютер при отправке, это подписанная транзакция , которая генерируется вашим браузером. Мы также получаем одноразовый номер и цену газа, поэтому вы должны генерировать эти биты информации онлайн.

Я себе что-то подобное поставил. Я купил глупый простой ноутбук, на котором работает узел, который по понятным причинам не подключается к сети и никогда не был в сети. Я использую это устройство для подписи транзакций неофициальным методом RPC eth.signTransaction. Затем вы берете результат этого метода и записываете его на USB-накопитель, перемещаете содержимое на другой компьютер и отправляете транзакцию с использованием файла eth.sendRawTransaction.

Поскольку компьютер, находящийся в автономном режиме, не может определить одноразовый номер (он не имеет никакого состояния и будет думать, что одноразовый номер всегда равен 0), поэтому вы всегда должны сами указывать правильный одноразовый номер; это не так сложно, вам просто нужно сделать это eth.getTransactionCount(addr)на компьютере, у которого есть доступ к Интернету.

Познавательно, спасибо. Назовите меня параноиком, но ваш компьютер все еще открыт для вируса, который передается через флешку. В идеале автономная машина может отправлять данные онлайновой машине, но не наоборот.
Вы можете ввести шестнадцатеричный код, если хотите (вероятно, нет), или использовать какой-либо другой инструмент для защиты этого процесса.
@Джеффри В.: +1, интересно ... Можете ли вы отредактировать свой ответ, чтобы немного рассказать о том, что такое объявление в этом случае? Когда он поднимается? Увеличивается на 1? Какова роль этого одноразового номера и т. д. Я спрашиваю об этом, потому что я один из первых пользователей Ethereum и понятия не имел, что здесь есть одноразовый номер: поэтому я прочитал ваш ответ и внезапно услышал об этом одноразовом номере и действительно понятия не имею, что это такое. около.
Пожалуйста, напишите новый вопрос, и я буду рад ответить :-)
@CedricMartin Это может помочь с одноразовым номером ethereum.stackexchange.com/q/1172/42

Если вы можете установить Node.jsна свой автономный компьютер и скопировать некоторые файлы javascript (с зависимостями модулей, которые были получены на онлайн-компьютере с помощью npm), то на ум приходят две похожие библиотеки. Любая из которых может быть использована для подписи необработанной транзакции.

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

библиотеки :

  • ethereumjs-tx
    • очень популярная и де-факто стандартная библиотека для использования
  • ethereumjs-tx-знак
    • делает в основном то же самое
    • imho, я думаю, что API проще в использовании... особенно для таких вещей, как:
      • проверка подписи
      • декодирование необработанных транзакций обратно в удобочитаемые структуры данных
    • его установленный размер на порядки меньше

общедоступные шлюзы Ethereum :

Я использую сейчас следующий метод. На отключенном от сети компьютере с проверенной загруженной версией myetherwallet и закрытым ключом, сохраненным в Keepass. У меня есть общедоступный адрес отправителя, доступный на моем смартфоне. На своем смартфоне на офлайн-странице mew я ввожу адрес отправителя, чтобы получить одноразовый номер и цену газа. Я вручную ввожу эти данные на моем автономном компьютере. Я ввожу адрес назначения на своем автономном компьютере (вы можете отсканировать его с помощью qr-пистолета), я генерирую транзакцию и подписываю ее. Я копирую и вставляю код в QtQr, чтобы создать QR-код. (По какой-то причине qr-код, сделанный из mew, был слишком маленьким) Я сканирую этот код своим смартфоном и транслирую его на etherscan или myetherwallet.

Создание базовых транзакций с использованием некоего эзотерического «автономного графического интерфейса» MyEtherWallet (который должен быть подключен к Интернету и, таким образом, является «онлайн-графическим интерфейсом», несмотря на вводящее в заблуждение название) не представляет особой ценности или достижения. Etherscan предоставлял эту функциональность задолго до MEW.

Что БЫЛО бы впечатляющим, так это возможность использовать интуитивно понятный / собственный графический интерфейс для отправки, обмена и взаимодействия с контрактами dApp (даже, возможно, через их веб-порталы), но вместо того, чтобы рисковать своими средствами, имея свой закрытый ключ ( также известное как хранилище ключей) на подключенном к Интернету компьютере (только с веб-диалоговым окном с кнопкой «ОК» между вашими средствами и злоупотреблением злоумышленником), имеющим только общедоступный адрес, используемый MEW и / или dApps, и они обеспечивают необработанные транзакции для копирования/загрузки для автономной подписи (любыми способами, никто не заботится о графическом интерфейсе на бэкэнде), а также возможность либо транслировать подписанную транзакцию, либо проверять, была ли/когда она была транслирована.

Я не знаю, почему сейчас это так излишне сложно. Почему MEW не позволяет мне просто указать свой общедоступный адрес ETH, чтобы использовать графический интерфейс на моем компьютере, подключенном к Интернету?