Страницы

Поиск по вопросам

пятница, 31 мая 2019 г.

Залогинивание в приложении. Оптимальный вариант. Шифрование

Есть приложение на подобии чата. На сервере есть бд, где хранятся пароли (хэши) и логины. Как лучше всего организовать залогинивание? Я могу сохранять логин и пароль в бд у пользователя (sqlite), а потом подставлять, но это мне не очень нравится, так как можно легко угнать данные. Можно как-нибудь зашифровать, но зная алгоритм, можно расшифровать. Как лучше всего сделать? Где безопаснее всего хранить?
Тот же хром просто надругательство. Пароли шифруются стандартным методом, что позволят без труда их угнать.


Ответ

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

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

Комментариев нет:

Отправить комментарий