Как обезопасить bitcoin кошелек на сервере?

Возникла задача поднять узел биткоин и написать обвязку JSON-RPC для приема платежей на сайте (знаю что можно воспользоваться готовыми сервисами, но было принято решение реализовать самим). Возник вопрос с обеспечением безопасности этого узла, чтобы злоумышленник не смог получить доступ к приватным ключам кошелька. Отсюда вопрос: как наилучшим образом это сделать? достаточно ли настроить iptables, авторизацию по ключам на сервере и т.п. или можно иным образом скрыть приватные ключи? был бы рад любым рекомендациям и советам
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 2
Athanor
@Athanor
Лайк + Решение: не жмись, нажми
С одним из наших партнеров у нас была такая задача: необходимо было сделать хранение как фиата, так и крипты. Когда ставится задача что-то обезопасить, важно правильно сформулировать threat model: от каких именно действий и проникновений должна быть защита и уже на основе этого проектировать архитектуру.

Например, в случае ответа Dark_Scorpion, threat model можно коротко сформулировать следующим образом:
1. Злоумышленник получил доступ к виртуалке с API.
2. Злоумышленник получил доступ к виртуалке с bitcoind и ключами и ко всем ключам.

Дальше думаем как уменьшить негативный эффект в каждом из случаев.

1 случай. Злоумышленник теперь может подписывать запросы самостоятельно. Решением может быть, например, multisig, где часть ключа хранится у пользователя, а часть у сервера. Таким образом, злоумышленник уже не сможет эти запросы подписывать. Но тут важно еще понимать в какой юрисдикции будет находится продукт, т.к. есть юридические нюансы. Мы с ними сталкивались. Другим решением может быть возможность принудительного отключения виртуалки с bitcoind каким-то простым способом: даунтайм лучше потерянных денег.

2 случай. Тут уже ничего не поделаешь. Однако, есть продукты вроде https://www.thalesgroup.com/en, которые предоставляют железку, которая безопасно хранит ключи и которая считается невзламываемой. При этом, ключи доступны до тех пор, пока физическая (или виртуальная) карта вставлена в кардридер. Таким образом, если система была скомпрометирована, то достаточно будет вытащить карту. Есть и другие продукты, более бюджетные.

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

С точки зрения архитектуры как-то так, удачи в реализации )

С уважением,
Иван Томилов
CEO of Athanor
Ответ написан
Dark_Scorpion
@Dark_Scorpion
По идеи максимальные ограничения по безопасности с хранением ключа только в защищенной памяти.
Если заморачиватся, то вообще сделать отдельный сервер для подписи запросов/транзакций. Получается даже если основной сервер ломанут, то получать одно только API с одним запросом на подпись. Часть денег получится вывести у них, но ключи останутся нетронутыми
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы