《图解密码技术》笔记7:单向散列函数-获取消息的“指纹”

目录

7.1 本章学习的内容

7.2 什么是单向散列函数

7.2.1 这个文件是不是真的呢

7.2.2 什么是单向散列函数

7.2.3 单向散列函数的性质

7.2.4 关于术语

7.3 单向散列函数的实际应用

7.3.1 检测软件是否被篡改

7.3.2 基于口令的加密

7.3.3 消息认证码

7.3.4 数字签名

7.3.5 伪随机数生成器

7.3.6 一次性口令

7.4 单向散列函数的具体例子

7.4.1 MD4、MD5

7.4.2 SHA-1、SHA-256、SHA-384、SHA-512

7.4.3 RIPEMD-160

7.4.4 AHS(Advanced Hash Standard)与SHA-3

7.5 单向散列函数SHA-1

7.5.1 整体流程

7.5.2 (1) SHA-1:填充

7.5.3 (2) SHA-1:计算W0~W79

7.5.4 (3) SHA-1:分组处理

7.5.5 (4) SHA-1:单步处理

7.6 对单向散列函数的攻击

7.6.1 暴力破解(攻击故事1)

7.6.2 生日攻击(攻击故事2)

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


单向散列函数是用来确保完整性的。

7.1 本章学习的内容

        单项散列函数的介绍;

        SHA-1、SHA-2、SHA-3;

7.2 什么是单向散列函数      

7.2.2 什么是单向散列函数

        单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值,这里的消息可以是字符串,也可以是图像文件、声音文件等等。

        散列值的长度和消息的长度无关,单向散列函数总是会计算出固定长度的散列值。比如 SHA-1 单向散列函数,它计算出的散列值的长度永远是160比特(20字节)。

       单向散列函数必须确保要找到和该消息具有相同散列值的另外一条消息是非常困难的,这一性质称为弱碰撞性。

7.2.3 单向散列函数的性质

  • 根据任意长度的消息计算出固定长度的散列值。
  • 能够快速计算出散列值。
  • 消息不同,散列值也不同。抗碰撞性
  • 具备单向性。(one-way)

7.2.4 关于术语

        单向散列函数,也称为消息摘要函数、哈希函数或者杂凑函数。

7.3 单向散列函数的实际应用

7.3.1 检测软件是否被篡改

        在镜像网站发布软件,将计算的散列值和原始网站的散列值进行对比。

7.3.2 基于口令的加密

        PBE:将口令和盐(salt,通过伪随机数生成器产生的随机数)混合后计算其散列值。

7.3.3 消息认证码

        将“发送者和接收者之间的共享密钥”和“消息”进行混合后计算出的散列值。在SSL/TLS中得到应用,将在14章详细介绍。

7.3.4 数字签名

        第9章详细介绍。

7.3.5 伪随机数生成器

        可使用单向散列函数构造伪随机数生成器。详见第12章。

7.3.6 一次性口令

        可以使用单向散列函数构造一次性口令。

7.4 单向散列函数的具体例子

  • MD4,MD5
  • SHA-1,SHA-256,SHA-384,SHA-512(SHA-256,SHA-384,SHA-512统称为SHA-2)
  • RIPEMD-160
  • AHS与SHA-3

7.4.1 MD4、MD5

        MD4、MD5的输出散列值都是128比特,MD是Message Digest的缩写。

7.4.2 SHA-1、SHA-256、SHA-384、SHA-512

        SHA-2有6个版本,都是由SHA-256\SHA-512这两个版本衍生出来的。

        注意,SHA-224和SHA-256在实现上采用32x8比特的内部状态,更适合32位的CPU

散列函数名称输出长度(bit)内部状态长度备注
SHA-1/160
SHA-2SHA-22422432x8 = 256将SHA-256的结果截掉32比特。
SHA-25625632x8 = 256
SHA-512/22422464x8 = 512将SHA-512的结果截掉288比特
SHA-51225664x8 = 512将SHA-512的结果截掉256比特
SHA-38438464x8 = 512将SHA-512的结果截掉128比特
SHA-51251264x8 = 512

7.4.3 RIPEMD-160

        RIPEMD的强抗碰撞性已于2004年被攻破,但是RIPEMD-160还尚未被攻破。比特币中使用的就是RIPEMD-169(15.3节)。

       

7.5 单向散列函数SHA-3

        SHA-3(Keccak算法)

7.6 Keccak算法

        暂时跳过,有兴趣的请移步——>详解常用哈希函数(Keccak算法)

7.7 应该使用哪种单向散列函数

        MD5:不安全,不应该使用

        SHA-1:不应该用于新的用途

        SHA-2:可以使用

        SHA-3:可以使用

7.8 对单向散列函数的攻击

  • 暴力破解
  • 生日攻击

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

        能够识别出“篡改”,无法辨别出“伪装”。

        需要认证:消息认证码、数字签名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来为您图解一下Linux DMA拷贝数据到用户态的零拷贝(Zero-Copy)技术。 首先,我们需要了解什么是DMA(Direct Memory Access,直接内存访问)技术。DMA是一种数据传输技术,它允许外设直接访问系统内存,而无需CPU的干预,从而提高数据传输效率。 在Linux中,当我们需要将数据从内核态传输到用户态时,通常情况下需要经过两次数据拷贝。第一次是将数据从设备驱动程序复制到内核缓冲区,第二次是将数据从内核缓冲区复制到用户空间缓冲区。这两次数据拷贝会消耗大量CPU资源,影响系统性能。 为了解决这个问题,Linux内核引入了零拷贝技术。零拷贝技术是指数据传输时,数据不需要经过CPU的拷贝,而是直接从内核空间传输到用户空间。这样可以减少CPU的负担,提高系统性能。 下面是零拷贝技术的流程图: ![DMA零拷贝技术流程图](https://img-blog.csdn.net/20180908100849451?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhY2tpbmcyMDE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/50) 1. 应用程序发起读取请求。 2. 系统调用将请求传递给驱动程序。 3. 驱动程序将请求转换为DMA请求,并向DMA控制器发出请求。 4. DMA控制器将数据从设备读入内核缓冲区中。 5. DMA控制器将数据从内核缓冲区中直接传输到用户空间缓冲区,无需经过CPU。 6. DMA控制器传输完成后,向驱动程序发送通知。 7. 驱动程序将传输完成的数据返回给应用程序。 通过零拷贝技术,可以减少CPU的拷贝次数,提高数据传输效率,从而提高系统性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值