2013-05-06 66 views
3

我正尝试在我的应用程序和IPB论坛之间共享登录信息。使用bcrypt(md5(pwd)+ salt)是不好的做法吗?

我见过的InVision是提供一个模块共享凭据:IPS Connect

简单点说,有一个主应用和一个或severals从(S)。从服务器通过API发送主服务器需要存储的凭证。

东西是对于registerlogin方法IPB发送密码的散列密码md5。没有办法,所以我认为对md5哈希做一些使用bcrypt

$storedPassword = bcrypt(md5(pwd) + salt); 

你怎么看待这种替代是什么,我会存储一个md5在我的数据库,它是一个很好的做法与哈希在md5哈希上加密?

+0

不好的想法,多次散列会增加碰撞的机会 – 2013-05-06 13:59:51

+0

我听说过它,但它是否会增加广泛的碰撞机会? – darkheir 2013-05-06 14:05:27

+0

两个用户在散列之前也可以拥有相同的密码,所以它不会影响碰撞。两个用户使用不同密码和相同md5散列的机会几乎没有任何变化 – 2013-05-06 14:13:57

回答

1

虽然它完全正常的应用程序中使用$storedPassword = bcrypt(md5(pwd) + salt);,安全明智它几乎没有中获益,也不需要将自己的盐添加到加密中。 bcrypt会在内部处理这个问题,你不需要在任何地方储存盐。

攻击者的目标最薄弱的环节,如果其它服务器只使用MD5,他们可以攻击该网站以获取密码,然后它不事关你有多强保护它。

但话又说回来。关上一扇门仍然是一团糟,然后把一切都打开。

+0

是的,但其他网站不会存储它,它只会在注册时或用户尝试登录时发送密码(使用md5)。 因此,对于我来说,薄弱环节会在发送证书时嗅探2台服务器之间的连接。 – darkheir 2013-05-06 14:04:45

+0

然后你的方法很好,如果你放弃盐。对于所有你关心的用户,他们自己输入了32个字符作为他们的密码。 – 2013-05-06 14:11:49

+0

为什么要放盐?我认为这是使哈希独特,不是? – darkheir 2013-05-06 15:00:41

0

降低安全。

MD5哈希通常缩短了密码。这意味着攻击者只需要遍历MD5空间。即使你认为MD5空间很大,将单词字典映射到它也是微不足道的。这不会增加收益,但可能会减少空间。

关于冲突:你不bcrypt赢得银河彩票。然而,对于MD5,事情确实有点不那么确定,这是远离它的另一个原因。

你不需要添加盐,bcrypt已经自己添加了一个很好的,独特的盐。如果你正确使用bcrypt,你永远不需要考虑盐。

你的源只发送MD5哈希有点奇怪。我通常会建议通过加密连接发送的密码(明文):

  • 如果连接是加密的,它是安全的将其发送明文。
  • 如果它没有加密,那么如果您先密码哈希,攻击者无论如何都可以从网络读取,则无关紧要。
相关问题