2008-11-25 1 views
1

Я развиваюсь на стеке LAMP (erl) и знаю несколько способов хранения скрытых паролей. Я бы хотел услышать от тех, кто считает, что у них лучшая практика, учитывая MySQL 4.1.1 и Perl 5.8, и причины, по которым это лучшее.Является ли ENCODE() и DECODE() «лучшим» способом обработки поля пароля приложения в MySQL?

Один из вариантов, который я прочитал, используя функции MySQL ENCODE() и DECODE(), звучит довольно хорошо для меня ... ваши мысли?

+0

использовать AES http://stackoverflow.com/questions/5554526/comparison-of-des-triple-des-aes-blowfish-encryption-for-data – zloctb 2016-03-04 09:01:09

ответ

6

Я думаю, что соленый хэш с надлежащей функцией хэша, такой как SHA-256, является лучшим. Пароли, которые являются обратимыми, не так безопасны, как те, которые не могут быть отменены. Без внешнего модуля Perl вы можете использовать встроенную функцию SHA1(), не так хорошо, как SHA256, но лучше, чем ENCODE/DECODE.

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

3

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

Я бы рекомендовал пойти с классическим соленым хэш-методом.

+1

кодирование/декодирование можно солить. – benlumley 2008-11-25 16:30:45

+0

Роб прав. Вы хотите, чтобы ваш пароль был необратимым. Возможность восстановления открытого пароля означает, что ваша система по своей сути слаба. – 2008-11-25 16:35:32

+0

Это не соление; вы передаете ключ, используемый для шифрования/дешифрования. Сочетание хеша изменяет его значение и помогает защитить от методов грубой силы генерации коллизий, имея значение, различное для каждого пользователя, и тем самым увеличивать время для получения единого пароля. – Rob 2008-11-25 16:36:16

1

Я не уверен, что делают эти функции, но для паролей на веб-сайте стека LAMP я определенно использовал бы соленое поле.

Ваша пользовательская таблица будет иметь:

  • имя
  • проход
  • соль

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

Это значительно улучшает безопасность, так как теперь ваши пользователи больше не используют 5 буквенных паролей, они используют пароли 5 + len (salt), а если соль достаточно большая, база данных радуги никогда не будет содержать ваши хеши.

+0

Использование безопасного хэша намного лучше, чем использование соли. – 2008-11-25 16:31:56

+2

Использование безопасного хеша и соли лучше, так я понял этот ответ. – 2008-11-25 18:57:44

5

Если вам нужен только пароль для аутентификации пользователя/пользователя, лучше сохранить одностороннее хранение (например, md5).

8

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

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

Смысл в том, что encode() и decode(), вероятно, являются хорошими решениями, когда вы хотите восстановить данные, но эти неустранимые хэши (используя Crypt :: MD5) являются лучшим подходом для сохраненных паролей.

3

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

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

0

Если вы можете расшифровать пароль, ваша защита будет испорчена. Вы всегда должны использовать пароль с солью, MD5 популярен, но есть превосходное хеширование, такое как SHA и SHA-256.

 Смежные вопросы

  • Нет связанных вопросов^_^