常见的加密方案一般有对称加密和非对称加密,对称加密就是两人持有相同的key(密钥),双方共同加密同一组数据,比较加密后的结果是否相等的一种方案,但这种方案有个坏处就是,密钥暴露,想解密就得把你的密钥告诉别人。
另一种就是非对称加密,非对称加密算法的一些原理,其实是一些数学知识,这里简单介绍下。
通过这篇文章你可以知道,RSA算法可靠的原理,512位和1024位等的区别以及如何选择,JWT设计中存在的问题
欧拉定理 && 模逆元
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的”非对称加密算法”。
关于欧拉定理的一些说明,阮一峰大神的博客里已经有了详细且易懂的一些介绍,http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
这里主要做一些补充说明:
- 利用欧拉定理得出公钥和私钥,主要是根据n和e套用公司计算模反元素d,n和e 组成公钥,n和d组成私钥
- RSA算法保证可靠性的原理是基于对极大整数做因数分解的困难性非常高,所以存在512位,1024位,2048位,1024位基本安全,2048位极其安全
- 解密的原理也是,根据欧拉公式和已知数推出未知数(明文)的过程
JWT 和 RSA
服务端保留私钥和公钥,客户端只保留公钥,私钥签名token,返回给客户端,客户端用公钥验证,除非私钥泄漏,不然,这种算法是很安全的。
JWT 中存在的问题
JWT 其实就是通过服务端的运算,把一些用户信息写到一个json里面,然后对其加密不存储返回给客户端,重点就是这个服务端不存储,带来了一些问题,正常情况下是没什么太大问题的,但假设开发人员掌握了服务端的密钥然后他又离职了,于是这个人就可以构造任何人的数据了,我觉得这是极其危险的,我想的一个解决方案就是,通过分布式配置中心解决这个问题,不硬编码在代码里面,除非研发人员通过打日志方式查看,这就太明显了容易被发现,可以提高安全性。
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章