springbootJava web

用户管理模块:如何保证用户数据安全

2021-01-14  本文已影响0人  何甜甜在吗

过去一段时间负责了项目中的用户管理模块,为了保证用户数据安全,该模块涉及了用户数据加密

写在前面

在介绍具体方案之前,首先先介绍一下常加见的加密算法。加密算法可以分为三大类:

对称加密算法
加密和解密使用相同的密钥。对称加密算法加密解密速度快,但安全性较差
常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

非对称加密算法
加密和解密使用不同的密钥,也称为公私钥加密。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。但安全性比对称加密算法高
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。Hash算法常用在不可还原的密码存储、信息完整性校验等
常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1

用户管理模块中需要进行加密的地方

用户管理模块中但凡涉及密码的地方都需要进行加密处理

如何选择加密算法实现加密功能

说明:数据入库加密的密钥和对随机字符串加密的密钥不相同
时序图如下:

用户激活

是不是觉得过程有点过于复杂,由server端管理公钥和私钥,web端获取公钥并对密码加密发送给server端,server端在使用私钥解密密码这样也没毛病啊

小心中间人攻击
什么是中间人攻击,中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻 击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信 任的数字证书认证机构颁发,并且能执行双向身份认证
中间人攻击过程如下:
- 客户端发送请求到服务端,请求被中间人截获
- 服务器向客户端发送公钥
- 中间人截获公钥,保留在自己手上。然后自己生成一个【伪造的】公钥发给客户端
- 客户端收到伪造的公钥后,生成加密hash值发给服务器
- 中间人获得加密hash值,用自己的私钥解密获得真秘钥。同时生成假的加密hash值,发给服务器
- 服务器用私钥解密获得假密钥。然后加密数据传输给客户端
如果直接发送公钥给web端就很容易被中间人攻击,导致数据泄露

时序图如下:


用户登录

说明:上述流程省略了部分业务逻辑,如密码格式校验等,本文主要介绍的是加密解密要抓关键了

小结

用 HTTPS可以解决上述用户数据加密的问题,但是要花钱啊,老板掐指一算,还是研发人员自己去实现吧。第一次在项目中接触用户数据加密,可能仍有不足需要改进的地方,若有纰漏,请指正
大半年不写文章,感觉文笔都生疏了不少,给点赞支持一下呀

上一篇下一篇

猜你喜欢

热点阅读