1. 消息完整性检测方法
消息完整性( 报文认证) 的目标:
1. 证明报文确实来自声称的发送方;
2. 验证报文在传输过程中没有被篡改;
3. 预防报文的时间、 顺序被篡改;
4. 预防报文持有期被篡改;
5. 预防抵赖;
消息完整性检测方法:散列函数。主要有以下两种:
1. MD5:128位散列值;
2. SHA-1:160位散列值;
散列函数的特性:
1. 散列函数算法公开;
2. 快速计算;
3. 对任意长度报文进行散列产生定长输出;
4. 对于任意报文无法预知其散列值;
5. 不同报文不产生相同的散列值;
6. 单向性;
2. 报文认证
报文认证: 消息的接收者能够检验收到的消息是否是真实的方法。
报文认证要完成 消息源的认证 和 消息的认证。
报文认证术语:
报文摘要: 对报文m应用散列函数H, 得到固定长度的散列码。
![](https://img8.php1.cn/3cdc5/158d6/978/fb0e096d6889986b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
报文认证的方式:
2.1. 简单报文验证;
1. 发送方对报文m应用散列函数, 得到固定长度的散列码, 获得报文摘要h, 将扩展报文(m,h)发送给接收方;
![](https://img8.php1.cn/3cdc5/158d6/978/c988a40417096963.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
2. 接收方收到扩展报文后, 提取出报文m和报文摘要h, 同样对报文m应用散列函数H获得新的报文摘要H(m), 将H(m)和 h 比较;
![](https://img8.php1.cn/3cdc5/158d6/978/491d826bb9227def.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
3. 若相同, 报文认证成功,否则报文认证失败;
简单报文验证的不足: 无法达到对消息源认证。
2.2. 报文认证码MAC( Message Authentication Code);
1. 发送方和接收方共享一个认证密钥s, 发送方对报文m和认证密钥s应用散列函数H得到报文认证码h, 将扩展报文(m,h)发送给接收方;
![](https://img8.php1.cn/3cdc5/158d6/978/6b54bc72e2951550.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
2. 接收方收到扩展报文后, 提取出报文m和报文认证码h, 对报文m和认证密钥s应用散列函数H获得新的报文认证码H(m+s), 将H(m+s)与h比较;
![](https://img8.php1.cn/3cdc5/158d6/978/635d3d7d4eb3ffc6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
3. 若相等, 则报文认证成功,否则失败;
报文认证码MAC不足: 无法保证消息在接收方没有被篡改。
3. 数字签名
数字签名: 在公开密码体制中, 一个主体使用自己的私钥加密消息, 得到的密文。 密文可以使用该主体的公钥解密, 恢复成原来的消息。 如此生成的 "密文" 对该消息提供认证服务。
数字签名应满足:
1. 接收方能够确认发送方的签名, 但不能伪造;
2. 发送方发出签名的消息给接收方后, 就不能再否认他所签发的消息;
3. 接收方对已收到的签名消息不能否认, 有收报认证;
4. 第三者可以确认收发双方之间的消息传送, 但不能伪造这一过程;
数字签名的方式:
3.1. 简单数字签名;
1. Bob利用自己的私钥对报文m加密, 创建签名报文,将扩展报文(报文, 签名报文)发送给Alice;
![](https://img8.php1.cn/3cdc5/158d6/978/c9b0bb3d2850f3a0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
2. Alice收到扩展报文, 利用Bob的公钥解密签名报文, 并检验解密后的签名报文和报文m是否一致;
![](https://img8.php1.cn/3cdc5/158d6/978/ae5245e8ccb3b222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
3. 若一致, 则签名m的一定是Bob的私钥;
3.2. 签名报文摘要;
1. Bob对报文m应用散列函数H生成报文摘要H(m), 然后Bob通过其私钥对报文摘要进行加密生成加密的报文摘要, 将扩展报文(报文, 加密的报文摘要)发送给Alice;
![](https://img8.php1.cn/3cdc5/158d6/978/b718ee449cfc9b2c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
2. Alice收到报文m以及加密的报文摘要, Alice利用Bob的公钥解密加密的报文摘要, 并对m应用散列函数生成新的报文摘要;
![](https://img8.php1.cn/3cdc5/158d6/978/da88fee881c837ef.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDYyOTI0NA==,size_16,color_FFFFFF,t_70)
3. 如果两者一致, 则签名报文m的一定是Bob的私钥;