快速总结:
似乎现代网站,为了安全起见,都应该让客户端在将它们发送到服务器之前对自己的密码进行哈希处理,服务器将对其进行重新哈希处理,以避免泄露原始密码(可能在不同站点之间重复使用),并且还需要单独解密,而不是简单地解密单个 SSL 密钥。
原始问题:
只是做了一个快速检查以确保,我惊讶地发现主要网站似乎仍在以原始格式发送登录密码,尽管是通过 SSL/TLS。我知道他们在将它们放入数据库之前会对它们进行散列和盐渍/胡椒粉。但是,我仍然看到一个问题。
似乎在发送之前在客户端使用站点唯一盐对所有密码进行哈希处理,然后对客户端进行哈希处理会更加安全,尤其是鉴于最近的新闻:
美国国家安全局及其盟友经常拦截此类连接——数以百万计。根据美国国家安全局的一份文件,该机构打算在 2012 年底之前每天破解 1000 万个被截获的 https 连接。情报部门对用户输入密码的那一刻特别感兴趣。到 2012 年底,该系统应该能够“检测至少 100 个基于密码的加密应用程序的存在”,每个实例每月大约 20,000 次。(重点补充)
虽然我理解从效率的角度来看,让客户端散列密码是不必要的,但我更感兴趣的是散列原始密码意味着即使数据被截获,无论是在服务器上,预散列,或者在连接期间解密 SSL,它只对登录被拦截的网站有用。
考虑到很多人重复使用密码,我认为这应该是一个主要问题,但这些大型网站仍在发送原始密码并在其末端进行哈希处理。这背后是否有技术原因,或者只是旧的做法应该理想地改变?
澄清编辑:我并不是建议这些网站开始在客户端进行所有散列并按原样将其放入他们的数据库中,他们绝对应该对散列进行散列/加盐。我的建议是客户端对密码进行哈希处理,以便服务器不知道原始数据是什么,因此可以重复使用相同的密码,并且在一个网站上的妥协并不意味着在其他网站上对您的密码的妥协。作为一个很好的奖励,它还将限制恶意代理发现的对登录网站的访问,而不是把你的密码交给他们。