Как происходит подписание транзакции в базовой веб-версии кошелька Mitilena

Как происходит подписание транзакции в базовой веб-версии кошелька

Что происходит при входе в кошелек

  • При заходе на кошелек, помимо обычных данных типа картинок, с сервера mitilena.com по сокету приходит список криптовалют с актуальными курсами. Курс обновляется раз в 90 секунд для большинства валют, у менее популярных — раз в 2 минуты.
  • В этот же момент берутся ваши адреса, сохраненные в браузере или приложении, и отправляются на сервер. Важно: отправляются только адреса. На сервере проверяется их баланс, и список возвращается с актуальными значениями.
  • На этом основная часть коммуникации заканчивается. Далее примерно раз в 1.5 минуты мы проверяем обновления балансов по той же схеме.
  • Когда вы нажимаете «послать криптовалюту», мы подхватываем специфичные данные — такие как nonce (номер следующей транзакции для вашего адреса в сети конкретного блокчейна) и актуальную стоимость комиссии (обновляется каждые пару минут). Проверка баланса происходит уже на клиенте.

Фаза подписи

  • Вы вводите приватный ключ — он проверяется только на вашем устройстве: подходит ли он к вашему адресу (генерируется ли из него правильный адрес). Для этого используется локальная библиотека, которая практически не обновляется, чтобы избежать атак на цепочку поставок. Если ключ валиден, мы формируем транзакцию. Всегда сначала создаётся структура транзакции, и только потом она подписывается.
  • Можно было бы использовать более высокоуровневые библиотеки, в которых просто передаёшь приватный ключ, и всё делается автоматически (включая отправку). Мы так не делаем. Мы всегда создаём оффлайн транзакцию, подписываем её, получаем hex подписанной транзакции, удаляем приватный ключ из памяти, и только потом отправляем транзакцию через сервер mitilena.com. Это исключает использование функций вроде createSignBroadcast() и исключает утечки.
  • Приватный ключ задерживается в оперативной памяти устройства буквально на миллисекунды или пару секунд, если он был введён через интерфейс. Выхватить его за это время крайне сложно, если только ваше устройство не абсолютно дырявое. Хотя даже в таком случае сложно представить вирус, который успел бы так быстро сработать.
  • Это описание касается обычного сценария подписи через веб-версию или десктопное приложение, когда вы вручную ввели приватный ключ или отсканировали его с бумажного носителя через QR-код (да, наша система это поддерживает).

Как работает сохранение приватного ключа в памяти

  • Если вы нажали «сохранить приватный ключ в памяти», то безопасность возрастает, потому что ключ больше не появляется в интерфейсе (даже на пару секунд), а расшифровывается и исчезает из памяти за 0.1 секунду — без отображения. Вытащить его базовыми вирусами уже невозможно — нужен вирус, который умеет сканировать RAM.
  • Шифрование происходит с использованием вашего пин-кода, где обязательно нужно использовать спецсимволы, в том числе смайлы. Мы используем PBKDF2, где на генерацию одного ключа тратится 100–500 тысяч итераций — это эффективно защищает от brute-force атак. Взлом зашифрованного ключа потребует колоссальных вычислительных ресурсов. Его сразу надо подключить на атомную электростанцию, чтобы ему это хоть как-то окупилось — что, конечно, нереально.
  • Также применяется соль, из-за чего радужные таблицы не помогут. Даже если злоумышленник каким-то образом достанет зашифрованный приватный ключ из памяти, он не сможет его расшифровать — если только у вас не пароль 12345678.
  • Но в целом, чтобы дотянуться до зашифрованного приватного ключа с устройства, нужно иметь полностью скомпрометированную систему. Это не просто.
  • Преимущество хранения ключа в памяти — вы вводите пароль, и приватный ключ мгновенно расшифровывается, проверяется, используется, и удаляется из памяти. В момент отправки (broadcasting) приватного ключа в памяти приложения уже нет. Он там находится буквально на 100 миллисекунд.

Финальный этап отправки

  • Подписанный hex транзакции → сервер Mitilena делает броадкаст в нужную сеть → получает подтверждение → отправляет hex обратно на клиент → он отображается вам в интерфейсе.
  • Если всё прошло успешно, сервер mitilena.com сохраняет данные о факте отправки (анонимно — даже если вы зарегистрированы, без IP и прочих идентификаторов, при желании можно отключить через сокеты). Эти данные используются для отображения истории и защиты от фейковых записей, например, из сторонних блокчейн-эксплореров.

Вот так технически работает отправка.

Отправка с NFC-карты устроена аналогично: приватный ключ попадает в память устройства всего на 0.1 секунду и тут же исчезает.


Mitilena’nın işlem imzalama sırasında özel anahtarlarınızı nasıl koruduğunu öğrenin. PBKDF2 şifreleme, bellekte 0.1 saniye, internetten tam izolasyon. Fonlarınız için maksimum güvenlik. Mitilena’da Güvenli Kripto İşlem İmzalama: Teknik Rehber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *