用腌制密码进行认证

我使用scrypt来生成用户密码的强哈希值。 我想登录用户,但不希望通过电报以明文形式发送密码,如何检查密码是否正确(没有往返),因为它是盐渍的?

我有一个客户端/服务器场景。 客户端是台式计算机上的应用程序(不是网站,也不是http服务器)。

我怎样才能做到这一点? 我只是走到了这一步:我在客户端生成salt + hash,从其中形成mcf并将其发送到我的服务器。 将mcf保存到数据库。 我没有发送密码,只是实际上没用的散列(因为scrypt应该很强大,并且需要几百万年才能将其反转)。 我现在如何将用户登录到我的服务中,而不将明文密码发送到服务器进行比较? 我不能重复它,因为它会导致不同的哈希,由于不同的盐? 我需要将salt发送给客户端,对密码进行哈希处理,将哈希发送到服务器,比较它并发送一些身份验证令牌。

我怎样才能做到这一点? 身份验证令牌实际上是否安全? 它可以简单地用来冒充任何人,我猜?


不想通过电线以明文形式发送密码,

好主意,但如果连接没有加密(如SSL / TLS),那么无论您发送的是明文。 如果你散列密码客户端,并通过网络发送,那么这就是密码。 有人会说在这里没有任何好处,但它确实会阻止用户暴露他们的实际密码,他们可能会在其他网站上重新使用它们。 (在这里阅读更多)

理想情况下,您可以使用SSL / TLS等加密连接。 我想如果这是不可能的,那么使用非对称加密和证书对你发送的消息本身是一种重新发明方法的好方法,但是我不愿意建议在没有安全人员的情况下查看它。 这很容易搞砸,而且规则永远不会推出自己的加密方案。

如果你不能验证/无效/更新公钥,那么它不是一个好的方案。

我需要将salt发送给客户端,散列密码,将散列发送到服务器,比较它,并发回一些身份验证令牌

盐不应该是超级秘密,但把它像这样给予是不好的,尤其是对于未经认证的用户。 如果连接未加密,认证令牌,哈希,盐等都可以被拦截。 即使他们不能,你也没有解决用户通过这种方法创建账户的问题(也许你不需要,但值得一提)。

只有服务器可以解密数据时,您必须使用非对称加密。


对你的问题没有简短的回答,因为如果你做错了,会有很多陷阱。 但正如格雷所说,你确实需要TLS保护。

如果你想做客户端的scrypt处理,我有两个资源可以给你详细的解释。

  • 保护Web应用程序数据库密码的方法。 如果你不想理解所有的基本原理,只需跳到第4节看看实现(PPF =你的scrypt)。
  • 客户端加服务器密码散列作为一种可能的方式来提高安全性,防止暴力攻击而不会使服务器过载。
  • 他们是略有不同的解决方案,但基于相同的想法,或者应该足够适合你。

    链接地址: http://www.djcxy.com/p/21585.html

    上一篇: Authentication with salted password

    下一篇: Why do salts make dictionary attacks 'impossible'?