Как можно сделать этот план соли и хеша более безопасным? - PullRequest
0 голосов
/ 12 апреля 2019

Привет. Я просто планирую безопасность входа на сервер для мобильного приложения и записал простой план.Это выглядит безопасным, и может ли быть улучшено каким-либо образом?Заранее спасибо.

Первый вход в систему клиента

  1. Получение идентификатора устройства от клиента и отправка на сервер.
  2. Создание MD5Соль на сервере и учетной записи пользователя с новым идентификатором пользователя.
  3. Объедините соль с идентификатором устройства и идентификатором пользователя, чтобы создать соленый пароль.
  4. Создайте хэш MD5 соленого пароля и сохранитехэш-пароль в базе данных.
  5. Возвращает идентификатор пользователя и Salt клиенту.

Клиенты снова входят в систему или делают общий запрос

  1. Отправить запрос на сервер с хешем MD5, сгенерированным клиентом, используя соль, полученную с сервера, и объединить с идентификатором устройства и идентификатором пользователя.Также отправьте идентификатор устройства и идентификатор пользователя в виде простого текста.
  2. Убедитесь, что идентификатор устройства пользователя и идентификатор пользователя, хранящиеся в базе данных, совпадают с отправленными клиентом.
  3. Убедитесь, что хеш MD5, отправленный пользователем, совпадает с хешем, сохраненным вбаза данных для этого пользовательского устройства.
  4. Проверьте и продолжите обработку запроса.

1 Ответ

0 голосов
/ 13 апреля 2019

Если проблема касается безопасности, я бы не рекомендовал использовать идентификатор устройства в качестве пароля по следующим причинам:

  1. Это не секретная информация, и ее можно отправлять в виде простого текста во многих сетевых вызовах на многие серверы, что означает, что она может быть легко получена третьей стороной.
  2. Нельзя легко изменить, если злоумышленник получит его.
  3. Если телефон переходит из рук в руки, идентификатор остается прежним, что позволяет новому владельцу телефона войти в систему как предыдущий пользователь.

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

Поэтому я бы порекомендовал генерировать uuid, когда пользователь устанавливает приложение, и хранить его в защищенном хранилище устройств (хранилище ключей / цепочка ключей). При первом запросе отправьте это на сервер вместе с идентификатором пользователя. Временный идентификатор сеанса должен быть сгенерирован и возвращен клиенту, который затем может быть использован для аутентификации последовательных запросов.

Также MD5 не следует использовать для хеширования паролей, так как он не устойчив к атакам методом перебора. Лучший выбор алгоритма - bcrypt или pbkdf2.

...