Я думал о том, как обмен может обрабатывать Bitcoins надежно в рамках сайд-проект, я работаю.
Использование зашифрованного кошелька на файерволе непубличных обращенном машины кажется очевидным первым шагом. Я также думаю о том, как обеспечить приложение само по себе, что даже если сервер приложений и баз данных вросли, злоумышленник с полным знанием системы все еще не мог использовать его таким образом, что бы привести монеты будут потеряны.
Итак, вот мои первые мысли о том, как это может работать. Я уверен, что я что-то здесь отсутствует, так что я хотел бы его, если какие-либо эксперты в области безопасности могли бы прокомментировать все отверстия, которые могут существовать в этой системе:
1. Сервер будет иметь 256-битный AES ключ, полученный из пароля и соли. Это не будет храниться в любом месте системы.
а. Пароль нужно будет предоставить при запуске приложения для "начальная загрузка" приложение и сгенерировать ключ.
2. Сервер будет иметь 2048-битный RSA ключ, который он будет использовать для подписания сделок в системе.
а. Открытый ключ будет храниться в виде обычного текста в файле конфигурации.
б. Закрытый ключ будет храниться в зашифрованном виде в файле конфигурации, используя AES ключ сервера.
3. Каждый пользователь будет иметь 256-битный AES ключ, выведенный из своего пароля и соли. Это не будет храниться в любом месте системы.
а. Обратите внимание, что это будет меняться каждый раз, когда они изменяют или сбросить пароль.
4. Каждый пользователь будет иметь 2048-битный RSA ключ, связанный с его учетной записью и хранится в базе данных.
а. Открытый ключ будет храниться в базе данных в виде простого текста.
б. Закрытый ключ будет храниться в базе данных зашифрованы с использованием ключа AES пользователя.
с. Когда пароль пользователя изменяется или сброс, новый ключ RSA будет создан для пользователя.
я. Старый ключ RSA будет оставаться в силе для сделок, созданных до даты был создан новый ключ. Это должно гарантировать, что в процессе производства
операции (приказы, изъятие и т.д.), которые были подписаны со старым ключом все еще может быть обработано.
д. Ассоциация ключа к пользователю будет цифровая подпись сервера (хэш идентификатора пользователя + зашифрована закрытый ключ + открытый ключ + временная метка).
я. Это позволяет предотвратить пользователь доступ к базе данных от несанкционированного доступа с помощью ключа или связать свой собственный ключ к другому пользователю
для того, чтобы фальсифицировать подписанные сделки от этого пользователя.
5. Пользователь сможет отправить запрос, подписанный Bitcoin вывода.
а. Запрос будет подписан с закрытым ключом хэша пользователя из (ID + идентификатор пользователя + количество + решения + временную метку)
я. Само по себе это уязвимо от атак. См 6 (б) для решения, чтобы уменьшить этот риск.
6. просит на самом деле будет обработан другим приложением + bitcoind работает на отдельной машине с межсетевым экраном всех входящих портов заблокирован и доступ только через консоль.
а. Перед обработкой запроса, приложение будет проверять подпись запроса.
я. Расчетный хэш (ID + идентификатор пользователя + количество + обратиться + временной меткой) в запросе совпадает подписан хэш.
II. Ключ, используемый для подписи запроса на самом деле принадлежит пользователю, связанные с запросом.
III. Ключ, используемый для подписи запроса был действительным, как метки времени по требованию.
б. Приложение обработки будет держать отдельную локальную базу данных с идентификаторами всех обрабатываемых транзакций.
я. Перед обработкой транзакции, он будет сначала проверить, что сделка не была уже обработана.
II. Если бы это было, то сделка будет отклонена. Это необходимо для защиты от атак.
Так что охватывает снятие. Прочие операции (приказы, сделки, депозиты, любые другие операции, которые манипулируют сальдо счетов) будут обработаны аналогичным образом с операциями либо за подпись пользователя, представивших их, или подписанный самим сервером. Идея заключается в том, что сервер должен всегда быть в состоянии доказуемо аудита операций и остатков по счетам, чтобы гарантировать, что они не манипулировали (даже если хакер поставил под угрозу саму базу данных)