в postgres, который имеет только шифрование md5, как лучше всего сохранить пароль? - PullRequest
0 голосов
/ 28 декабря 2011

PostgreSQL имеет только MD5 для шифрования для хранения паролей.

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

Я использовал MD5 из MD5 & mdash; MD5 один раз на клиенте, а затем снова MD5 на базе данных & mdash; но я не знаю, что это намного сильнее.

Во-первых, нужно ли усиливать хранение паролей? И, во-вторых, какой будет простой, эффективный, мультиязычный подход?

Ответы [ 2 ]

7 голосов
/ 28 декабря 2011

Установка расширения pgcrypto предоставляет вам набор функций и инструментов для использования.Среди них - возможность использовать bcrypt, который является хорошим способом хранения паролей.

Если вы не используете его в postgres, вы можете рассмотреть его вне языка, который вы используете.

Соответствующие ссылки: http://www.postgresql.org/docs/current/static/pgcrypto.html для postgres-parts и http://codahale.com/how-to-safely-store-a-password/ для мотивации / объяснения того, почему вы хотите его использовать.

2 голосов
/ 28 декабря 2011

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

password_hash = sha256(user_name + password)
user_id = query("SELECT id FROM user WHERE name=? and password_hash=?",
                user_name, password_hash).first()

Или вы можете проверить имя пользователя и пароль в два отдельных шага и использовать идентификатор пользователя в качестве соли:

user_id, password_hash = query("SELECT id, password_hash FROM user WHERE name=?",
                               user_name).first()
if password_hash != sha256(user_id + password):
    raise Exception("authentication failed")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...