密码学与网络安全 - 11 密码学Hash函数

11 密码学Hash函数

Hash函数输入长度可变,而输出长度固定

合格的Hash函数输出应该均匀分布,看起来随机

Hash函数两个要求:1. 抗碰撞性(找到两个不同的输入对应相同的输出在计算上不可行),2.单向性(通过Hash值找到输入值在计算上不可行)

Hash函数的操作过程:

  1. 把输入数据的长度填充成固定长度分组的整数倍,填充内容包括原始消息的位长度信息,填充长度信息能够增加攻击者更改数据而要保持hash值不变的难度

11.1 密码学Hash函数的应用

Hash函数用于各种安全应用和网络协议中

11.1.1 消息认证

用于检验消息的完整度,有两件事情要做:1.是确保数据正确,2是确保发送方的身份真实

并且当提供消息认证功能时,Hash值通常称为信息摘要

操作过程:发送者先将信息M(以后均用M代表信息)进行Hash,然后将【M+Hash】一起发送给B,B再做一次Hash运算将结果与Hash值比较,相同则没有篡改

注意:此种情况下必须保证Hash的安全传输,因为中间人攻击完全可以改完信息之后再算一个新的Hash值,接收者并不会发现

使用不同方法提供消息认证服务

  1. 使用对称密码一起加密M和Hash:认证功能+保密性
  2. 使用对称密码只加密Hash:认证功能
  3. 不使用加密算法,但是使用一个双方都知道的秘密值S和M一起计算Hash值:认证功能
  4. 在3的基础上再将整个消息和Hash一起加密:认证功能+保密性

人们不希望使用加密函数的理由

  1. 加密软件速度慢
  2. 加密硬件成本不容忽视
  3. 硬件的优化通常是针对大数据块
  4. 加密算法可能受专利保护,会增加成本

更一般的,消息认证通过使用消息认证码(MAC)实现,即带密钥的哈希函数。同3.不使用加密算法,此时的秘密值就是密钥

11.1.2 数字签名

签名我们讨论了使用椭圆曲线实现数字签名,现在通过Hash函数也可以实现数字签名

过程:

  1. 使用发送方的私钥,利用公钥算法对Hash进行加密:

    如:C = {PA,Hash + nA x PB} ,C为公钥密码后的密文,nA x PB = nA x G x nB = nB x nA x G = nB x PA, 由此可见,既保密了Hash同时也提供了签名

  2. 如果希望保密整个信息,则发送方可以先使用私钥对Hash进行加密,再使用对称密码加密消息和公钥算法结果,这是比较常用的做法

11.1.3 其他应用

用于产生单口令文件:即操作系统只保留口令的Hash值在口令文件中,如果黑客只是获得了哈希值那也是无济于事

用于入侵检测和病毒检测:存储文件的哈希值在安全系统中,通过重新计算Hash值判断文件是否被修改过

密码学Hash函数也能够用于构建随机函数PRF或作伪随机数发生器

11.2 两个简但的Hash函数

Hash函数的原理:任何输入(文件或消息等)都可以视为一个n位分组的序列,其输出时n位的Hash。Hash函数每次处理一个分组直到处理完所有的输入分组

  1. 最简单的就是将每个分组相应位异或
  2. 处理完一个分组后,将Hash值平移一位或者循环移位一次

哈希函数的过程还需再研究‼️

11.3 需求和安全性

一个合格的哈希函数就是要确保防碰撞性

11.3.1 密码学Hash函数的安全性需求

  1. 输入可变
  2. 输出固定
  3. 给定x,计算H(x) 相对容易
  4. 抗原向攻击(单向性)
  5. 抗第二原像攻击:即x!=y,H(x) != H(y)
  6. 抗碰撞攻击:H(x) = H(y),求(x,y)在计算上不可行

11.3.2 穷举攻击

原像攻击和第二原像攻击

碰撞攻击

现在认为160的输出也比较弱

11.3.3 密码分析

典型的Hash函数是迭代结构,在函数中重复使用压缩函数f(输入:前一步中得出的n位结果和一个b位的分组,输出一个n位分组)

11.4 基于分组密码链接的Hash函数

Hash码只要较短,如不超过64位,就很脆弱

11.5 安全Hash算法

近年来使用最广泛的Hash算法是SHA

SHA-1 :160位,其他的是SHA-256,SHA-384,SHA-512

11.5.1 SHA-512逻辑

算法输入不超过2^128位,输出为512位消息摘要,分组1024位,迭代过程类似经典Hash函数

11.5.2 SHA-512轮函数

SHA-51算法特性:

  1. Hash码的每一位都是全部输入位的函数,基本函数F多次复杂重复运算使得结果充分混淆,从而使得随机选择两个消息,甚至于这两个消息又相似特征,都不太可能产生相似的Hash码

11.6 SHA-3

11.6.1 海绵结构

海绵结构是一种简单的迭代结构,基于固定长度的转换或对固定长度b位进行操作的置换f构造出来的整体函数F能够处理可变长度的输入,得到任意长度的输出

海绵函数由三组参数定义:

  1. f = 内部函数,用于处理每轮的输入分组

    输入位是1600位的状态变量s,s由与消息分组长度相等的r位和容量c位链接组成

  2. r = 输入分组位长度,称其为位速率

  3. pad = 填充算法

猜你喜欢

转载自blog.csdn.net/weixin_51487151/article/details/124747908