【问题标题】:encrypting passwords & crypto questions加密密码和加密问题
【发布时间】:2013-09-12 14:34:35
【问题描述】:

我读过一些关于加密密码的文章,我读到的似乎 bcrypt 是要走的路。

我对密码学几乎一无所知,如果我将用户名添加到密码中并对其进行哈希处理,从安全角度来看有什么不同吗?

为每个用户创建盐是否有意义?如果我的数据库被泄露,这些盐也会在那里,我是否也应该使用全局盐来加密这些盐?

同时加密用户的电子邮件地址是否有意义?

我打算做的是:

+use bcrypt
+allow all characters in passwords
+force User to use a digit and special char in his password
+set the minimum password length to 8 chars

我不是在构建需要超高安全标准的应用程序,但我想为我的用户提供一些严肃的保护,以防我的数据库以某种方式泄露。 (希望不会)

【问题讨论】:

  • 大概这个问题真的是关于散列密码(一种方式)而不是加密它们(这将允许你解密它们,取回原始值)?尽管它的名字 bcrypt 经常用于前者,而不是后者。
  • 是的,它是关于以一种方式散列密码,关于我关于散列用户电子邮件的问题,还没有考虑到这一点。

标签: encryption


【解决方案1】:

如果我将用户名添加到密码和散列中,从安全角度来看有什么不同

没有增加安全性,特别是如果您已经在使用 SALT。缺点是每次用户更改用户名时,您都必须重新散列并保留散列。

为每个用户创建一个盐也有意义吗?

是的,这很常见。

如果我的数据库被泄露,这些盐也会在那里,我是否也应该使用全局盐来加密这些盐?

不,不要加密它们。 SALT 的目的只是迫使攻击者必须对每个用户/密码执行新的暴力搜索,而不是对所有人进行暴力攻击。

同时加密用户的电子邮件地址是否有意义?

没有。除非您对此有一些(奇怪的)业务需求。

【讨论】:

    【解决方案2】:

    感谢您在实施前提出问题。不幸的是,这是我给你的最好的乐观点。

    安全很难做到正确。 非常很难做到正确,事实上。如果您对此知之甚少,那么在您尝试之前不要尝试。同时,使用经过验证的基础架构,以(希望)正确的方式为您执行此操作。无论您碰巧在使用什么框架,都应该有一个可用的框架,如果没有,那可能是切换的充分理由。

    也就是说,不要使用盐的用户名,也不要费心加密盐。您也不应该加密(或散列)用户的电子邮件地址,除非您或任何其他人永远不需要知道它(作为系统的维护者)。并且将用户名添加到密码中并没有任何好处,并且有几个缺点,所以也不要这样做。

    就独特的盐而言 - 这是必须。没有它,你还不如没有。在继续之前阅读一些关于加密、散列和加盐(和胡椒)的知识。更好的是,使用前面提到的已经为你做这件事的库。

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2013-02-05
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2021-05-13
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多