Я разрабатываю новый пользовательский магазин для своей организации и сейчас занимаюсь хранением паролей. Концепции посола, HMAC и т. Д. Меня устраивают - и я хочу хранить пароли пользователей как соленые, так и хэшированные, хэшированные в HMAC или соленые и хэшированные в HMAC - не уверен, какой будет лучший путь, - но теоретически он победил Это не имеет значения, так как оно может меняться со временем, если потребуется.
Я хочу иметь службу XML & JSON, которая может выступать в качестве службы маркеров безопасности для клиентских приложений.
Я уже разработал один для другой системы, которая требует, чтобы клиент дважды зашифровал открытый текстовый пароль, используя сначала SHA1, а затем HMACSHA1, используя уникальный ключ (или одноразовый номер 128), предоставленный сервером только для этого сеанса.
Я бы хотел повторить эту технику для новой системы - обновить алгоритм до SHA256 (выбранный, поскольку реализации доступны для всех вышеупомянутых платформ - и он намного сильнее, чем SHA1) - но есть проблема.
Если я храню пароль как соленый хеш в хранилище пользователей, клиенту нужно будет отправить эту соль, чтобы построить правильный хеш, прежде чем использовать HMACd с уникальным ключом сеанса. Это полностью пошло бы против использования соли. Точно так же, если я не использую соль для хранения паролей, а вместо этого использую HMAC, это все та же проблема.
На данный момент единственное решение, которое я вижу, это использовать голое хеширование SHA256 для пароля в хранилище пользователей, чтобы затем я мог использовать это как отправную точку на сервере и на клиенте для более безопасного посола / hmacd передача пароля для веб-службы.
Это по-прежнему оставляет пользовательское хранилище уязвимым для атаки по словарю, если к нему когда-либо будет осуществлен доступ; и как бы маловероятно это ни было - если предположить, что это никогда не произойдет, просто не устраивает меня.
Очень ценю любой вклад.