Необходимо надежно хранить и передавать ключи - PullRequest
0 голосов
/ 21 октября 2011

Проблема, с которой я сталкиваюсь, интересна, и мои знания о безопасности сильны, но мое понимание слабо.То есть я понимаю теорию, но практически не имел практического применения в этом конкретном отношении.Я сохранил пароли, передал их с помощью соли, проверил их хэш и т. Д. Мои потребности здесь схожи, но специфичны.

У меня есть одно приложение, к которому может подключиться другое внешнее приложение через URI ContentProvider.Внешние приложения могут разрабатываться кем угодно, поэтому я не имею над ними контроля.Однако я хочу ограничить некоторый доступ для подписчиков.Чтобы облегчить это, каждому «подписанному» приложению будет присвоен ключ, зарегистрированный для его имени пакета.Затем ContentProvider должен проверить этот ключ как действительный.

Моя проблема заключается в следующем: так как он передается через URI, можно легко перехватить ключ при передаче.Кроме того, моим подписчикам нужен метод, с помощью которого они могут хранить свой собственный ключ без необходимости подключения к защищенному серверу.Конечно, они не могут хранить ключ как литерал в своем приложении, так как это облегчает уязвимость.Я пытаюсь предоставить как можно больше решений без необходимости «доверять» безопасности этих других приложений.

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

FuzzicalLogic

1 Ответ

1 голос
/ 21 октября 2011

Обработка ключа в зашифрованном запросе / ответе.

Клиент запрашивает значение запроса, зашифрованное с помощью предварительно определенного открытого ключа для приложения. Если клиент затем возвращает правильное значение на сервер, зашифрованный с использованием открытого ключа конкретного сервера, то рукопожатие прошло успешно.

Используя личный ключ / открытый ключ для каждого приложения и что-то вроде guid для значения вызова, было бы очень трудно продублировать.

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

...