CRYPT_SHA512的迭代次数与bcrypt一样强(及相关问题)

时间:2011-06-14 11:51:31

标签: php security cryptography kohana

我正在写一个用户登录系统的第一次尝试,并希望能够做到正确。我觉得我在这里是重复的领域,但是因为我所有的阅读都无法找到几个问题的可靠答案。如果我错过了一些东西,请随时指出我正确的方向。

我将在所有密码上使用每用户使用128位的盐,并强制使用“强”(主观我知道!)密码,但无法确定散列它们的最佳方法是什么,

  1. 永远使用CRYPT_SHA512迭代 和使用一样强大 CRYPT_BLOWFISH

  2. 是否有有什么区别 在CRYPT_SHA512之间 迭代,并重复 hash_hmac使用sha512 a(大) 次数。是一个比一个更好 另一个和推荐的 用于散列密码?我问因为 我正在使用Kohana和默认值 auth实现使用 hash_hmac。我认为不会 太难添加迭代了 那(我将不得不这样做 修改它以添加每个用户盐 无论如何),这导致我...

  3. 是否有可以执行此操作的模块 Kohana(3.1)?在我写作之前 拥有,如果那里有什么东西 这是合适的,我很乐意使用 那。所以,执行的东西 哈希拉伸(无论是bcrypt还是 sha512)并允许每个用户使用盐。 最后,

  4. ...正如评论中指出的那样,问题4完全是一个单独的问题所以我正在摆脱它。随意忽略它。我不会完全编辑它的唯一原因是它已在答案中被引用。

    <击>  4.我的系统将允许具有不同权限的用户。     有些人将成为管理员     完全的权利,一些开发人员     一路上权利略微减少     下载到拥有权限的匿名用户     仅举例留言。     我找不到任何东西     关于这个的信息真的。什么     是存储用户的“正确”方式     数据库中的帐户类型。一个     天真的第一个念头就是那么简单     用户表中的整数     够了,但我忍不住想     这是一个非常糟糕的主意。如果     有人掌握了数据库     要解决哪个问题并不难     int代表管理员,     然后他们只需要蛮力     获得完全访问权限的一个密码     权利。简单来说就够了     哈希帐户类型整数和     存储,或者我应该看     在另一种方法?

1 个答案:

答案 0 :(得分:1)

问题1-3的答案实际上是一个答案,由几个部分组成。

首先,您应该使用每用户盐的强哈希。特别是我会建议PBKDF2,这是一个有用的系统。这包括迭代。

您对bcrypt的引用略有不同。密码应该始终是单向散列。您可以使用PBKDF2或hmac之类的功能来执行此操作。您不应该使用可逆算法。 然而最好是将盐存储在散列本身之外。这样做的一个建议是使用从文件系统而不是数据库访问的密钥来加密盐。优选地,在具有600个权限的文件中,该文件具有由web服务器用户以外的某人拥有并由setuid等加载的人。这种方式即使数据库受到损害,仍然没有足够的信息来获取密码。

第4部分是关于存储ACL的数据结构。有lots of options,所以请看看适合你的东西。您可能不需要完整的ACL,而只需要具有用户角色/组或特定权限标志。这取决于您的申请。