09.消息认证码

目录

 

1.1 消息认证

1.2 消息认证码的使用步骤

1.3 Golang 对消息认证码的使用

1.4 消息认证码的问题


1.1 消息认证

消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。

1.2 消息认证码的使用步骤

  • 前提条件
  1. 在消息认证码生成的一方和校验的一方, 必须有一个秘钥
  2. 双方约定好使用同样的哈希函数对数据进行运算流程
  • 流程
    • 发送者
      1. 发送原始法消息
      2. 将原始消息生成消息认证码,((原始消息) + 秘钥) * 函数函数 = 散列值(消息认证码)
      3. 将消息认证码发送给对方
  • 接收者
    1. 接收原始数据
    2. 接收消息认证码
    3. 校验,( 接收的消息 + 秘钥 ) * 哈希函数 = 新的散列值 通过新的散列值和接收的散列值进行比较

1.3 Golang 对消息认证码的使用

有一个包: crypto/hmac

 

package main

import (
	"crypto/hmac"
	"crypto/sha1"
	"fmt"
)

func main () {
	src := []byte("在消息认证码中,需要发送者和接收者之间共享密钥,而这个密钥不能被主动攻击者Mallory获取。如果这个密钥落入Mallory手中,则Mallory也可以计算出MAC值,从而就能够自由地进行篡改和伪装攻击,这样一来消息认证码就无法发挥作用了。")
	key := []byte("helloworld")
	hamc1 := GenerateHamc(src, key)
	bl := VerifyHamc(src, key, hamc1)
	fmt.Printf("校验结果: %t\n", bl)
}

// 生成消息认证码
func GenerateHamc(plainText, key []byte)[]byte {
	// 1.创建哈希接口, 需要指定使用的哈希算法, 和秘钥
	myhash := hmac.New(sha1.New, key)
	// 2. 给哈希对象添加数据
	myhash.Write(plainText)
	// 3. 计算散列值
	hashText := myhash.Sum(nil)
	return hashText
}

// 验证消息认证码
func VerifyHamc(plainText, key, hashText []byte) bool {
	// 1.创建哈希接口, 需要指定使用的哈希算法, 和秘钥
	myhash := hmac.New(sha1.New, key)
	// 2. 给哈希对象添加数据
	myhash.Write(plainText)
	// 3. 计算散列值
	hamc1 := myhash.Sum(nil)
	// 4. 两个散列值比较
	return hmac.Equal(hashText, hamc1)
}

1.4 消息认证码的问题

  • 弊端  有秘钥分发困难的问题
  • 无法解决的问题    不能进行第三方证明  不能防止否认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值