双密码验证

时间:2015-11-18 20:08:46

标签: php security authentication passwords

我决定在最近的一个项目中开始使用双密码验证。 登录详细信息包括:电子邮件,密码,密码。

密码(最小8小时)和密码(最小6小时)是两个密码。

为了尽可能地破解它们我认为我应该使用openssl加密用户名并使用两个密码作为加密密钥和初始化向量。

openssl_encrypt($email, 'aes-256-cbc', $password, false, $secret)

这是安全还是我想出了一个坏主意?

2 个答案:

答案 0 :(得分:3)

  

这是安全还是我想出了一个坏主意?

你是rolling your own crypto,所以从这个意义上说, 是一个坏主意。

至于安全性:openssl_encrypt()期望$password参数是加密密钥,而不是人类可读的密码。同样,IV应该是一个随机的每个消息字符串。对两个输入使用人类可读值是危险的。 (具体来说,你更容易受到蛮力的影响。)

听起来您想要使用password_hash() + password_verify(),然后与您的"秘密&#34集成双因素身份验证解决方案(例如Yubikey,Google身份验证器) ;字段。

答案 1 :(得分:0)

您需要在数据库中保存某种信息。你所做的与主要完成的工作以及安德鲁在上面发布的内容非常相似。密码安全散列的一般方法是为每个用户生成某种独特的盐,在您的情况下,您决定基于秘密这样做,但您可以安全地使用某种随机信息。

然后使用此salt散列此密码,并将salt和散列密码保存在数据库中。当用户输入密码进行验证时,您只需使用该用户的盐对其进行哈希处理,如果它与哈希值匹配,则表示已成功通过身份验证,但是由于您对密码进行了哈希处理,因此很难获得访问权限的人到你的数据库来反转这个过程,因为他们需要单独破解每个密码(或用彩虹表等做一些事情)。

您发布的内容是上述标准的一个版本。