1、消息认证码

消息认证码(MAC)验证消息的完整性。数据没有被别人篡改。

前提:双方都约定相同的密钥,和相同的哈希函数

发送方

第一步、发送原始消息

第二步、将原始消息生成认证码。引入一个密钥,让其参与哈希运算,得到散列值,也就是消息认证码。

    (原始消息+密钥)*哈希=消息认证码

第三步、发送消息认证码。

接受方

第一步、接收到原始数据

第二步、接收消息认证码

第三步、通过密钥和钥哈希函数运算得到新的散列值,将其与旧的散列值(消息认证码)对比,一样就表示没有被篡改

弊端:

接收方和发送发都在异地,有共享密钥分发困难的问题。可以通过非对称加密解决

没有第三方证明

不能防止否认,因为A和B都有相同的密钥,所以就会有B收到A的消息后,不承认是A发送给B,或者B收到A的消息,但是A不承认是A发送的。

2、数字签名

   数字签名的目的就是告诉所有人这个数据的所有者是谁

  生成签名

    1、发送方生成非对称加密的密钥对,一个公钥,一个私钥。

    2、对原始数据进行哈希运算得到一个散列值

    3、使用私钥对散列值进行签名(加密)生成密文,这个密文就是数字签名

  签名校验

  校验者会收到发送方发来的原始数据和签名。

    1、对接受的数据进行哈希运算,得到散列值

    2、使用非对称加密的公钥对签名进行解密,得到发送者生成的散列值

    3、校验者的散列值和签名者的散列值进行比较,如果相同证明这个数据确实是属于签名的那个

  数字签名的弊端

    接受公钥的人没有办法验证公钥的所有者

 

 

  如图所示:jenny可以验证恐龙发送的被篡改的数据。jenny以为她收到的是LiMing的数据,实际是恐龙的数据。

3、证书和HTTPS

  为了解决这个问题,衍生出了证书和HTTPS

    证书是由一个受信赖的机构(CA)对某个人的公钥进行数字签名。CA有一个密钥对,使用CA的私钥对某个人的公钥进行加密,得到证书。

  HTTPS

    1、在服务器端生成一个密钥对,同时将公钥发送给CA,CA对该公钥进行认证(使用CA的私钥加密),得到证书;

    2、当客户端访问服务器时,服务器将证书发送给客户端;

    3、客户端验证证书没有问题后,使用CA的公钥从证书中取出服务端的公钥;

    4、客户端生成一个伪随机数,使用服务端的公钥加密,发送给服务端;

    5、服务端使用私钥解密得到这个伪随机数就是对称密钥的密钥;

    6、到此解决了对称密钥分发困难的问题,往后就使用对称加密进行通信。