对称加密
对称加密:通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。
- 场景模拟:用户a向用户b发送消息之前,需要先将对称密钥k发送给用户b。之后用户a将发送的消息通过密钥k加密后传输给用户b,用户b收到信息后用密钥k解密后即可得到消息。
- 对称加密的密钥生成代价比公私钥对的生成代价低得多,但是保密性依赖于密钥k的保密性,一旦被中间人获取,就有可能遭受攻击,因此我们需要将对称密钥再加上一层保护,即非对称加密。
非对称加密
非对称加密:通过单向陷门函数设计公私钥对的生成算法,使得公钥加密后的信息仅由对应的私钥进行解密。
- 场景模拟:用户a向用户b发送信息前,首先需要由用户b根据公私钥对生成算法生成公钥A和私钥A,之后用户b将公钥A发送给用户a,用户b则保管私钥A。用户a将信息通过公钥A加密后传送给用户b,用户b通过私钥A解密后获得收到的信息。
- 但是公私钥对生成代价较高,所以我们可以利用公私钥将对称加密的密钥进行加密,之后再进行传输,双方获得对称加密密钥。
- 中间人攻击:用户a(公钥A)和用户b(私钥A)本来通过公钥A和私钥A发送消息。此时中间人伪装成用户b,生成中间人的公钥B和私钥B,将公钥B发送给用户a,此时用户a将发送的信息通过公钥B加密后传送给用户b被中间人截取,中间人通过私钥B即可知道用户a发送的消息!此时就需要可以验证双方身份的操作,即数字签名。
数字签名
数字签名:数字签名是私钥用于加密,公钥用于解密。为了验证身份发布公钥给浏览器,仅身份登记于第三方信任机构才有公钥可以解开第三方机构用私钥加密的信息。
- 场景模拟:第三方信任机构生成公私钥对,将公钥发布给信息登记过的浏览器,之后第三方机构利用私钥将信息进行加密,而登记过的浏览器就可以用第三方发布的公钥进行解密获得信息。
- 流程介绍:首先第三方信任机构将需要发送的信息通过hash散列后得到摘要,再将摘要利用第三方机构的私钥进行加密得到数字签名,然后将数字签名和发送的信息打包进行传输。(这里注意,发送的信息也可以被中间人获取,但是数字签名的作用只是证明对方的身份,也就是说中间人获取信息但是没有私钥加密最后会对比不一致证明不是发送人。)当接收人收到后,会将信息原文利用hash散列得到摘要,再将签名利用对方的公钥进行解密得到摘要,两者对比,若一致,则是正确的发送方,否则不是。
公钥证书(大汇总)
公钥证书:第三方认证机构发布的公钥和数字签名。
梳理流程(结合下图为例):
- 首先接收方Bob生成自己的公私钥对(公钥加密,私钥解密),然后接收方向第三方认证机构发送Bob公钥注册信息。
- 此时第三方认证机构生成自己的公私钥对(公钥解密,私钥加密)(正规浏览器已经提前安装了第三方认证机构的公钥,所以可以解密),第三方机构将Bob公钥通过hash散列得到摘要,然后用自己的私钥将生成的摘要进行加密得到数字签名,然后将数字签名和Bob公钥打包成证书发送给消息发送方Alice。
- 消息发送方Alice得到证书后,利用第三方机构发布的公钥解密数字签名得到摘要,然后将一同发送的Bob公钥进行hash散列后得到的摘要进行对比,若一致则证明是Bob的公钥,否则为中间人的伪公钥。
- 得到Bob公钥后,发送方Alice将对称加密的密钥利用Bob的公钥进行加密发送给Bob,Bob利用私钥解密得到对称加密的密钥,之后Alice和Bob之间的通信就可以利用对称加密密钥进行传输信息的加密和解密。
好了,以上就是我最近思考加密过程的一点心得体会,如有不准确地方,恳请指正!让我们一起进步,加油!
|