Как показано на изображении выше, если пароль зашифрован, это всегда скрытый секрет, из которого кто-то может извлечь пароль в виде обычного текста. Однако, когда пароль хешируется, вы расслабляетесь, так как вряд ли существует какой-либо метод восстановления пароля из хеш-значения.
Извлечено из зашифрованных или хешированных паролей - что лучше?
Шифрование хорошее?
Простые текстовые пароли могут быть зашифрованы с использованием симметричных алгоритмов шифрования, таких как DES, AES или с любыми другими алгоритмами, и храниться в базе данных. При аутентификации (подтверждающей личность с помощью имени пользователя и пароля) приложение расшифровывает зашифрованный пароль, хранящийся в базе данных, и сравнивает его с паролем, предоставленным пользователем, на предмет равенства. В этом типе подхода к обработке паролей, даже если кто-то получит доступ к таблицам базы данных, пароли нельзя будет просто повторно использовать. Однако в этом подходе есть и плохие новости. Если каким-то образом кто-то получит криптографический алгоритм вместе с ключом, используемым вашим приложением, он / она сможет просмотреть все пароли пользователей, хранящиеся в вашей базе данных, путем дешифрования. «Это лучший вариант, который у меня есть», - может крикнуть разработчик программного обеспечения, но есть ли способ лучше?
Криптографическая хеш-функция (односторонняя)
Да, возможно, вы упустили суть. Вы заметили, что нет необходимости расшифровывать и сравнивать? Если существует односторонний подход к преобразованию, когда пароль может быть преобразован в какое-либо преобразованное слово, но обратная операция (создание пароля из преобразованного слова) невозможна. Теперь, даже если кто-то получит доступ к базе данных, невозможно воспроизвести или извлечь пароли с использованием преобразованных слов. При таком подходе вряд ли кто-то сможет узнать совершенно секретные пароли ваших пользователей; и это защитит пользователей, использующих один и тот же пароль в нескольких приложениях. Какие алгоритмы можно использовать для этого подхода?