2

我读过一些关于加密密码的文章,我读到的似乎 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

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

4

2 回答 2

2

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

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

为每个用户创建盐是否有意义?

是的,这很常见。

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

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

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

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

于 2013-09-12T14:39:46.750 回答
1

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

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

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

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

于 2013-09-12T14:40:00.727 回答