密码学:三.消息认证码MAC

在信息的传输中我们不但要保证信息加密还要保证信息的:完整性,正式性,不可抵赖性。

消息摘要(MD)

消息摘要函数时一种用于判断数据完整性的算法,也称为散列函数或哈希函数,函数的返回值就散列值,散列值又称为消息摘要或者指纹。
常见算法:MD5 SHA

消息认证码(Message Authentication Code,简称MAC)

在消息摘要的基础上加了秘钥,消息验证码一般和对称加密配合使用。

  1. 发送方和接收方事先共享同一个密钥。
  2. 发送方将发送消息和密钥进行MAC运算,得到MAC值,并把MAC值与消息一同发送给接收方。
  3. 接收方接收到消息后,将消息部分与事先共享的密钥进行MAC运算,得到MAC值,将MAC值与发送方发送的MAC值进行比较,如果一致,证明消息的真实性和完整性

代码实践

golang

func getSign(data map[string]string, key string) string {
	keys := make([]string, 0)
	for k, _ := range data {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _,v := range keys{
		key += v + data[v]
	}

	h := md5.New()
	h.Write([]byte(key))
	return hex.EncodeToString(h.Sum(nil))
}

接收方虽然可以确定消息的完整性和真实性,解决篡改和伪造消息的问题,但不能防止A否认发送过消息。A给B发送了消息,B接收到之后,A否认自己发送过消息给B,并抵赖说,“虽然我和B都能计算处正确的MAC值,但是可能是B的密钥被攻击者盗取了,攻击者给B发的消息。”

MD(消息摘要)、MAC(消息认证码)、数字签名的区别:

目标\方法 MD MAC 数字签名
完整性
真实性
防抵赖
数字签名一般和非对称加密配合使用,后续归纳总结。
posted @ 2020-12-05 21:52  EthanWell  阅读(585)  评论(0编辑  收藏  举报