对称加密和非对称加密;公钥,私钥的理解
加解密一般会在调用第三方接口时用到,在此记录一下。本文不涉及加解密原理,只涉及到一些基本的概念。ps:文中出现的M、EM、VEM等都是随手写的,不是专业术语。
1.加密
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
反之,将“密文”变为“明文”的过程被称为解密。
2.加密的分类
(1)对称加密
对称加密又称为单密钥加密,即双方使用同一个密钥进行加解密。既可以使用这个密钥来加密,又可以使用这个密钥来解密。整个加密过程可以这样来表示:
A想要发送信息M给B:
(1)A需要保证B也拥有相同的密钥,于是A首先将密钥发送给B。
(2)A用这个密钥对信息M进行加密,加密后的信息为EM。
(3)A将加密后的信息EM发送给B。
(4)B收到加密信息EM后,用他持有的密钥即可对加密信息EM进行解密获取到原来A要传递的信息M。
对称加密的优点在于计算量小,速度快,简单易用。缺点在于无法保证密钥在传输途中的安全性。这个密钥很容易被其他人获取,一旦这个密钥被其他人获取,那么所有的信息都会被泄露。整个过程可以这样来表示:
假设A和B发送信息的过程中还有一个喜欢干坏事的C,在A将密钥传输给B的过程中,C也窃取到了密钥,那么在这之后A和B传输的所有信息,C都可以窃取并解密。
(2)非对称加密
对称加密在加密和解密时使用的是同一个密钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公钥是公开的,可以将它发送给任何人。私钥则是私有的,必须妥善保管且注意保密。
公钥和私钥都可以用来加密或解密。其中:公钥加密后的信息只有私钥能解密,即“公钥加密,私钥解密”。私钥加密后的信息只有公钥能解密,即“私钥签名,公钥验签”。下面举例来说明加密过程,主角仍为A,B以及干坏事的C。
A拥有公钥A和私钥A,B拥有公钥B和私钥B。A想要发送消息M给B:
(1)B将自己的公钥B发送给A。
(2)A获取到B的公钥B之后,用公钥B对信息进行加密,加密后的信息为EM。
(3)A将EM发送给B。
(4)B收到EM后,使用自己的私钥B对EM进行解密,解密之后获取到原来A要传递的信息M。
非对称加密可以避免密钥泄露导致信息被破解的问题,因为只有公钥会在网上进行传输,且公钥本来就是要发给其他人的。在上述过程中,即使C获取到了公钥B,也无法对EM进行解密。因为只有私钥B才能对EM进行解密且私钥B只被B所持有。
看起来使用非对称加密传递信息很安全,其实不然。在上述过程中,C可以伪装成A发送消息给B,整个过程可以这样来表示:
C窃取了公钥B,同时在A和B的通信过程中窃取加密后的信息EM。C也拥有公钥B,虽然无法解密EM,但C可以伪造假信息,并使用公钥B对假信息进行加密,加密后的假信息为VEM。之后C将VEM替换原来的EM发送给B,B就会错将假信息当作A发给自己的真信息。
C伪造假信息传给B这个过程就产生了两个问题:
1) B无法确认是谁在给他发送信息。
2) A发给B的信息可能会被篡改。
那么这些问题如何解决呢?这就需要签名以及验签的过程。在这个过程中还会涉及到摘要以及摘要算法。
摘要:需要传输的信息经过摘要算法转换为的一个长度固定的数据串。
摘要算法:从已有数据中抽取出一部分数据片段经过一系列复杂的计算然后糅合在一起形成的密文,摘要算法对输入数据尤其敏感,输入数据发生任何变化都会导致密文的不一致。由于生成的密文只是通过一部分数据片段计算出来的,因此摘要算法是一个不可逆的过程。MD5就是一个比较常用的摘要算法。
A在向B发送信息时:
(1)A对信息使用摘要算法生成摘要。
(2)A使用自己的私钥A对摘要进行加密,生成签名。
(3)A将签名附到信息上,并对整个信息通过B的公钥B进行加密,并将加密后的信息发送给B。
B收到加密后的信息后:
(1)B使用自己的私钥B进行解密,得到签名和信息。
(2)B使用A的公钥A对签名进行解密,如果能够解密成功说明这个信息确实是由A发送的。
(3)解密成功后,可获取到信息的摘要数据。将(1)解密后获取的信息通过相同的摘要算法进行计算,获取到本地生成的摘要数据。
(4)将本地生成的摘要数据与获取到的摘要数据进行对比,如果相同则说明内容没有被篡改(摘要算法的特性)。至此验签结束。
虽然非对称加密相对比较安全,但是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
以上为个人理解,如果有错误,希望大家能够指正。谢谢!