如何保证密码的传输安全
一般的传输过程:
过程1、服务端对密码进行加密处理
优点:保证密码明文对后台人员不可见
缺点:可拦截
过程2、客户端使用对称加密算法对密码加密
优点:保证过程1中被拦截密码在客户端登录模块不可用
缺点:拦截密文,并在传输中可篡改
过程3、客户端和服务端使用非对称加密算法(非CA证书+单向认证)对密码进行加密解密
优点:传输过程即便被拦截,也难以破解
缺点:部署困难(值得一提的是:信任不该被信任的证书是不安全的,即在得到正确的通信格式后,通过伪造后台服务可以通过密码认证)
过程4、客户端和服务端使用非对称加密算法(CA证书+单向认证)对密码进行加密解密
优点:解决过程3中的问题
缺点:CA认证是要一笔额外的开支(值得一提的是,CA证书也不一定是安全的>_<)
过程5、客户端和服务端使用非对称加密算法(CA证书+双向认证)对密码进行加密解密
优点:目前最好的传输安全措施
缺点:部署更加困难(你需要单独生成、下载、安装和维护客户端证书)
综上:
目前最安全的做法是:CA证书+双向认证+传统密码。但有没有一种更实用的加密方式呢?比如对传统的密码进行改良,比如在其中包含客户端和服务端的识别信息,而确保不被不被伪造而欺骗客户端和服务端呢?一个简单的设计是:!@#!%¥%>_<,具体如下,
一个简易的密码改良方案
1、 客户端请求注册信息:账户、密码摘要、部分密码明文或其他密码进行某种处理的结果(如xxx),服务器一一保存
2、 客户端请求登录信息:账户、密码摘要、xxx摘要
3、 服务端一一验证,成功则反馈:(xxx+密码摘要)的摘要字串
4、 客户端验证反馈并判定是否通过
解释:是否存在伪造服务器的情况?只要xxx没有被泄漏,步骤4中不会判定通过
缺点:注册时一旦被拦截就完蛋了!!!一个弥补的做法是拼接密码摘要和xxx进行混淆>_<