文章目录

  • 一、Hash函数概述
  • 1.1、什么是Hash函数?
  • 1.2、Hash函数分类
  • 1.3、Hash函数应满足的条件(重点):
  • 1.4、对称MAC的一种Hash函数的一般结构
  • 二、MD5(Message Digest,消息摘要)
  • 2.1、特点:
  • 2.2、产生散列值的过程
  • 三、SHA1(Security Hash Algorithm,安全Hash算法)
  • 3.1、参数信息及MD5比较(重点)
  • 3.2、产生报文摘要的过程
  • 四、MAC
  • 4.1、**消息认证码(MAC)是如何实现消息认证的?**
  • 4.2、常见的三种MAC构造方式


一、Hash函数概述

1.1、什么是Hash函数?

Hash函数(也称散列函数)是一个将 任意长度的消息x序列映射为较短的、 固定长度的一个值y的函数。

1.2、Hash函数分类

  • 带密钥的Hash函数:可将y和消息x一起在不安全的信道中传输
  • 不带密钥的Hash函数:y必须安全存放,确保y不被篡改

1.3、Hash函数应满足的条件(重点):

  • 从实用的角度:
  • 已知x,求H(x)较为容易, 并可用硬件或软件快速实现
  • 输入的消息可以任意长;输出的“指纹”固定长
  • 从安全的角度**(重点)**:
  • 原像问题:给定H(x),恢复x在计算上是不可行的;
  • 第二原像问题:给定 (x, H(x)),找到一个x1(x != x1
    ),使得H(x1) = H(x) 在计算上不可行
  • 碰撞问题:找到两个有意义的消息x1和x2,使得H(x1)=H(x2)几乎是不可能的。

1.4、对称MAC的一种Hash函数的一般结构

lua 哈系函数成整数_迭代

二、MD5(Message Digest,消息摘要)

MD5是由密码学家 Rivest在1992年公布的单向散列函数

2.1、特点:

  • MD5采用了Merkle提出的迭代模型;
  • 输入消息可以任意长;
  • 每一次迭代处理512bit的消息分组;
  • 最终输出散列值为128bit

2.2、产生散列值的过程

lua 哈系函数成整数_迭代_02


lua 哈系函数成整数_lua 哈系函数成整数_03

三、SHA1(Security Hash Algorithm,安全Hash算法)

3.1、参数信息及MD5比较(重点)

SHA-1

MD5

最大消息长度

< 2^64

不限

消息分组长度

512

512

结构

MerKle迭代

MerKle迭代

链接变量长度

160

128

散列值长度

160

128

3.2、产生报文摘要的过程

lua 哈系函数成整数_哈希算法_04

四、MAC

  • 消息认证码(MAC):一种确认完整性并进行认证的技术
  • MAC是一种带密钥的函数h = MAC k(X)
  • 两个输入:消息x和共享密钥K
  • 输出:固定长度的数组,称之为MAC值或认证码

4.1、消息认证码(MAC)是如何实现消息认证的?

lua 哈系函数成整数_迭代_05

4.2、常见的三种MAC构造方式

  • 基于分组密码的MAC
  • CBC-MAC : 认证码的长度 = 分组密码的密文长度
  • 基于序列的MAC
  • ZUC算法:密钥长度可选128,256 (两个算法只在密钥加载 方式及常数设置上有一些的差别)
  • 基于密码hash函数的MAC——HMAC
  • HMAC-MD5
  • HMAC-SHA-1