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吗,别人在校验身份的时候,还要看脸

保护私钥才是最重要的,脸或者指纹就好比于私钥,有了私钥和证书,才能证明身份

 

posted @ 2023-07-21 20:55  Xuraniiiz  阅读(13)  评论(0)    收藏  举报