text很多读者认为只要使用https,对http的所有字段进行加密,整个通信过程就是安全的。众所周知,现在的HTTPS通信并不是端到端(EndtoEnd),而是经常穿插代理,包括客户端代理和服务器端代理。代理的存在使得相对严格安全的https存在安全隐患。客户端代理通常不允许用户知道代理的存在。比如企业为了监控员工的https流量,肯定会篡改员工的电脑,让企业网管完全看到员工https的明文流量,其中还包括用户的明文密码。服务器代理通常有服务器数字证书的私钥,可以和客户端建立https加密通信,自然可以看到用户的https明文流量,其中也包括用户的明文密码。以上两种情况,用户的明文密码存在泄露风险。一旦前端对用户密码进行了加密,即使有代理,仍然无法获取到用户的明文密码。前端加密用户密码MD5加密密码不加盐虽然中间代理无法获取明文密码,但仍然可以使用截获的MD5密码登录,仍然存在安全隐患。Saltedone-timepasswordOTP如果每次对用户密码进行加密,同时加入一个随机码Nonce,并且随机码只使用一次,那么每次生成的密码都是一次性的,动态变化的。即使被中间代理拦截,也无法再次登录用户账号。即使没有中间代理的存在,很多https仍然使用RSA算法来实现认证链接和密钥交换(KeyExchange)链接。一旦服务器私钥泄露,历史上拦截的HTTPS加密流量都将被轻松破解,包括用户的明文密码。这也是为什么TLS1.3会彻底放弃RSA算法作为密钥分发算法的原因,因为它不符合PFS要求。PFS需要PFS,PerfectForwardSecrecy,破解任何一个安全元素都无法破解所有数据。如果满足此条件,则满足PFS要求,否则不满足。综上所述,前端对用户密码进行加密是为了更好的保护安全和隐私,即使https被彻底破解,同样可以做到!
