当前位置: 首页 > 知识库问答 >
问题:

使用salt密码进行身份验证

卢阳泽
2023-03-14

我正在使用scrypt生成html" target="_blank">用户密码的强哈希值。我想登录用户,但不想通过网络以明文形式发送密码,如何检查密码是否正确(没有往返),因为它是加盐的?

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

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

如何实现这一点?身份验证令牌实际上安全吗?我猜它可以简单地用来冒充任何人?

共有2个答案

谷梁博易
2023-03-14

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

如果您想进行客户端scrypt处理,我有两个来源可以为您详细解释正确的方法。

  1. 用于为Web应用程序保护数据库中的密码的方法。如果您不想理解所有的基本原理,只需跳到第4节查看实现(其中PPF=您的scrypt)

它们是稍有不同的解决方案,但基于相同的想法,其中任何一种都应该适合您。

公西星海
2023-03-14

不想通过网络发送明文密码,

好主意,但是如果连接没有加密(比如SSL/TLS),那么您发送的任何内容都是纯文本。如果您在客户端散列一个密码,并通过网络发送,那么这就是密码。有人会说这没有什么好处,但它确实阻止了用户公开他们的实际密码,他们可能会在其他网站上重复使用这些密码。(此处阅读更多)

理想情况下,您可以使用SSL/TLS之类的东西来加密连接。我想如果这不可能的话,在您发送的消息本身上使用带有证书的非对称加密将是一种重新发明轮子的好方法,但我不建议在没有安全人员检查的情况下这样做。这很容易搞砸,规则是永远不要推出自己的加密方案。

如果不能验证/失效/更新公钥,那么这不是一个好方案。

我需要将salt发送到客户端,对密码进行散列,将散列发送到服务器,进行比较,然后返回一些身份验证令牌

盐本不应该是超级机密,但这样分发并不好,尤其是给未经认证的用户。如果连接未加密,则可以拦截身份验证令牌、哈希、salt等。即使他们不能,你也没有通过这种方法解决用户创建帐户的问题(也许你不需要,但值得一提)。

必须使用非对称加密,只有服务器才能解密数据。

 类似资料:
  • 我使用包括Spring Security和Vaadin在内的https://start.spring.io设置了一个Spring Boot项目。然后我将Vaadin版本设置为22.0.4,并按照本教程使用Vaadin Flow和Spring Security设置登录页面:https://vaadin.com/docs/v22/flow/tutorial/login-and-authenticati

  • 我试图建立一个认证系统与Laravel 4与Facebook登录。我正在使用Laravel 4的madewith love/laravel-oAuth2包。 当然,当用户登录Facebook时,没有密码可以添加到我的数据库中。但是,我正在尝试检查数据库中是否已经有用户id,以确定是否应该创建一个新实体,或者只是登录当前实体。我想使用Auth命令来实现这一点。我有一张叫做“粉丝”的桌子。 这就是我正

  • 客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢

  • 我正在尝试使用Shiro对我正在构建的JSF Web应用程序进行身份验证和授权。不幸的是,我仍然有一些困难缠绕我的头如何把所有的东西放在一起。 我已经成功地(100%使用shiro.ini文件)将身份验证配置回存储测试凭据集的JDBC领域。当凭据以明文形式存储时,它对我来说非常有效。 我的最终目标是统一MySQL数据库中的现有凭证集。密码存储为SHA-256盐哈希。我花了一整天的时间阅读可用的文档

  • 是否可以在Flatter中使用用户名和密码(而不是电子邮件和密码)实现Firebase身份验证?有没有办法用Firebase Auth插件来实现这一点?

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢