С одним из наших партнеров у нас была такая задача: необходимо было сделать хранение как фиата, так и крипты. Когда ставится задача что-то обезопасить, важно правильно сформулировать threat model: от каких именно действий и проникновений должна быть защита и уже на основе этого проектировать архитектуру.
Например, в случае ответа
Dark_Scorpion, threat model можно коротко сформулировать следующим образом:
1. Злоумышленник получил доступ к виртуалке с API.
2. Злоумышленник получил доступ к виртуалке с bitcoind и ключами и ко всем ключам.
Дальше думаем как уменьшить негативный эффект в каждом из случаев.
1 случай. Злоумышленник теперь может подписывать запросы самостоятельно. Решением может быть, например, multisig, где часть ключа хранится у пользователя, а часть у сервера. Таким образом, злоумышленник уже не сможет эти запросы подписывать. Но тут важно еще понимать в какой юрисдикции будет находится продукт, т.к. есть юридические нюансы. Мы с ними сталкивались. Другим решением может быть возможность принудительного отключения виртуалки с bitcoind каким-то простым способом: даунтайм лучше потерянных денег.
2 случай. Тут уже ничего не поделаешь. Однако, есть продукты вроде
https://www.thalesgroup.com/en, которые предоставляют железку, которая безопасно хранит ключи и которая считается невзламываемой. При этом, ключи доступны до тех пор, пока физическая (или виртуальная) карта вставлена в кардридер. Таким образом, если система была скомпрометирована, то достаточно будет вытащить карту. Есть и другие продукты, более бюджетные.
Помимо защиты ключей, можно дополнить защиту еще двухфакторной аутентификацией и третьей стороной, которая также может подписывать транзкцию.
С точки зрения архитектуры как-то так, удачи в реализации )
С уважением,
Иван Томилов
CEO of Athanor