密码学基础:完整性、源认证、数字签名详解 单向散列函数

单向散列函数

单向散列函数出现的原因?

1.如图,客户如何确保文件是没有被修改过的?
在这里插入图片描述

2.可能有人想到了一个解决方案,保存之后,再拷贝一份,是可以解决这个问题的,如图所示:每次将文件做一次拷贝,然后进行比对
在这里插入图片描述
4.如果面向的文件对象为1T的数据或1万字的电子书时,拷贝对比的方法是否可行?
那么又会引发另一个问题:
如果原文件为100G,那么就需要保存100G的副本,这个方案这样看来是不可行的

在这里插入图片描述

5.若文件的本体拷贝对比方式不可行,能否获取文件的指纹呢?
通过文件的指纹来对比,是否就可以识别文件是否曾被篡改

如图所示:抓到凶手后的获取指纹与从数据库中提取到的嫌疑犯的指纹做比对,证明是否是一个人
散列值就相当于文件指纹
在这里插入图片描述
6.获取文件指纹的技术,便是‘单向散列函数’出现的原因

什么是单向散列函数

1.单向散列函数,有一个输入和输出:
1)输入称为消息
2)输出称为“散列值”
2.依据消息的内容来计算出散列值,再利用散列值来验证‘数据完整性’

比对流程:对重要文件做散列值计算,对比两边文件的散列值是否一样,一样,则证书文件完整;不一样,则证明文件呗修改了。
在这里插入图片描述

单向散列函数的特点

  • 1.依据任意长度的消息计算出固定长度的散列值【计算的文件大小不关心,不管文件多大,计算出来的指纹大小即散列值大小是固定的】
  • 2.能够快速计算出散列值【几毫秒的时间计算】
  • 3.消息不同散列值也不同【具有唯一性,与人体指纹一样】
  • 4.具备单向性【不能通过散列值推断出文件内容】

单向散列函数算法

单向散列函数算法:MD4和MD5

1.MD4由Riverst于1990年设计,能够产生128比特的散列值
2.MD5由Riverst于1991年设计,能够产生128比特的散列值
3.由于MD4和MD5的冲突避免特性被突破,这两种算法仅用于理论学习

MD4和MD5弃用的原因:

  • 碰撞攻击:MD4 和 MD5 已经被发现存在碰撞攻击的漏洞。碰撞攻击是指能够生成两个不同的输入数据(即消息),但它们的散列值(即摘要)相同。这意味着攻击者可以伪造出具有相同摘要值但内容不同的消息,从而绕过验证。
  • 预图攻击:MD5 已经被证明容易受到预图攻击的影响。预图攻击是指攻击者能够通过分析已知的输入和对应的散列值,来推测出其他消息的摘要值,从而破坏了散列函数的安全性。
  • 计算速度过快:由于 MD4 和 MD5 的设计特点,它们的计算速度过快,使得攻击者可以更容易地进行暴力破解和字典攻击,从而降低了它们的安全性。

单向散列函数算法:SHA

1.安全散列算法,由美国国家标准技术研究所开发
2.SHA家族有四大成员,包括

  1. SHA-0
    1993年发布,但在发布后很快就被NSA撤回
  2. SHA-1
    1995年发布,160bit固定输出,2005年被破解
  3. SHA-2
    SHA-224,固定输出散列值224比特 【不管文件多大,得到224比特的指纹】
    SHA-256,固定输出散列值256比特 【不管文件多大,得到256比特的指纹】
    SHA-384,固定输出散列值384比特 【不管文件多大,得到384比特的指纹】
    SHA-512,固定输出散列值512比特【不管文件多大,得到512比特的指纹】
    推荐使用SHA-2,更为安全
    4)SHA-3
    SHA-3(Secure Hash Algorithm 3,安全哈希算法3)是美国国家标准与技术研究所(NIST)于2015年正式发布的一种密码哈希函数标准。它是 SHA-2 系列的后续标准,旨在提供一个替代品,以应对 SHA-2 受到的一些攻击。
    SHA-3 被设计为一种密码学安全的哈希算法,能够抵抗广泛的密码分析攻击,包括碰撞攻击、预图攻击等。

单向散列函数的实际应用

1.如图,文件可通过SHA工具计算散列值进行比较
2.不一样的散列值,说明文件被移动或修改过

md5sum计算文件比对

在这里插入图片描述
在这里插入图片描述

如上所示,通过两个例子来证明,当文件修改后,两个文件的md5值是不一样的

sha256sum计算文件比对

在这里插入图片描述

单向散列函数的实际应用

1.md5sum,通过MD5或者sha256sum计算文件散列值
2.只需要稍微修改文件,散列值就会发生改变

单向散列函数无法解决的问题

1.如图,当出现图示情况时,再去执行完整性校验还有意义吗?

即如果数据包一开始就是假的,那么做完整性校验也无用

在这里插入图片描述

消息认证码

什么是消息认证码?

  • 1.一种确认“完整性’并进行‘认证’的技术
  • 2.输入任意长度的消息和共享的密钥,输出固定长度的‘MAC”值

在这里插入图片描述

消息认证码的使用流程

1.发送者A与B事先共享密钥
2.发送者A依据汇款信息加入密钥计算MAC值
3.发送者A将汇款信息和MAC值发送给B
4.接收者B依据汇款信息加入密钥计算MAC值
5.接收者B将两个MAC值进行对比
6.如果一致,认证成功 如果不一致,认证失败

在这里插入图片描述

  • 事先共享密钥。提前两端配置密钥【通过sha计算】
    发送A:
  • 共享密钥+汇款信息(明文信息)= MAC值

接收者B:

  • 共享密钥+汇款信息(明文信息) = MAC值
  • 接收到的MAC值与计算出来的做比对

完整性校验和认证校验

消息认证码使用的实例

1.HMAC
2.一种使用单向散列函数来构造消息认证码的方法
3.任何高强度的单向散列函数都可以被用于HMAC,常用的例如

  1. HMAC-SHA-224
    2)HMAC-SHA-256
    3)HMAC-SHA-384
  2. HMAC-SHA-512

公钥与数字签名的关系

1.用私钥加密的消息称为签名,只有拥有私钥的用户可以生成签名(代表本人)
2.用公钥解密签名这一步称为验证签名,所有用户都可以验证签名
3.数字签名是公钥密码的逆应用
·

在这里插入图片描述

数字签名和单向函数的结合应用

1.A用单向散列函数计算消息的散列值
2.A用自己的私钥加密散列值,得到签名
3.A将消息签名发送给B
4.B用A的公钥对收到的签名进行解密
5.B用解密后的散列值发送的散列值对比

  • 一致,签名验证成功
  • 不一致,签名验证失败
    在这里插入图片描述

架构总结

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值