В настоящее время я использую определенную схему для защиты паролей, и я думаю, что мне есть что улучшить. Реализация на Java, поэтому я предпочитаю использовать SHA-2 512 в качестве формы шифрования.
В настоящее время у меня есть модель клиент-сервер, поэтому могут происходить следующие вещи:
- Клиент хочет войти в систему, он отправляет свой пароль с однократным обычным шифрованием SHA-2 512 по сети.
- Сервер имеет пароли, хранящиеся в базе данных, например, SHA-2_512 (SHA-2_512 (пароль) + соль), причем внутренний SHA-2_512 (пароль) является «зашифрованным» паролем, который он получает по сети.
- Проверка пароля выполняется на стороне сервера, и с сервера ничего не может просочиться, единственной возможной уязвимостью было бы, если бы кто-то мог считать ОЗУ, я думаю.
У меня есть эти вопросы:
Злоумышленник обычно создает атаки столкновений, когда хочет взломать пароль. Однако насколько достаточно атак столкновений? Если пароль необходимо использовать для других приложений, таких как Outlook.com, Facebook или что-то еще (которые, вероятно, используют другую соль, поскольку они не имеют ничего общего с моими приложениями), как тогда достаточно атаки столкновений? Вам не нужен настоящий пароль?
Использует ли SHA-2 512 итерацию? И даже если это так, должен ли я изменить свои методы шифрования, чтобы автоматически использовать несколько итераций плюс предпочтительное количество итераций? Я также читал об использовании случайного числа итераций (в диапазоне), как детерменистически сохранить случайный фактор?
Должен ли я хранить системные секреты для каждой итерации в коде сервера? См. http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/ . Я мог бы хранить массив, который будет содержать статический секрет для каждой итерации, причем n-й секрет будет для n-й итерации. Никто не может знать секреты, они вычисляются один раз (я думаю, как шифрование какой-то случайной строки), а затем в основном сохраняются в ОЗУ сервера.
В настоящее время я отправляю введенный пароль от клиента на сервер как просто SHA-2_512 (пароль), следует ли улучшить этот процесс, и если да, то как? Я не могу использовать соли, потому что у клиента нет соли.
С Уважением.