Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Security 公共API的密码处理?_Security - Fatal编程技术网

Security 公共API的密码处理?

Security 公共API的密码处理?,security,Security,我不了解存储/处理密码的一些概念 例如,我们的站点有一个用于移动应用程序(iOS、Android等)的公共api,并提供了身份验证 毫无疑问,我们不能在数据库中存储原始密码,也不能在客户端和服务器之间发送原始密码,所以我们使用哈希和salt 这样,我们在客户机上加密密码,并向服务器发送哈希。但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢 我应该在客户端散列密码,发送散列,然后在服务器上再次散列密码吗 这个问题的常见解决方案是什么 非常感谢。您可以使用SSL保护客户端和服

我不了解存储/处理密码的一些概念

例如,我们的站点有一个用于移动应用程序(iOS、Android等)的公共api,并提供了身份验证

毫无疑问,我们不能在数据库中存储原始密码,也不能在客户端和服务器之间发送原始密码,所以我们使用哈希和salt

这样,我们在客户机上加密密码,并向服务器发送哈希。但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢

我应该在客户端散列密码,发送散列,然后在服务器上再次散列密码吗

这个问题的常见解决方案是什么


非常感谢。

您可以使用SSL保护客户端和服务器之间的通信通道,并发送未经加密的密码

第二种方法-将散列密码(不含盐)存储在服务器中,在进行身份验证时-从服务器获取随机令牌(将在几分钟内过期),根据客户端密码计算散列,并使用计算出的散列对接收到的令牌进行编码。然后将编码的令牌发送到服务器。服务器执行相同的操作,但使用存储在数据库中的哈希值,而不是根据密码进行计算。这种方法有缺点-需要存储未经处理的密码或不含盐的散列密码。或者用令牌将盐发送给客户端

但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢


这个问题可以通过使用在使用后过期的令牌来解决。

在客户端(无盐)执行轻量级哈希,然后在服务器端(使用唯一盐)重新哈希。存储salt和(双重)散列密码


服务器端散列也应该使用类似或的东西,它可以执行数千次散列迭代,以故意减慢散列过程。这有助于通过减慢攻击过程来防止哈希的暴力攻击。

您也可以在客户端进行哈希,但必须始终在服务器端进行哈希。这个问题更适合于