Разница между Хешированием пароля и Шифрование

В текущем верхнем рейтинге этот вопрос говорится:

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

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

Ответ 1

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

Шифрование является правильной (двухсторонней) функцией. Это обратимо, вы можете расшифровать искаженную строку, чтобы получить исходную строку, если у вас есть ключ.

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

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

Ответ 2

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

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

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

Ответ 3

Encrypted vs Hashed Passwords

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


Извлечено из Зашифрованные vs Хешевые пароли - что лучше?

Хорошее ли шифрование?

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

Криптографическая хэш-функция (только в одну сторону)

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

Ответ 4

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

Ответ 5

Хеширующие алгоритмы обычно являются криптографическими по своему характеру, но главное отличие в том, что шифрование является обратимым посредством дешифрования, а хеширование - нет.

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

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

Пока невозможно получить хешированный результат и "деашировать" его, чтобы вернуть исходный ввод, вы можете обычно перебирать свой путь к тому, что создает тот же хеш.

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

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

Ответ 6

В идеале вы должны сделать оба.

Сначала хешируйте пароль доступа для безопасности в одну сторону. Используйте соль для дополнительной безопасности.

Затем зашифруйте хэш для защиты от атак со словарями, если ваша база данных хешей паролей скомпрометирована.

Ответ 7

Хеширование:

Это односторонний алгоритм, и один раз хэшировать нельзя откат, и это его сладкая точка против шифрования.

шифрование

Если мы выполним шифрование, появится ключ для этого. Если этот ключ просочится, все ваши пароли могут быть легко дешифрованы.

С другой стороны, даже если ваша база данных будет взломана или администратор вашего сервера взял данные из БД, и вы использовали хешированные пароли, хакер не сможет разбить эти хешированные пароли. Это практически невозможно, если мы используем хеширование с надлежащей солью и дополнительной безопасностью с помощью PBKDF2.

Если вы хотите посмотреть, как вы должны писать свои хеш-функции, вы можете посетить здесь.

Существует множество алгоритмов для хэширования.

  1. MD5 - использует хэш-функцию алгоритма 5 (MD5). Выходной хэш составляет 128 бит. Алгоритм MD5 был разработан Рон Ривестом в начале 1990-х годов и сегодня не является предпочтительным вариантом.

  2. SHA1 - использует хэш-алгоритм хеширования безопасности (SHA1), опубликованный в 1995 году. Выходной хэш составляет 160 бит. Хотя это наиболее широко используется, сегодня это не является предпочтительным вариантом.

  3. HMACSHA256, HMACSHA384, HMACSHA512 - Используйте функции SHA-256, SHA-384 и SHA-512 семейства SHA-2. SHA-2 был опубликован в 2001 году. Длина выходных хешей равна 256, 384 и 512 бит соответственно, как указывают имена функций хэш-функции.

Ответ 8

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

Ответ 9

Вот одна из причин, по которой вы можете использовать один из них - извлечение пароля.

Если вы храните только хэш пароля пользователя, вы не можете использовать функцию "забытый пароль".