【0429】散列函数和消息鉴别

散列函数和消息鉴别

鉴别服务是用来提供对通信中实体和数据原发(数据源)的鉴别。鉴别服务是能使通信双方证实对方身份或数据来源。

散列函数的概念

也称为杂凑函数,哈希函数(Hash函数)

Hash函数H将可变长度的数据块M作为输入,产生固定长度的Hash值h=H(M)。

如果满足x!=y且H(x)=H(y),则称为碰撞(冲突)

注意:不存在密钥

基本性质

(1)输入长度可变;

(2)输出长度固定;

(3)H(x)易于计算

(4)具有弱抗碰撞性(Weak collision resistance)。 也称弱抗冲突性:对任何给定的消息 m,寻找与 m 不同的消息 m’,使得它们的散列值相同,即 h(m’)=h (m),在计算上不可行。 也成为抗第二原像攻击。

(5)具有强抗碰撞性(Strong collision resistance) 。也称强抗冲突性:寻找任意两个不同的消息 m 和 m’, 使得 h(m)=h (m’) 在计算上不可行。

(6)具有单向性

主要特性

(1)输出依赖输入

(2)单向加密

主要应用

(1)保证数据的完整性

为保证安全性可以对H(M)加密或者签名

(2)单向数据加密

应用于诸如用户口令加密等场合。可避免以明文的形式保存用户口令。

(3)数字签名

构造和设计

Hash算法安全的评定:

(1)抗碰撞性强不强,能不能抵抗第二原像攻击

设计方法:

CBC模式的Hash函数(在密钥k公开的密码体制上,Hash不能抵抗第二原像攻击,抗碰撞性不强;分组密码体制的Hash计算代价高,而且很多被证明是不安全的)

直接构造设计散列函数目前比较流行,例如:MD算法

单向散列函数SHA

SHA-256位,SHA-384,SHA-512

SHA-1

输入长度小于2^64bits的消息,散列码160bits

输入:最大程度为2^64-1位的消息;

输出:160位消息摘要

处理:(1)以 512 位的数据块(或称分组)为处理单位来处理消息的。当消息长度大于 512 位时,需要对消息进行分割与填充。 -------有64位用来标识长度,448位数据用来处理

组成结构:数据结构+填充部分(包括长度),数据部分和填充部分用1来分割,512=16x32,32bit为字长度

(2)初始化缓冲区

(3)处理第 i 个数据块 xi

SHA-1 算法的核心包含 4 个循环模块,每个循环模块由 20个处理步骤组成,共包含80个处理步骤。

W0 ~ W15:直接取自当前数据块 xi的 16 个字的值,即 Wt=Mt(i) ;0 ≤ t ≤ 15
W16 ~ W79:按下面公式导出(共 64 个)

Wt=(Wt-16 [XOR] Wt-14 [XOR] Wt-8 [XOR] Wt-3 )<<1

也就是说,在前 16 步处理中,Wt的值等于当前数据块 xi中对应字的值,而对余下的 64 步,其值由 4 个前面的 Wt值异或后,再循环左移 1 位得出。

SHA与MD5非常相似

(1)消息分割与填充

(2)初始化缓冲区

(3)处理第 i 个数据块 xi

(4)4 轮循环,80 步操作完成后,保存散列中间结果,再与第一轮的输入相加(模 232)

(5) 然后,以 H0(i) ,H1(i) ,H2(i) ,H3(i) ,H4(i)作为寄存器初值,用于对分组 xi+1进行散列处理。

基本操作和元素

(1) 逐位逻辑运算:

(2) 加法运算:

(3) 移位操作:

其他SHA算法

SHA-1,SHA-256【输入位数2^256 bits】,SHA-384,SHA-512 这些散列函数的主要差别在于填充方法、字长、初始常数、基本函数等部分,它们的基本运算结构大体是相同的。

对单向散列函数的攻击

攻击者寻找一对产生碰撞消息的过程。

(1)强力攻击(或穷举攻击):典型方法如生日攻击,穷举输入

与散列函数相关的类似问题可表述如下:给定一个散列函数 h 的输出长度为 m 位,共有 2^m个可能的散列值出,如果让散列函数 h 接收 k 个随机输入产生集合 X,再使用另外 k 个随机输入产生集合 Y,问 k 必须为多大才能使两个集合产生相同散列值输出的概率大于 0.5?
这时,n =2^m,由式(5.3)有 k≈ √(2^m) =2^(m/2)
这种寻找散列函数 h 的具有相同输出的两个任意输入的攻击方式称为生日攻击。

(2)密码分析法:利用单向散列函数的弱性质(结构和代数性质)

SM3

主要用于数字签名及验证、消息认证码生成及验证,随机数生成等,安全性和SHA-256相当。

报文鉴别

主要目标:

(1)报文是由确认的发送方产生的;

(2)报文内容没有被篡改过,包括报文是按与发送时的相同顺序收到的。

如何实现报文鉴别?

鉴别符:附加在报文上的额外信息。当报文必须经过鉴别才能被接受时,鉴别符可使接收端验证该报文。

产生鉴别符的方法:报文加密,散列函数或报文鉴别码

消息鉴别码(MAC,Message Authentication Code)或报文鉴别码,是用于提供数据原发鉴别和数据完整性的密码校验值。

报文加密:报文用对称密钥算法加密后的密文作为鉴别符

特点:要求接收端有判别明文合法性的手段和措施。

措施:让明文带有某种容易识别而又不易被篡改的结构

差错控制:

内部差错控制:对明文来计算校验码,再进行加密。——这种加密方法更好!外部差错可以伪造报文!

外部差错控制:对明文加密之后再计算校验码。

基于报文鉴别码MAC的消息鉴别

1.受密钥保护的报文摘要称为报文鉴别码(MAC),也称消息鉴别码。即:MAC=Ck(M)

其中M是明文,Ck(.)是带有密钥的函数

2.一般需求:前提:攻击者能获得M||Ck(M),攻击者已知MAC函数C,但不知道K

(1)攻击者根据M||Ck(M),生成一个报文M‘!=M,使得Ck(M’)=Ck(M),在计算上不可行

(2)Ck(M)应均匀分布,Ck(M’)=Ck(M)可能性为2**(-n)

(3)若M’是M的某个变换,Ck(M’)=Ck(M)可能性为2**(-n)

基本应用方式

(1)对明文来计算校验码,再对明文和校验码进行加密(对称加密)。【提供机密性】

(2)对明文计算校验码,检验码加密(对称加密)。【不提供机密性】

(3)对明文计算校验码,检验码加密(私钥加密)。【消息鉴别和数字签名】

(4)对明文计算校验码,检验码加密(私钥加密),再用对称加密明文和检验码。【消息鉴别和数字签名,机密性】

(5)明文后面加入秘密信息,再计算校验码【密码信息不传送所以无法伪造】

(6)明文后面加入秘密信息,再计算校验码,最后加密(对称加密)【消息鉴别,机密性保护】

基于散列函数的消息鉴别

散列函数不使用密钥,故不能直接用于消息鉴别。

仅使用散列函数不能有效保护信息的完整性。

解决办法:综合使用加密算法、数字签名,或采用带秘密信息的散列函数

HMAC

由HMAC的结构可以发现,其安全性依赖于所嵌入散列函数的安全性

实现速度和散列函数差不多,使用了密钥

安全性:表现为伪造成功的概率有多大,其中还包括所花费的时间,所需的由相同密钥产生报文/MAC对的数量。

由于在攻击HMAC时,攻击者不知道密钥K,无法以离线方式有效的产生报文/鉴别码对,此时不能像散列函数的生日攻击那样从有效的报文/鉴别码对中寻找冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值