работа с хешированными паролями в ruby - PullRequest
5 голосов
/ 01 июня 2009

Заранее, я хотел бы признаться, что был полным новичком в криптографии и безопасности паролей. Я пытаюсь хранить пароли в базе данных babysat by ruby. Насколько я понимаю, незашифрованные пароли должны быть добавлены к произвольной "соли" и что вся фраза должна быть хеширована с помощью некоторого алгоритма хеширования, например:

    Digest::SHA1.hexdigest(salt_plus_plainpassword)

Как только эта строка будет сохранена в базе данных, как ее снова вывести, чтобы убедиться, что введенные пользователем данные верны, если к ней добавлена ​​неизвестная теперь случайная соль?

Ответы [ 2 ]

6 голосов
/ 01 июня 2009

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

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

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

1 голос
/ 01 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...