加密算法

746 阅读6分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第19篇文章,点击查看活动详情

加密算法

1.对称加密

小徐一下子就领会了小王的意思。加密和解密算法是公开的,但密钥是保密的,只有两人才 知道。这样生成的加密消息(密文)别人就无法得知了。小王要求小徐生成一个密钥,然后把密 钥发给他。小徐刚要将密钥发送出去时,一想不对啊,这密钥通过网络发送给你,不是还是会被 窃取吗?

听了小徐的顾虑,小王陷入了沉思,密钥需要两个人都知道,但又不能通过网络传输,那怎 么办呢?

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法 就称为对称加密,也称为单密钥加密。对称加密的密钥只有一个,加密解密为同一个密码,且加 解密速度快,典型的对称加密算法有DES、AES等。

2.非对称加密

小王思考了两天后,兴奋地告诉小徐,他找到了解决方法。这个解决方法不用双方必须协商 一个保密的密钥,而是有一对钥匙,一个是保密的,称为私钥,另外一个是公开的,称为公钥。 用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。 当小王给小徐发消息的时候,就可以先用小徐的公钥去加密(反正小徐的公钥是公开的,地球人 都知道),等到消息被小徐收到后,他就可以用自己的私钥去解密(只有小徐才能解开,私钥是 保密的)。反过来也是如此,当小徐想给小王发消息的时候,就用小王的公钥加密,小王收到后, 就用自己的私钥解密。

这就是非对称加密,密钥成对出现(根据公钥无法推知私钥,根据私钥也无法推知公钥), 加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度 较慢,典型的非对称加密算法有RSA、DSA等。

由于非对称加密速度较慢,小王每次都要用很长时间等待小徐的消息,终于忍无可忍希望能 改善加密速度进行快速传输。又过了两天,小王对加密速度进行了优化,他结合了对称加密与非 对称加密的优缺点。首先生成一个对称加密算法的密钥,用非对称加密的方式安全发给小徐。随 后就不用非对称加密了,只用这个密钥,利用对称加密算法来通信。于是两人又开始愉快地聊天, 内容可以海阔天空,百无禁忌。

数字签名

过了一段时间,小王和小徐总感觉测试总监看自己的眼神怪怪的。小王心虚地想,不会是我 们的信息还是被看到了吧?总监呵呵一笑道,你们的加密策略早就被我发现并且破解了。小王再次陷入沉思,问题到底出在哪里呢?晚上睡觉前小王突然灵光一闪发现了问题的根源所在。假如 小王给小徐发公钥的时候,有个中间人,截取了小徐的公钥,然后把自己的公钥发给了小王,冒 充小徐,小王发的消息就用中间人的公钥加了密,那中间人不就可以解密看到消息了?想到这个 问题后小王一身冷汗,是啊,这个中间人解密以后,还可以用小徐的公钥加密,发给小徐,小徐 和小王根本都意识不到,以为在安全传输呢。要解决这个问题就必须确定那个公钥是只属于小徐 的,而不是他人可以杜撰的。两天后小王又拿出了新的方案。

小王把他的公钥和个人信息用一个Hash算法生成一个消息摘要,这个Hash算法有个极好的 特性,只要输入数据有一点点变化,那生成的消息摘要就会有巨变,这样就可以防止别人修改原 始内容。随后让有公信力的认证中心(简称CA)用它的私钥对消息摘要加密,形成签名:把原 始信息和数据签名合并,形成一个全新的东西,叫作“数字证书”。当小徐把他的证书发给小王 的时候,小王就用同样的Hash 算法,再次生成消息摘要,然后用CA的公钥对数字签名解密, 得到CA创建的消息摘要,两者进行对比就知道有没有被篡改了。

如此一来,信息安全终于万无一失了,小王如释重负(总监欣慰地笑了,原来我的员工还是 很聪明的,以后要给他们多派点活),继续与小徐愉快地聊天了。

传输过程

对数据的加密解密问题处理好了,就剩下数据传输的原理了。如果小王是客户端,小徐是服 务器,传输的原理如图所示。

image.png

(1)客户端发起HTTPS 请求

用户在浏览器里输入一个HTTPS网址连接到服务器端口。

(2)服务器端初步响应

采用HTTPS 协议的服务器必须有一套数字证书,这套证书其实就是一对公钥和私钥。将证 书发回给客户端,证书包含 证书的颁发机构、过期时间等。

(3)客户端解析证书

客户端首先会验证证书是否有效,比如颁发证书的机构是否合法,证书中包含的网站地址是 否与正在访问的地址一致、过期时间等,如果发现异常,则提示证书存在问题。如果证书没有问 题,那么客户端就生成一个随机值,然后用证书对该随机值进行加密。

(4)客户端发送加密信息

客户端发送的是用证书加密后的公钥。

(5)服务器解密信息

服务器端用私钥解密后,得到了客户端传过来的公钥,然后把内容通过该值进行对称加密。

(6)服务器发送加密后的信息

服务器发送用公钥进行对称加密后的信息。

(7)客户端解密信息

客户端用之前生成的私钥解密服务器端传过来的信息,客户端就获取了解密后的内容。