信安读书笔记08-消息认证_Hash函数_MD5

前言:

首先的明白消息认证是干什么用的,消息认证是为了验证接收到的消息是否被修改且是信任一防发送过来的。可以防止有人进行主动攻击修改数据内容,而接收方不知道的情况。

1、消息加密认证

其主要就是为了验证消息是否被被修改,那怎么验证呢?常用的方法是使用消息认证码(MAC)。将消息(msg)进行摘要处理得到结果MAC=CK1(msg)MAC=C_{K1}(msg)MAC=CK1​(msg)。然后和明文(M)拼接到一起,在加密函数 E 和秘钥 K2 进的作用下得到加密结果C=EK2(msg+mac)C=E_{K2}(msg+mac)C=EK2​(msg+mac),发送给对方。

对方收到密文 C 后,先使用解密函数 D 和秘钥 K1 进行解密得到明文MAC+M=DK2©MAC+M=D_{K2}©MAC+M=DK2​©,然后使用摘要算法函数和秘钥 K1 对明文 M 进行加密得到结果 MAC2=CK1(M)MAC2=C_{K1}(M)MAC2=CK1​(M),若MAC2=MAC MAC2=MACMAC2=MAC则说明消息正常,是受信任的一方发送来的,如果不相等就舍弃这个结果。

2、Hash 函数 =========

又称为散列函数,其强大之处在于能够把不定长的数据转成定长字符串,Hash函数单向函数,结果不可逆转。公式h=H(M)h=H(M)h=H(M),hash 值 h 一般是128位或者160位。

哈希函数主要配合数字签名里面做消息的摘要提取。

2.1 MD5

MD5现在最大的用处就在于检测文件有没有被修改,比如你想给别人发送一个压缩包,此时你可以生成该压缩包文件的 MD5 值,一并发送给对方。对方接受到文件后也生成 MD5 值,并与发过来的 MD5 做对比,一致则没问题。

import hashlib 

name = "我爱信息安全"
name_md5 = hashlib.md5(name.encode('utf8')).hexdigest()
print(f"原文:{name}\nMD5:{name_md5}")

# 原文:我爱信息安全
# MD5:f88750f47f532a82055d741060a993e2 

MD5应用例子:

MD5还可用于 CDN 内容防盗链问题,假设一个场景,你有一个做科普知识类的视频网站,其视频内容存放在某云上,最近发现有人盗用你的网站的视频链接,造成了很大的经济损失。那么接下来你会怎么补救?

常见的是防盗链方法有:Referer值、Cookie、IP、Header等,但是这些都可伪造,不是很安全。那么可以使用Token验证的方式,验证链接的有效性,具体做法如下:

例如,一个链接为:/test/p/java.image?token=0,秘钥为:secret,设secret=“java”

1.设置链接过期时间为60分钟,expire_time = now_time + 3600,格式是时间戳类型。expire_time=1620814643+3600=1620818243
2.计算MD5值,tok = MD5(url_path+expire_time+secret)。tok = MD5(“/test/p/java.image”+1620818243+“java”)=ef9a78bf0fa14e20304a5fce49342f3c
3.最终结果:tok = tok[中间6位]+expire_time,tok=e20304+1620818243=e203041620818243
4.最终的url为:/test/p/java.image?token=e203041620818243

用户请求这个 url 时,CDN 平台方会拿到过期时间1620818243,然后做相同的MD5计算,看是否与token的值相同,若相同可验证过期时间是否逾期。

总结

消息认证主要是为了验证消息的机密性,还是很重要的。

网络安全成长路线图

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成hei客大神,这个方向越往后,需要学习和掌握的东西就会越来越多,以下是学习网络安全需要走的方向:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值