对称加密(Symmetric Key Encryption)
所谓对称加密就是指对数据进行加密和解密时所使用的密钥是同一个,所谓对称的,所以也称这种加密方式为单密钥加密。
最常见的对称加密算法是AES(Advanced Encryption Standard,高级加密标准)加密算法,又称Rijndael加密算法,是美国联邦政府采用的一种区块加密标准,密钥长度是128、192或者256,安全强度很高且性能很好,替代了原先的DES(Data Encryption Standard,数据加密标准)加密算法。
还有一种改进后的对称加密算法,就是不再将明文当做一整个数据进行加密,而是将其分成很多的数据块进行分块加密,就是所谓的分组加密,也叫块加密(Block Cyphers),常见的算法模式有ECB、CBC、PCBC、CFB、OFB、CTR等,微信支付中使用的是AEAD_AES_256_GCM。
非对称加密(Asymmetric Key Encryption)
从上面的对称加密(单密钥加密)定义就可以理解为什么会有非对称加密,就是说非对称加密有两个密钥,且是不同的,即不对称的,你也可以叫它”双密钥加密“。它的两个密钥一个叫公钥(Public Key),一个叫私钥(Private Key)。使用公钥加密后只能用私钥解密,反之,私钥加密后也只能用公钥解密。至于公钥加密和私钥加密的区别和目的,后面讲述身份认证时会进行详细的说明。
常见的非对称加密算法有RSA、DSA、ECC、DH,其中RSA加密算法是最著名的也是应用最广发的非对称加密算法。
对称加密与非对称加密的对比
对称加密
优点:运算速度非常快。
缺点:虽然对称加密的运算速度非常快,但是他有一个很大的问题,那就是密钥的安全性。因为秘钥需要数据交换双方的共享,也就是说要持有同一个密钥,也就是说数据传输的过程要对密钥进行传输,所以数据传输的过程中密钥一旦被窃取,数据就会被破解,通讯过程当然就没有机密性可言。
非对称加密
优点:保密性好。私钥严格的保密,公钥可以任意分发,即使公钥被窃取,仍然无法破解加密后的信息。
缺点:运算速度非常慢。它这个速度慢的原因是它基于很复杂的数学算法才得以实现它的安全性,慢到什么程度呢?这么说吧,就因为它的计算速度非常慢,从而导致它无法保证通讯的速度,极端情况下比对称加密慢1000倍,自然就无法取代对称加密的地位,所以并没有出现摒弃对称加密而全部使用非对称加密的局面。
对称加密不安全,所以引入了非对称加密,但是非对称加密也有缺点就是效率太低。1000倍的效率。
混合加密(Hybrid Key Encryption)
一般A和B要实现通信,那么A要用B的公钥加密,然后B接收到之后再用B的私钥解密,这样来保证消息的安全性。
但是呢,都用非对称加密通信的话,效率实在是太慢了,所以就采用了 非对称加密 + 对称加密 相结合的方法。
其实上就是先通过非对称加密将 对称加密的key 先通知到对方,然后后续再用对称加密通信。
上面的仅仅是 从消息的加密性来讨论的。但是还有一个问题就是,如何证明发消息的人的身份呢?为什么会出现这个问题呢?因为每个人的公钥是公开的,假如A用B的公钥发送了消息,C也用B的公钥发送给B消息,那么B如何判断消息的来源呢?
公钥加密,私钥解密的作用是加密信息。因为只有拥有私钥的人才可以获取信息明文。
私钥加密,公钥解密的作用是身份认证。因为只有拥有私钥的人才可以发送信息密文。
如何保证数据的完整性?
https安全证书就是混合加密的技术,万一对称加密的密钥被拦截,那么黑客就可以伪造加密信息了,为了防止这种情况发生,我们需要给数据一个类似指纹的东西,我们称为摘要,也就是哈希算法。
但是还是会出现问题,因为hash算法都是公开的,黑客也可以伪造啊,所以问题就出现在摘要的身份认证上面,所以就和上面的结合上来了,我们用私钥来加密摘要,加密后的结果我们称之为数字签名。