Security 公共API的密码处理?
我不了解存储/处理密码的一些概念 例如,我们的站点有一个用于移动应用程序(iOS、Android等)的公共api,并提供了身份验证 毫无疑问,我们不能在数据库中存储原始密码,也不能在客户端和服务器之间发送原始密码,所以我们使用哈希和salt 这样,我们在客户机上加密密码,并向服务器发送哈希。但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢 我应该在客户端散列密码,发送散列,然后在服务器上再次散列密码吗 这个问题的常见解决方案是什么Security 公共API的密码处理?,security,Security,我不了解存储/处理密码的一些概念 例如,我们的站点有一个用于移动应用程序(iOS、Android等)的公共api,并提供了身份验证 毫无疑问,我们不能在数据库中存储原始密码,也不能在客户端和服务器之间发送原始密码,所以我们使用哈希和salt 这样,我们在客户机上加密密码,并向服务器发送哈希。但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢 我应该在客户端散列密码,发送散列,然后在服务器上再次散列密码吗 这个问题的常见解决方案是什么 非常感谢。您可以使用SSL保护客户端和服
非常感谢。您可以使用SSL保护客户端和服务器之间的通信通道,并发送未经加密的密码 第二种方法-将散列密码(不含盐)存储在服务器中,在进行身份验证时-从服务器获取随机令牌(将在几分钟内过期),根据客户端密码计算散列,并使用计算出的散列对接收到的令牌进行编码。然后将编码的令牌发送到服务器。服务器执行相同的操作,但使用存储在数据库中的哈希值,而不是根据密码进行计算。这种方法有缺点-需要存储未经处理的密码或不含盐的散列密码。或者用令牌将盐发送给客户端 但是,如果一个“黑帽子”窃取了密码散列并用它向服务器api进行身份验证呢
这个问题可以通过使用在使用后过期的令牌来解决。在客户端(无盐)执行轻量级哈希,然后在服务器端(使用唯一盐)重新哈希。存储salt和(双重)散列密码
服务器端散列也应该使用类似或的东西,它可以执行数千次散列迭代,以故意减慢散列过程。这有助于通过减慢攻击过程来防止哈希的暴力攻击。您也可以在客户端进行哈希,但必须始终在服务器端进行哈希。这个问题更适合于