Шифрование пароля, отправляемого по HTTPS - PullRequest
0 голосов
/ 27 февраля 2019

Добрый день,

Я очень плохо знаком с безопасностью базы данных / приложения / соединения и хотел бы получить помощь по проекту.

Позвольте мне объяснить мою среду:

  • У меня есть имя пользователя A и пароль A, сохраняемые в базе данных (A) на локальном компьютере.
  • Пароль A сохраняется с использованием типаалгоритма хеширования с солью A.
  • Я отправляю учетные данные (имя пользователя A и пароль A) через HTTPS SOAP Call на удаленный веб-сервис.
  • Apon получает имя пользователя A и пароль A thewebservice проверяет эти учетные данные в таблице, расположенной в базе данных (B), локальной для расположения веб-службы.

Моя проблема: Если кто-то получает доступ к базе данных Aи извлекает хешированные пароли, которые они могут использовать с помощью SOAP-запроса для подключения к веб-сервису.Это означает, что моя защита недействительна и аннулирована.

У меня есть возможные решения:

РЕШЕНИЕ 1. Перед отправкой пароля A на веб-сервисЯ дешифрую и отправляю по незашифрованному тексту через защищенное соединение HTTPS.Затем веб-служба снова зашифрует ее при проверке хэша, хранящегося в базе данных B.

РЕШЕНИЕ 2. Перед отправкой пароля A в веб-службу я выполняю второе шифрование для существующего хэша.По прибытии на веб-сервис он расшифровывается, чтобы показать хеш, который затем проверяется на базе данных B.

Мой вопрос : Есть ли какое-либо из 2 приведенных выше решений?Лучшая практика.Если нет, то что было бы лучшим практическим решением для этого сценария.

С уважением

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Всего несколько заметок

  • существует разница между хешем (односторонним, необратимым) и шифрованием (обратимым).Вы не можете расшифровать хешированное значение.
  • Я предполагаю, что вы работаете с учетными данными службы, а не учетными данными пользователя

Здесь я предполагаю, что вы говорите о

РЕШЕНИЕ 2: Перед отправкой пароля A в веб-сервис я делаю второе шифрование для этого существующего хэша.При поступлении в веб-сервис он расшифровывается для предоставления хеша, который затем проверяется на базе данных B.

Хеш фактически становится паролем, он не добавляет никакой безопасности к решению

РЕШЕНИЕ 1. Перед отправкой пароля A в веб-службу я расшифровываю его и отправляю по незашифрованному тексту через защищенное соединение HTTPS.

Существует несколько стандартов для аутентификации SOAP WS.клиент, используя простые учетные данные, это WS-UsernameToken.По сути, клиент отправляет свое имя пользователя и пароль обычным способом, полагаясь на HTTPS для обеспечения безопасности канала.

Моя проблема: если кто-то получает доступ к базе данных A и извлекает хешированные пароли, он может использовать SOAP-запрос для подключения к веб-службе

Один хеш-парольвы не сможете расшифровать его, но вы также не сможете использовать хешированное значение в качестве пароля.В противном случае вы получите «решение 2» и используете хеш в качестве пароля.

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

Если вы работаете с учетными данными пользователя (идентификационные данные пользователя), вообще не храните пользовательские пароли на стороне клиента, есть другие способы авторизации действий пользователя (токен доступа, токен jwt, ..)

0 голосов
/ 27 февраля 2019

Если вы используете SOAP на основе xml, вы можете использовать WS-Security для шифрования пароля и подписания данных вашего запроса, чтобы обеспечить целостность и безопасность вашего пароля, а также отправлять данные через https.

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

...