3

我正在尝试在我的应用程序和 IPB 论坛之间共享登录信息。

我已经看到 Invision 提供了一个共享凭据的模块:IPS Connect

为简单起见,有一个主应用程序和一个或多个从属应用程序。从站通过 API 发送主站需要存储的凭据。

事情是,对于registerorlogin方法,IPB 正在发送md5密码的哈希值。我无法将一个存储md5在我的数据库中,所以我想bcryptmd5哈希上使用类似的东西

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

您如何看待这种替代方案,在 md5 散列之上使用 bcrypt 散列是一种好习惯吗?

4

2 回答 2

1

尽管在您的应用程序中使用它非常好,$storedPassword = bcrypt(md5(pwd) + salt);但在安全方面它几乎没有什么好处。也不需要在加密中添加自己的盐。bcrypt 会在内部处理这个问题,你不需要在任何地方保存盐。

攻击者针对最薄弱的链接,如果其他服务器只使用 md5,他们可以攻击该站点以获取密码,然后无论您保护它的强度如何。

但话又说回来。关上一扇门总比让一切敞开着要好。

于 2013-05-06T14:00:15.373 回答
1

会降低安全性。

MD5 散列通常会缩短密码。这意味着攻击者只需要遍历 MD5 空间。即使您认为 MD5 空间很大,将字典映射到其中也是微不足道的。这根本没有增加任何好处,但可能会减少空间。

关于碰撞:你不会用 bcrypt 赢得银河彩票。然而,有了 MD5,事情就不太确定了,这是远离它的另一个原因。

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

您的来源仅发送 MD5 散列有点奇怪。我通常建议通过加密连接发送密码(明文):

  • 如果连接是加密的,那么以明文形式发送它是安全的。
  • 如果它没有加密,那么你是否首先对密码进行哈希处理并不重要,攻击者无论如何都可以从网络中读取。
于 2016-02-18T15:04:37.447 回答