加密数据库中的用户密码的推荐方法是什么?

时间:2010-01-07 09:21:58

标签: perl security postgresql

在用Perl编写并使用PostgreSQL的Web应用程序中,用户拥有用户名和密码。存储密码的推荐方法是什么?

使用Perl的crypt()函数和随机盐加密它们?这会将密码的有用长度限制为8个字符,并且需要获取存储的密码,以便与用户在进行身份验证时获取的密码进行比较(以获取附加到其上的盐)。

PostgreSQL中是否有内置方法来执行此操作?

我应该使用Digest::MD5吗?

7 个答案:

答案 0 :(得分:29)

请勿使用SHA1或SHA256 ,正如大多数其他人所建议的那样。 绝对不要使用MD5

SHA1 / 256和MD5都用于创建文件和字符串的校验和(如有必要,还可以创建其他数据类型)。因此,它们被设计为尽可能快,以便快速生成校验和。

这种快速的速度使得破解密码变得更加容易,因为编写良好的程序很容易每秒产生数千个哈希值。

相反,请使用专为密码设计的慢速算法。它们的设计需要花费更长的时间才能生成,其好处是暴力攻击变得更加困难。因此,密码将更加安全。

如果您只想一次加密一个密码,那么您将不会遇到任何重大的性能劣势,这是存储和检查密码的正常实现。它只是散装的真正区别在于。

我个人喜欢bcrypt。应该有一个Perl版本,因为谷歌的快速搜索产生了几种可能的匹配。

答案 1 :(得分:17)

通常使用MD5,但SHA1 / SHA256更好。仍然不是最好的,但更好。

所有这些通用哈希算法的问题在于它们被优化为快速。但是,当您对存储密码进行哈希处理时,快速就是您想要的 - 如果您可以在一微秒内散列密码,那么这意味着攻击者每次都可以尝试一百万个密码第二,如果他们得到你的密码数据库。

但是你想尽可能减慢攻击者的速度,不是吗?使用需要十分之一秒的算法代替哈希密码不是更好吗?十分之一秒仍然足够快,用户通常不会注意到,但拥有数据库副本的攻击者每秒只能进行10次尝试 - 查找工作集需要花费100,000次登录凭据。每次尝试以微秒为单位花费的每小时在每次尝试的十分之一秒内变为11

那么,你是如何做到这一点的?有些人通过运行几轮MD5 / SHA消化来伪造它,但是bcrypt算法专门用于解决这个问题。我不完全理解它背后的数学,但我被告知它是基于Blowfish帧的创建,这本身就很慢(不像MD5操作,可以在正确配置的硬件上大量精简),并且它有一个可调节的“成本”参数,以便随着摩尔定律的推进,您需要做的就是调整“成本”以保持密码散列在十年内与现在一样缓慢。

答案 2 :(得分:3)

我最喜欢bcrypt,SHA2(256)紧随其后。我从来没有见过MD5用于密码,但也许有些应用程序/库使用它。请记住,您也应该始终使用盐。对于每个用户来说,盐本身应该是完全独特的,并且在我看来,尽可能长。我永远不会在没有添加盐的情况下对字符串使用哈希。主要是因为我有点偏执,所以它更具有前瞻性。

在用户可以再次尝试和自动锁定(使用自动管理员通知)之前有一个延迟也是一个好主意。

答案 3 :(得分:2)

PostgreSQL中的pgcrypto模块内置了用于密码散列的suppotr,这对于存储,生成,多算法等非常聪明。请参阅http://www.postgresql.org/docs/current/static/pgcrypto.html密码散列函数部分。您还可以看到http://www.hagander.net/talks/hidden%20gems%20of%20postgresql.pdf的pgcrypto部分。

答案 4 :(得分:0)

对salting使用SHA1或SHA256散列。这就是存储密码的方法。

答案 5 :(得分:0)

如果您不使用密码恢复机制(不重置密码),我认为使用散列机制比尝试加密密码要好。您可以检查哈希值而不存在任何安全风险。即使您不知道用户的密码。

答案 6 :(得分:-3)

我建议将其存储为盐渍md5哈希。

INSERT INTO user (password) VALUES (md5('some_salt'||'the_password'));

如果你愿意,你可以在perl中计算md5哈希值,除非你进行微优化,否则它没有多大区别。

您也可以使用sha1替代,但我不确定Postgres是否有本机实现。

我通常不鼓励使用动态随机盐,因为它是另一个必须存储在数据库中的字段。另外,如果你的桌子受到了损害,那么盐变得毫无用处。

我总是使用一次性随机生成的盐并将其存储在应用程序源或配置文件中。

使用md5或sha1哈希作为密码的另一个好处是,您可以将密码列分别定义为md5和sha1的固定宽度CHAR(32)或CHAR(40)。

相关问题