Security 客户端密码哈希与纯文本

Security 客户端密码哈希与纯文本,security,hash,passwords,client,password-hash,Security,Hash,Passwords,Client,Password Hash,我正在组装一个android客户端(可能在未来的iOS、web门户等)和php mysql服务器。服务器端我目前正在使用PHPass库对传入的密码进行哈希和加盐 我应该让客户端通过HTTPS/SSL发送纯文本密码,还是让客户端先进行某种形式的散列。例如,每个客户端是否应该简单地sha1(或某些其他算法)每个传出密码?大多数网站将通过加密连接SSL/HTTPS发送密码纯文本。可以在客户端对密码进行散列,但优点很小,而且客户端语言(JavaScrypt)通常速度较慢,因此可以同时计算更少的轮数,这削

我正在组装一个android客户端(可能在未来的iOS、web门户等)和php mysql服务器。服务器端我目前正在使用PHPass库对传入的密码进行哈希和加盐


我应该让客户端通过HTTPS/SSL发送纯文本密码,还是让客户端先进行某种形式的散列。例如,每个客户端是否应该简单地sha1(或某些其他算法)每个传出密码?

大多数网站将通过加密连接SSL/HTTPS发送密码纯文本。可以在客户端对密码进行散列,但优点很小,而且客户端语言(JavaScrypt)通常速度较慢,因此可以同时计算更少的轮数,这削弱了散列。在任何情况下,服务器都必须计算一个散列,以确保安全

好处很小,因为如果攻击者可以进行ManInTheMiddle攻击,他还可以修改/删除执行哈希的脚本(JS)。只有使用SSL/HTTPS的加密连接才能防止MITM攻击,因此您仍然需要SSL

在您使用应用程序的情况下,它看起来略有不同。由于用户首先必须安装软件,因此无需向客户端发送脚本,因此MITM无法修改此脚本。此外,该应用程序可以相对快速地计算散列(如果它可以运行本机代码的话),因此可以在客户端进行足够的循环

这就是我要做的:

  • 为了方便起见,请通过加密的SSL/HTTPS连接发送密码纯文本,并像现在一样计算慢速BCrypt哈希服务器端
  • 只有当服务器上的负载变得太重时,才可以将慢速BCrypt哈希的计算移动到客户端应用程序。仍然使用HTTPS发送哈希,然后在服务器上计算额外的快速哈希(例如SHA-256)。这更复杂,因为你必须单独交换和储存盐

  • 在客户端上散列密码的另一个缺点是,在不更新客户端的情况下,无法更改散列算法或迭代计数

    对于JavaScript客户端,这不是问题,但您不能轻松保证您的用户将使用本机客户端的最新版本


    因此,我会坚持通过HTTPS发送简单的密码。

    请同时考虑这里的帖子已经被覆盖了不少。看,还有。从安全角度来看,客户机就是客户机,不管它是浏览器还是应用程序。应用程序比客户端代码更难破解,但仍然完全不安全。