目录
消息认证机制
- 为什么需要消息认证?
消息认证是一个过程,用以验证消息的认证性、完整性、顺序性、时间性。 - 什么情况下需要消息认证?
- 抗被动攻击:加密
- 抗主动攻击:消息认证
- 对称密码可以消息认证的机密性、认证性、完整性。对称加密显然实现的机密性;通信双方有加密密钥解密密钥相同,只有通信双方有共同密钥k,从而实现了消息认证的认证性;若敌手对密文修改,接收方会解密时会出现不符合语义的消息,从而发现消息被修改过,实现了消息认证的完整性。
- 公钥密码不可以实现消息认证,敌手根据接收方公钥直接加密符合语义的消息,接收方解密后可以实现完整性,但不能实现消息的认证性。
- 什么是认证符?
消息认证机制需要产生认证消息的数值,即认证符。
认证符产生方法:MAC,Hash
消息认证码
- 消息认证码: 指消息被一密钥控制的公开函数作用后产生的、用作认证符的、固定长度的数值, 或称为密码校验和。此时需要通信双方A和B共享一密钥K。MAC=CK(M)
k —— 通信双方共享的密钥
m —— 输入的消息(长度不固定)
C —— MAC函数
MAC —— 消息认证码(固定长度) - 消息认证码可认为是带密钥的Hash函数
可以认证以下内容:
接收者可以判断消息是否被篡改。
HASH函数也可
接收者可以判断消息发送者的真假。
HASH函数不可 - MAC函数与加密算法类似,不同之处为MAC函数不必是可逆的,因此与加密算法相比更不易被攻破。加密是双向的,需要使用密钥;Hash是单向的,不需要反向hash值。
- MAC要求
- 已知输入消息m和CK(m),找到另一满足CK(m’)=CK(m)的消息m’在计算上不可行。
- CK(m)应均匀分布,即随机选取两个消息m和m’,CK(m’)=CK(m)的概率是2-n。
- 若m’是m的某个变换,即m’=f(m),CK(m’)=CK(m)的概率是2-n。
- MAC的基本使用方式
数据认证算法
- 数据认证算法:最为广泛使用的消息认证码中的一个。
- 算法基于CBC模式的DES算法,其初始向量取为零向量。需被认证的数据被分为64比特长的分组D1,D2,…,DN,其中最后一个分组不够64比特的话,可在其右边填充一些0,然后按以下过程计算数据认证码:
杂凑函数
- 杂凑函数H是一公开函数:用于将任意长的消息M映射为较短的、固定长度的一个值H(M)。作为认证符。
称函数值H(M)为杂凑值、杂凑码、消息摘要,hash值、散列值。 - 杂凑码是消息中所有比特的函数,因此提供了一种错误检测能力,即改变消息中任何一个比特或几个比特都会使杂凑码发生改变。
- 杂凑函数的目的是为需认证的数据产生一个“指纹”。为了能够实现对数据的认证,杂凑函数应满足以下条件:
① 函数的输入可以是任意长。
② 函数的输出是固定长。
③ 已知x,求H(x)较为容易,可用硬件或软件实现。
④ 已知h,求使得H(x)=h的x在计算上是不可行的,这一性质称为函数的单向性,称H(x)为单向杂凑函数。
⑤ 已知x,找出y(y≠x)使得H(y)=H(x)在计算上是不可行的。
如果单向杂凑函数满足这一性质,则称其为弱单向杂凑函数。
⑥ 找出任意两个不同的输入x、y,使得H(y)=H(x)在计算上是不可行的。强单向杂凑函数。
生日攻击
- 第一类生日攻击
已知一杂凑函数H有n个可能的输出,H(x)是一个特定的输出,如果对H随机取k个输入,则至少有一个输入y使得H(y)=H(x)的概率为0.5时,k有多大?
以后为叙述方便,称对杂凑函数H寻找上述y的攻击为第Ⅰ类生日攻击。
因为H有n个可能的输出,所以输入y产生的输出H(y)等于特定输出H(x)的概率是1/n,反过来说H(y)≠H(x)的概率是1-1/n。y取k个随机值而函数的k个输出中没有一个等于H(x),其概率等于每个输出都不等于H(x)的概率之积,为[1-1/n]k,所以y取k个随机值得到函数的k个输出中至少有一个等于H(x)的概率为1-[1-1/n]k。
由(1+x)k≈1+kx,其中|x|<<1,可得
1-[1-1/n]k≈1-[1-k/n]=k/n
若使上述概率等于0.5,则k=n/2。特别地,如果H的输出为m比特长,即可能的输出个数n=2m,则k=2m-1。 - 第一类生日攻击方法
t比特长度的消息摘要
消息摘要输出有2t个可能
采用穷举搜索法,攻击者要尝试的消息数k,找到一个特定的m’,使h(m’)=h(m) 。 - 第二类生日攻击–生日悖论
生日悖论是考虑这样一个问题:在k个人中至少有两个人的生日相同的概率大于0.5,k至少多大?
k>=nm/2 - 第二类生日攻击方法
- 假设Hash函数的摘要值为t个比特。
- 攻击者首先产生一真一假两条消息。
- 将真消息通过变形(如增加空格)表示成一组 2t/2个不同的变形消息,产生一份合法的消息组。
- 也将假消息通过变形表示成一组2t/2个不同的变形消息,生成一组非法的消息组。
- 分别计算以上两组合法、非法消息组的消息摘要值,找出具有相同摘要值的一对合法、非法消息对,其成功概率大于1/2。
迭代型杂凑函数的一般结构
Hash家族
MD5
输入:任意长的消息(图中为K比特)
分组:512比特
输出:128比特的消息摘要。
MD5算法框图
MD5处理步骤
① 对消息填充:对消息填充,使得其比特长在模512下为448,即填充后消息的长度为512的某一倍数减64,留出的64比特备第2步使用。
② 附加消息的长度:用留出的64比特以little-endian方式来表示消息被填充前的长度。如果消息长度大于264,则以264为模数取模。
③ 对MD缓冲区初始化:算法使用128比特长的缓冲区存储中间结果和最终杂凑值。
④ 以分组为单位对消息进行处理:每一分组Yq(q=0,…,L-1)都经一压缩函数HMD5处理。HMD5是算法的核心,其中又有4轮处理过程,如图所示。
IV: 缓冲区ABCD的初值
Yq: 消息的第q个512比特长的分组
L: 消息经过处理后的分组数
CVq: 消息的第q个分组时输入的链接变量
RFx: 使用基本逻辑函数x的轮函数
+: 对应字的模232加法
MD: 最终的杂凑值。
MD5压缩函数
压缩函数HMD5中有4轮处理过程,每轮又对缓冲区ABCD进行16步迭代运算,每一步的运算形式:
g基本逻辑函数
X[k]
4轮处理过程中,每轮以不同的次序使用16个字
第1轮以字的初始次序使用。
第2轮到第4轮分别对字的次序i做置换后得到一个新次序,然后以新次序使用16个字。
3个置换分别为:
ρ2(i)=(1+5i) mod 16
ρ3(i)=(5+3i) mod 16
ρ4(i)=7i mod 16
T[i]
CLSS
⑤ 输出:消息的L个分组都被处理完后,最后一个HMD5的输出即为产生的消息摘要。
SHA-1
- 安全杂凑算法(Secure Hash Algorithm, SHA)由美国NIST设计,于1993年作为联邦信息处理标准公布。SHA是基于MD4的算法,其结构与MD4非常类似。
- 算法的输入:小于264比特长的任意消息,分为512比特长的分组。
算法的输出:160比特长的消息摘要。
算法的框图与MD5一样,但杂凑值的长度和链接变量的长度为160比特。
SHA-1算法框图
SHA-1算法步骤
算法的处理过程有以下几步:
① 对消息填充: 与MD5的步骤①完全相同。
② 附加消息的长度: 与MD5的步骤类似,不同以big-endian方式表示填充前消息的长度。
③ 对MD缓冲区初始化: 使用160比特长的缓冲区存储中间结果和最终杂凑值。
缓冲区可表示为5个32比特长的寄存器(A, B, C, D, E),每个寄存器都以big-endian方式存储数据。
初始值分别为A=67452301,B=EFCDAB89,C=98BADCFB,D=10325476,E=C3D2E1F0。
④ 以分组为单位对消息进行处理:每一分组Yq都经一压缩函数处理,压缩函数由4轮处理过程(如图6.8所示)构成,每一轮又由20步迭代组成。
第4轮的输出(即第80步迭代的输出)再与第1轮的输入CVq相加,以产生CVq+1,其中加法是缓冲区5个字中的每一个字与CVq中相应的字模232相加。
CV0=IV;
CVq+1=SUM32(CVq, ABCDEq);
MD=CVL
IV: 缓冲区ABCDE的初值。
ABCDEq:第q个消息分组经最后一轮处理过程处 理后的输出
L: 是消息(包括填充位和长度字段)的分组数
SUM32:是对应字的模232加法
MD: 最终的摘要值。
SHA-1压缩函数
SHA的压缩函数由4轮处理过程组成,每轮处理过程20步迭代运算组成,每一步迭代运算的形式为
A,B,C,D,E:缓冲区的5个字
t: 迭代的步数(0≤t≤79)
ft(B,C,D):第t步迭代使用的基本逻辑函数
CLSs: 左循环移s位
Wt: 由当前512比特长的分组导出的一个32比特长的字
Kt: 加法常量
+: 模232加法。
f
W
K
⑤ 输出消息的L个分组都被处理完后,最后一个分组的输出即为160比特的消息摘要。
SHA与MD5比较
由于SHA与MD5都是由MD4演化而来,所以两个算法极为相似。
- 抗穷搜索攻击的强度
由于SHA和MD5的消息摘要长度分别为160和128,SHA抗击穷搜索攻击的强度高于MD5抗击穷搜索攻击的强度。 - 抗击密码分析攻击的强度
由于SHA的设计准则未被公开,所以它抗击密码分析攻击的强度较难判断,似乎高于MD5的强度。 - 速度
由于两个算法的主要运算都是模232加法,因此都易于在32位结构上实现。但比较起来,SHA的迭代步数(80步)多于MD5的迭代步数(64步),所用的缓冲区(160比特)大于MD5使用的缓冲区(128比特),因此在相同硬件上实现时,SHA的速度要比MD5的速度慢。 - 简洁与紧致性
两个算法描述起来都较为简单,实现起来也较为简单,都不需要大的程序和代换表。 - 数据的存储方式
MD5使用little-endian方式,SHA使用big-endian方式。两种方式相比看不出哪个更具优势,之所以使用两种不同的存储方式是因为设计者最初实现各自的算法时,使用的机器的存储方式不同。