对称加密算法
小S和小T在网上聊天,聊天内容通过网络传送给对方,但是他们不想对话的内容让第三方知道,怎么办呢?那就把对话内容先加密再传给对方吧,然后再由对方解密,于是他们俩人选定了一个共同的密钥(key),通过这个密钥可以加密和解密信息
小S打了一段字:ABCDE ,然后通过密钥加密,密文是EFUXI,然后通过网络传送给小T,这样就算有人截取到了这个密文,没有这个密钥也不知道小S说的是什么。
小T接收到了小S的密文: EFUXI ,然后通过他们两个共同拥有的密钥对密文进行解密,知道了小S想说的话其实是ABCDE ,这样就完成了一次对话。
上面就是对称加密算法的流程,通讯双方拥有同一密钥,使用同一个加密解密算法,实现信息的保密传输。但是这样有很多问题
非对称加密算法
小S开了一个网店,每天要和好多客户交流,用户经常需要把个人信息发送给小S好让他寄东西给他们,这就又需要对这些用户信息进行加密了。
于是小S想把自己的密钥分发给这些用户,可是用户太多了,分发给这么多用户,密钥很容易就泄露了,怎么办呢?
小S想到了非对称加密算法
,他创建了一对密钥,也就是两个密钥,一个叫做公钥
,一个叫做私钥
,用私钥加密的信息只有用公钥才能解密,用公钥加密的信息只有私钥才能解密,小S把公钥放在了网上,任由客户下载,而小S保存着私钥,不给任何人。
客户在发送私人信息给小S的时候,先下载公钥,通过公钥对信息加密后再发送,这样没有私钥是解不开加密信息的,也就保证了信息的保密性
* 非对称加密算法
广泛使用于分布式系统,不过对于对称加密算法
来说,它需要加密与解密的时间更长,更复杂 *
数字签名
小S网店开的越来越好,他想答谢新老客户的厚爱,决定在网上发表一篇声明说明店里最近的优惠政策。 但是他怕声明发表出来后有人私自篡改他写的声明,对他进行摸黑,那么如何能证明这个声明确实是小S写的呢?
于是小S想到了数据摘要算法
,又叫做Hash
算法,这个算法可以针对一段数据进行压缩,压缩成一段只有几十到几百字节的”摘要”,而且原数据任何一位的变动都会导致这个”摘要”的不同。这样只要小S写好声明,然后用算法对声明生成一段”摘要”,然后将这个放在文章下面就好了。
这样用户看到这个文章的时候,只要用相同的算法再进行一次Hash
算法,与小S生成的”摘要”一对比,如果完全一致,就说明这篇声明是小S写的并且没有改动过啦!
可是万一有人连小S的”摘要”都伪造了怎么办呢?于是小S用自己非对称加密算法
钥匙对中的私钥对这个”摘要”进行了加密,这样用户只要用从网上下载下来的公钥对这个”摘要”进行解密后再对比就好了,不会再有人能冒充小S了,因为私钥只要小S一个人有。
那么问题又来了,既然小S有私钥,为什么不直接对整篇声明进行加密呢?还要用数据摘要算法
干什么? 在这里,数据摘要算法
主要起到了压缩数据大小的作用,因为非对称加密算法
确实很慢,如果只是为了验证数据完整性就全部加密数据那实在太慢了,而仅仅加密一个几十字节的数据明显速度会提升很多。
上面这一段数据摘要算法
+私钥加密
的过程就是所谓的数字签名
,主要目的是为了确保数据完整性,但是数据传输还是明文的
证书
有一天小T找到小S,告诉小S他在网上发现了好几个公钥,都说是小S那个网店的公钥,他都不知道哪个是真的了。
小S发现确实是这样,网上有人冒充是他的公钥提供给网友下载,干扰他的生意,于是他决定,把他的公钥放在一个权威的机构,让这个机构替他发放公钥,公众都信任这个权威机构,这样就不担心有人冒充他的公钥了。
这样小S找到了一个证书发放机构(CA),告诉他们”我需要一个证书,来证明我的公钥是真的!”,CA工作人员让小S提交了一些必要的信息,然后审核他提供的信息,然后让小S把他的公钥交给CA。
CA根据小S提供的信息和他提供的公钥,制作了一份电子版的证书
这份证书包含着小S真正的公钥,而且还写明了这个公钥是小S那个网店的公钥,然后CA又对整个证书进行了数字签名(用CA机构自己的私钥加密),然后把这个证书放在了自己(CA)的网站上供用户下载。
小S开心的回去了,告诉所有客户,以后需要我的公钥只要去那个CA的官网去下载我的证书,然后用CA的公钥解密,就可以找到我的网店的公钥了,再也不用担心别人伪冒我的公钥了,只有CA官网里那个是真的!
上面这就是证书的说明,前提是用户要信任CA机构