Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用盐双重散列密码安全吗?(稍微复杂一点)_Javascript_Security_Password Hash - Fatal编程技术网

Javascript 用盐双重散列密码安全吗?(稍微复杂一点)

Javascript 用盐双重散列密码安全吗?(稍微复杂一点),javascript,security,password-hash,Javascript,Security,Password Hash,在这种情况下,需要通过http/s对用户进行身份验证 在注册过程中,服务器生成salt。这种盐被发送给用户。然后,他通过js将自己的密码和salt进行散列,并将其发送到服务器。 在那里,散列再次用相同的盐腌制,两次哈希和腌制的密码用明文盐写入数据库 如果一个人试图进行身份验证,他会发送他的用户名,获取salt并对密码进行哈希运算。这将发送给服务器,服务器将再次对其进行哈希,如果保存的哈希与此相同,则用户将进行身份验证 我想知道,因为最近的heartbleed bug,最好不要暴露真实密码。但是我

在这种情况下,需要通过http/s对用户进行身份验证


在注册过程中,服务器生成salt。这种盐被发送给用户。然后,他通过js将自己的密码和salt进行散列,并将其发送到服务器。 在那里,散列再次用相同的盐腌制,两次哈希和腌制的密码用明文盐写入数据库

如果一个人试图进行身份验证,他会发送他的用户名,获取salt并对密码进行哈希运算。这将发送给服务器,服务器将再次对其进行哈希,如果保存的哈希与此相同,则用户将进行身份验证

我想知道,因为最近的heartbleed bug,最好不要暴露真实密码。但是我已经读到双重散列可以增加冲突的风险

这是我想象的最安全的方法还是我弄错了?

“在注册过程中,服务器生成了一个salt。这个salt被发送给用户。他说:”我必须马上阻止你

原则上,只要您理解客户端哈希不会增加系统的安全性,它就没有问题。然而,散列/摘要确实意味着收到的密码总是非常特定的形式,不管用户选择的实际密码的形状如何,这意味着你(作为服务器所有者)理论上不知道发送给你的用户的密码

这是不安全的,因为你——以及任何收听者——都可以接受这个散列密码并破解它(因为你在这方面与攻击者没有什么不同)。然而,它确实增加了一层信任:“我必须千方百计找出你的密码是什么”

考虑到这一点,在客户端添加salt是没有用的,如果您从服务器获取salt,则是一种错误的安全感:如果您将salt从服务器发送到客户端,任何可以在客户端看到用户密码的东西也可以在客户端看到salt。您也可以将sating值作为
标题写在页面上,那里没有安全性,您只会浪费处理器时间salt

现在,您仍然希望使用salt在服务器上正确地进行散列,但是让客户端执行任何salt没有意义。只需给他们一个客户端消化器/散列器(比如SHA256库)就可以了。然后在服务器上,您收到密码,根据您知道的哈希密码应该是什么样子(正确的长度?哈希空间之外没有字符?等等)验证密码,然后使用自己的salt对输入进行哈希,并存储/使用该密码对用户数据库进行验证

我想知道,因为最近的心脏出血的错误,这将是很好的永远不会暴露真正的密码

我知道你是从哪里来的,但你还没有想清楚。如果将密码客户端散列并将散列发送到服务器,则此散列实质上就是用户的密码。如果攻击者获得客户端发送到服务器的此哈希值,无论是通过心脏出血、MITM攻击还是其他方式,攻击者所要做的就是将此哈希密码发送到您的服务器(显然不会在客户端再次哈希),以便登录。在客户端对其进行散列不会给您带来任何好处

但是我已经读到双重散列可以增加冲突的风险


理论上是的。如果密码比结果散列长,则输入的熵保证会减少。即使输入比结果哈希短,熵也有可能有所降低。散列这个减少的熵数据再次减少熵进一步(理论上)。实际上,这几乎无关紧要。

不要制定自己的加密协议。为什么要对客户端进行哈希处理?我想使用客户端哈希处理,以防有人闯入网站并修改代码以保存明文密码。此外,如果有人可以通过伪造证书超越https会话,或者用户愚蠢到点击“忽略风险”。我知道这听起来可能有点偏执,但如果我能以最安全的方式进行身份验证,为什么我不应该使用它呢。这就是我的想法,以防我漏掉了什么。@user3334690你是说暴露的盐吗?这会被利用吗?我不同意有人说客户端哈希是无用的。确保它不会阻止攻击者登录您的网站。然而,它所做的是将用户密码隐藏给访问您的数据库的攻击者。在最坏的情况下,他们可能能够检索用户密码的咸哈希,而不是密码本身,这可能会被用户在其他几个地方重用。所以这是一件好事。不要使用你自己的“聪明”密码哈希方案!找到适合您的服务器端语言的最佳实践并遵循它。很可能是bcrypt。如果您只是试图缓解由于未修补openssl而导致的泄漏,您可以通过在客户端上通过某种密码运行密码,然后在服务器端撤消该密码来实现这一点。。。但那太傻了,因为你现在应该已经修补了openssl。。。这样做只会稍微降低密码和用户名同时出现在heartbleed bug的内存转储中的可能性。。。此外,密码将在客户端上清晰可见,因此它仍然是一个有点争议的问题……当然,openssl是最新的。是的,那将是用户密码,但没有人能重建真实的密码。因此,如果用户在网络上使用他的密码,就不会被泄露。很高兴知道双重散列不会影响散列,谢谢。@mate好吧,我告诉你,在某些特定情况下,它会保护其他站点上的密码,这是一个很好的立场。不过我也要说