终于知道公钥、私钥、对称、非对称加密是什么了
有接入过第三方服务的同学应该都接触过公钥、私钥这类的说明,尤其是一些对参数要求验证的服务,比如支付类的。
通常对于高保密要求的参数都会有加密要求,这时候,如果你之前不了解加密算法,就很容易被公钥、私钥的使用给绕迷糊了。有时候虽然接口都调通了,但是还是一头雾水,这就通了?
那接下来我们就来解开这团迷雾。咱们只讲逻辑和一部分逻辑,不讲数学算法,因为数学这块儿我也不是很懂。
加密算法在大类上分为对称机密和非对称加密,都用来加密,只不过使用场景、性能、安全性方面有些不同。
首先说什么是加密呢?
加密就是通过一种方式将一个显而易见的东西变成难以理解的东西。
比如这儿有个字符串“我真棒”,这三个字儿要摆在你面前不是一眼就知道我很棒了吗。
但是我要给你看这样一串东西呢?你还能一下子知道是什么意思吗?
232 10 5,33 50 12,109 45 1
其实这还是那三个字,只不过是经过加密的密文,只有知道了加密的方法才能还原出来,也就是解密。
加密的过程可能是这样的:
- 首先买一本叫做《人间清醒》的书;
- 然后按照逗号分隔,每一个逗号分隔开的表示一个字;
- 然后每一组是三个数字,第一个数字表示所在页,第二个数字表示所在行,第三个数字表示所在列(第几个字),所以
232 10 5
,表示第232页,第10行,第5个字。
还有,比如我之前有个温州的同事,他打电话的时候对于我们来说就是语音加密了,能听见他的声音,但是说的是什么内容一个字也听不出来。这也可以理解为一种加密,把普通话的发音转换成温州方言的发音。
对称加密
对称加密中所说的对称是对加密和解密而言的,也就是加密和解密的过程使用相同的密钥。
我们经常用到的落库加密、文件加密都可以使用对称加密的方式。
目前最常用也是最安全的对称加密算法是 AES,AES 还分为 AES-128、AES-192和AES256,后面的数字代表加密密钥的位数,位数越高呢,加密效果也就越好,更加不容易被破解。同时,位数越高,加密和解密过程中的计算量也会越大,内存占用也就更大,消耗的资源更多,需要的时间也就更长。
有利有弊,看你的需求而定。基本上,一般场景下 128位就足够安全了。AES 到目前为止,可以说没有漏洞,而且128位就可以保证不会被暴力破解。而更高位数的可能会用到国家级的保密数据上。
AES 是分组加密算法,除此之外,大部分的加密算法都是分组加密算法。
块加密算法就是将需要加密的数据分成一个个的固定长度的分组,比如 128位一组,然后分别用算法对每一组进行加密,如果最后一组不足128位的话,还要用填充算法进行填充,保证达到128位。
常用的分组算法有CTR和GCM,CTR 和 GCM 有并行计算的能力,并且, GCM 还能额外提供对消息完整性、真实性的验证能力。
所以我们在某些地方可能看到 AES-128-GCM、AES-256-CTR 这样的写法,前面表示加密算法,后面代表分组算法。
不足之处
对称加密本身从算法层面来说已经足够安全了,但是在密钥分发方面有些不太容易管理。
因为加解密的密钥相同。我加密的数据想要被别人使用,我就要把密钥告诉要使用的人。知道密钥的人、保存密钥的服务器越多,风险就越大。约束自己容易,约束别人难啊。但凡有一方不小心把密钥泄露就完。一个木桶能装多少水是由最低的一块木板决定的。
非对称加密
由于对称加密的密钥分发问题,非对称加密算法可以完美的解决。
刚毕业不就的时候,和第三方服务做集成,有关于接口参数加密的指引文档,虽然按照人家提供的 demo 可以正常集成,但是文档上说的公钥、私钥还是搞的很迷糊。
现在就来捋一捋啊,就以第三方服务角度来说。假设我是一个支付服务商,为大家提供支付接口的。
公钥
公钥是开放的,谁都可以获取。我作为一个支付服务商,任何到我平台上注册的用户都可以获取到公钥,公钥可以是相同的。
私钥
私钥是绝密的,我作为一个支付服务商,必须将私钥妥善保存,无论是保存在数据库中还是保存在服务器,都必须保证私钥不对外,只有我自己可以使用。
- 使用我服务的用户获取公钥;
- 调用方(客户)用公钥对接口参数进行加密,然后调用接口;
- 我方(支付服务商)用私钥对参数进行解密,然后使用参数进行业务处理;
以上是公钥、私钥的使用过程,这样一看就很明确了。
之所以说是非对称加密,是因为私钥只是用来解密的,用公钥加密过的数据,只有用对应的私钥才能解密出来。所以说,即使有那么多人得到了相同的公钥,也无法获取别人加密过的数据。
最常用的非对称加密算法是 RSA ,RSA 有1024、2048、3072、4096、8129、16384 甚至更多位。目前 3072 位及以上的密钥长度被认为是安全的,曾经大量使用的 2048 位 RSA 现在被破解的风险在不断提升,已经不推荐使用了
RSA 算法的性能要比对称加密 AES 算法差1000倍左右,虽然数学原理上不太明白,但是有数学常识就可以知道,使用不同的密钥进行加密和解密,必然要比使用相同密钥的算法复杂很多,由此肯定会带来性能上的开销。
非对称加密适合用于那些对安全性要求更高的场景,例如支付场景、数字证书、数据加密传输等等。
还可以看看风筝往期文章
用这个方法,免费、无限期使用 SSL(HTTPS)证书,从此实现证书自由了
来源:juejin.cn/post/7434615081394667571