PKI
假如: A发送一个重要文件给B
对于这个例子,抛出三个问题:
1、A是怎么对这个重要文件进行加密,保证除了B之外没有人可以查看这个文件的内容
2、当B确定了是A发送过来的文件后,B是怎么确定A发送的文件有没有被篡改过
3、A和B是怎么确定对方的身份的?(B是怎么确定自己接受的文件就是A发送的,A怎么知道他发送的对象就一定是B?有没有可能是别人冒充B)
对于问题1
先介绍2种算法:
1)对称密钥算法:整个加密过程中只使用一个密钥
优点:算法公开、计算量小、加密速度快、加密效率高
缺点:(i)一旦密钥泄露,别人可以获取到密钥,这样也能对密文进行解密,安全性低
(ii)会造成密钥太难管理,因为每次都要产生一个独一无二的密钥,那么情况多起来的话,就会造成密钥很多(A+1=B A+2=C. .....)

但是不够安全,如果有一方丢失了密钥,那么信息也就不安全了
2)非对称密钥算法:产生两把密钥,分别为公钥(Public Key)和私钥(Private Key),其中一把密钥用于加密,另一把密钥用于解密
优点:安全性更高,公钥是公开的,私钥是自己保存的,不需要将私钥给别人
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

一般都是这两种方法结合起来用加密
加解密模型:Alice想要和Bob秘密通信时,只需用Bob的公钥对明文加密,Bob接收到密文后,用自己的私钥解密就可以得到明文了。其他人因为不知道Bob的私钥,所以无法解密出明文。

签名验签模型:借助数学方法可实现类似手写签名的作用,Alice使用自己的私钥对消息进行签名,然后将结果发送给Bob,Bob收到消息以后,使用Alice的公钥验证它。因为只有拥有相应私钥的用户,才能产生可验证通过的消息,所以Alice事后不能否认自己的签名。

问题2:通过散列函数验证
散列函数,也称哈希函数,
主流的散列算法有:MD5、SHA-1。
散列函数的主要任务是:验证数据的完整性,防止数据在网络传输的过程中被篡改
通过散列函数计算的结果叫做散列值(哈希值)
哈希值,相当于数据的“指纹”

散列函数的四大特点
1、固定大小————无论下载的文件多大多小,通过散列函数算出的值都是一个固定大小
2、雪崩效应————只要文件出现一点小小修改,结果的差异是巨大的
3、单向——————不可能通过哈希值算出原来的值是多少,只能进行 文件->散列 这个过程, 不能进行 散列->文件 这个逆过程
4、冲突避免————防止算出的哈希值是一样的,保证哈希值的唯一性(即一个哈希值对应一个值)
如:从一个网站下载一个文件,通过一个能计算散列函数的软件,算出哈希值,然后和官方给出的这个文件的哈希值比较,如果相同,说明文件下载正确,防止文件被恶意篡改,保证文件的完整性
问题3:
为什么要确认身份?

因为如果有人冒充B得到A的公钥,那么他就可以查看到密文了,所以A和B要先确认对方的身份,再进行交换公钥
要确认身份,那么A和B就得给自己办一张“身份证”,来证明自己的身份

首先A把自己的个人信息和公钥上传到CA(证书服务器),然后通过算法先得到A的哈希值,CA再通过自己的私钥将得到的哈希值进行加密,得到签名,然后将这个签名再给A
、
如:B得到A的公钥,验证这个公钥是否为A的流程如下:
1、每个用户都有CA的公钥,所以B有CA的公钥
2、利用CA的公钥来解密A的证书(证书的数字签名是由CA的私钥弄的),得到哈希值1
3、对证书的内容也进行哈希计算,得到哈希值2
4、查看哈希值1是否等于哈希值2,如果相等,校验成功
A和B都有了自己的签名(身份证),就可以证明自己发送的公钥就是自己本人的
这个证书类似于身份证,仅仅用来说明这个公钥属于谁,保证公钥交换安全
但是证书是不需要保护的,就比如A拿到C的身份证,就能真正扮演A吗,变成A吗,别人在校验身份的时候,还要看脸
保护私钥才是最重要的,脸或者指纹就好比于私钥,有了私钥和证书,才能证明身份

浙公网安备 33010602011771号