229-加密之消息认证码MAC和HMAC






加密之消息认证码MAC和HMAC





消息认证码


什么是消息认证码???
我们来举个例子
我们假设现在有两家银行 银行A和银行B

如果现在银行A给银行B发送了一条请求 张三给李四汇款1000元
银行B接收到这个请求就会执行 张三给李四汇款1000元
如果现在有一个黑客伪装成银行A 也发送了这样的请求
那么银行B就必须要验证这条消息是不是银行A发送的
所以就要用到消息认证码

那么银行B第一要认证这条消息是不是银行A发送的
第二要验证这条消息有没有被篡改过

所以我们需要关注的是
消息的
1.完整性	消息没有被篡改
2.认证		消息来自正确的发送者





消息认证码
Message Authentication Code
MAC
是一种确认完整性并进行验证的技术
消息认证码的输入包括任意长度的消息
和一个 发送者和接收者 之间的 共享的密钥
消息认证码会输出一个固定长度的数据
这个数据被称为MAC值

根据任意长度的消息输出固定长度的MAC值
这个特点和单向散列函数很类似
但是呢
单向散列函数中计算散列值的时候
不需要密钥
而消息认证码中需要用到
发送者和接收者之间的  密钥

要计算MAC值,必须持有共享密钥
没有密钥的话就不能计算MAC值
消息认证码就是利用这个性质来完成认证的
另外
和单向散列函数的散列值一样
哪怕消息中发生1个bit的变化
MAC值也会发生变化





我们来看一下银行A和银行B的认证的流程

1. 发送者Alice与接收者Bob事先共享密钥。
2. 发送者Alice根据汇款请求消息计算MAC值(使?共享密钥)。
3. 发送者Alice将汇款请求消息和MAC值两者发送给接收者Bob。
4. 接收者Bob根据接收到的汇款请求消息计算MAC值(使?共享密钥)。
5. 接收者Bob将??计算的MAC值与从Alice处收到的MAC值进?对?。
6. 如果两个MAC值?致,则接收者Bob就可以断定汇款请求的确来?Alice(认证成功);如果
不?致,则可以断定消息不是来?Alice(认证失败)。









然后我们来说一下HMAC
H就是Hash的意思
所以HMAC就是
利用单向散列函数来构造消息认证码的方法

HMAC使用的单向散列函数不仅限于一种
任何高强度的单向散列函数都可以被用于HMAC
比如
使用SHA-1,MD5,RIPEMD-160所构造出来的HMAC
就分别是
HMAC-SHA-1,,HMAC-MD5,,HMAC-RIPEMD






然后我们来说一下
通过单向散列函数来构造消息认证码的流程
(1) 在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)
(2) 将上一步生成的B字长的字符串与ipad做异或运算。
(3) 将数据流text填充至第二步的结果字符串中。
(4) 用H作用于第三步生成的数据流。
(5) 将第一步生成的B字长字符串与opad做异或运算。
(6) 再将第四步的结果填充进第五步的结果中。
(7) 用H作用于第六步生成的数据流,输出最终结果







 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页