01:05:44第四章数字签名与认证技术在网络环境下,数字签名与认证技术是信息完整性和不可否认性的重要保障,是公钥密码体制的重要应用。信息的发送方可以对电子文档生成数字签名,信息的接收方则在收到文档及其数字签名后,可以验证数字签名的真实性。身份认证则是基于数字签名技术为网络世界中实体的身份提供可验证性。01:05:44本章内容提要:数字签名的概念与原理消息认证与哈希函数数字签名体制身份认证技术认证技术应用案例认证技术的发展趋势第四章数字签名与认证技术01:05:444.1数字签名的概念与原理数字签名是密码学和信息安全中最重要和最有用的概念之一。它的诞生使得在网络环境下,任一实体(组织或者个人)对在网络上传输的电子文件进行签名成为可能。任何得到该签名的实体可以对签名的有效性进行验证。01:05:44数字签名的概念数字签名的原理4.1数字签名的概念与原理01:05:44数字签名的概念概念数字签名是以密码学的方法对数据文件作用产生的一组代表签名者身份与数据完整性的数据信息,通常附加在数据文件的后面。数据文件的接收者可以利用签名者的公钥作用于数字签名上,以验证数据文件的真实性、完整性。01:05:44数字签名的概念数字签名的原理4.1数字签名的概念与原理01:05:44数字签名的原理原理数字签名就是用私有密钥进行加密,而认证就是利用公开密钥进行正确的解密。数字签名的原理如图所示01:05:44数字签名的原理一个基于公钥密码学的数字签名方案被定义为一个算法三元组(Gen,Sig,Ver),方案中共有两方参与:签名者Signer与验证者Verifier。密钥生成算法Gen签名生成算法Sig签名验证算法Ver它是一个概率多项式时间算法,由系统或者签名者执行,该算法以系统安全参数1k为输入,输出密钥对(Pk,Sk),其中Pk称为签名者公开密钥,Sk为签名者秘密钥;即Gen(1k)→(Pk,Sk)。它是一个概率多项式时间算法,由签名者执行,该算法以签名秘密密钥Sk,待签名消息m∈{0,1}k为输入,输出一个串s。此时称s为签名者以签名秘密密钥Sk对消息m所做的签名,即Sig(Sk,m)→s。它是一个确定性算法,由验证者执行,该算法以签名公开密钥Pk,签名消息对(m,s)为输入,输出0或1,即Ver(Pk,m,s)→{0,1},如果s∈Sig(m),则输出1说明签名有效;反之输出0,则说明签名无效01:05:44哈希函数的性质哈希函数的结构4.2消息认证与哈希函数安全哈希函数(SHA)消息认证01:05:44哈希函数的性质哈希(Hash)函数是一个输入为任意长的二元串,输出为固定长度的二元串的函数。一般用H(·)表示哈希函数,若输出是长度为l的二元串,哈希函数表示为:H(·):{0,1}*→{0,1}l定义01:05:44哈希函数的性质哈希函数H(·):{0,1}*→{0,1}l称为具有单向性,是指1)任意给定M∈{0,1}*,可以很容易(多项式时间内)地计算出消息摘要H(M)∈{0,1}l。2)任意给定H(M)∈{0,1}l,求出M∈{0,1}*,在计算上困难的,即多项式时间内不可解。定义01:05:44哈希函数的性质哈希函数H(·):{0,1}*→{0,1}l称为具有抗第二原像性(SecondPreimageResistant),是指任意给定M∈{0,1}*及其信息摘要H(M),求出M′∈{0,1}*且M′≠M,使得H(M′)=H(M)是困难的。定义01:05:44哈希函数的性质哈希函数H(·):{0,1}*→{0,1}l称为具有抗碰撞性(CollisionResistant),是指求出任意M,M′∈{0,1}*,且M′≠M,使得H(M′)=H(M)是困难的。由上面的四个定义可以知道,哈希函数应该具有单向性、抗原像性、抗第二原像性以及抗碰撞性。定义01:05:44哈希函数的性质哈希函数的结构4.2消息认证与哈希函数安全哈希函数(SHA)消息认证01:05:44哈希函数的结构由Merkle提出的迭代哈希函数一般结构如图所示,这也是目前大多数哈希函数(MD5、SHA-1、RIPEMD)的结构。其中,IV称为初始向量,CV称为链接变量,Yi是第i+1个输入消息分组,f称为压缩函数,L为输入的分组数,l为哈希函数的输出长度,b为输入分组长度。01:05:44哈希函数的性质哈希函数的结构4.2消息认证与哈希函数安全哈希函数(SHA)消息认证01:05:44安全哈希函数(SHA)安全哈希函数(SHA)由美国国家标准和技术协会(NIST)提出的,于1993年作为美国联邦消息处理标准(FIPSPUB180)公布。1995年NIST发布了它的修订版(FIPS180-1),通常称为SHA-1SHA-1算法具体的处理步骤步骤1:附加填充比特步骤2:附加长度值步骤3:初始化MD缓存步骤4:以512比特(16个字)分组处理消息首先对报文进行填充,填充方法是:先添加一个比特1,然后填充足够多的比特0,使填充后的报文的长度与448模512同余,即为512的倍数刚好减去64比特将一个64比特的填充前的消息的长度分组附加到报文后面,这个64比特的长度被看作是一个无符号整数SHA-1算法使用了160比特(5×32比特)的缓存来存放中间以及最终结果,这160比特被分成5个32比特字H0,H1,H2,H3,H4(SHA-1算法中每个字32比特)消息开头循环地处理消息序列分组,直至消息的结尾。每一次循环都以当前处理的512比特分组和MD缓存H0,H1,H2,H3,H4作为输入。步骤5:输出在最后一个消息分组处理完毕后,MD缓存(H0,H1,H2,H3,H4)中的值即为算法输出的160比特报文摘要01:05:44安全哈希函数(SHA)对于步骤4的每一次循环又可分为三个阶段阶段1:复制中间变量阶段2:执行压缩函数F阶段3:更新MD缓存H0,H1,H2,H3,H4把H0,H1,H2,H3,H4分别复制到中间变量A,B,C,D,E中,阶段2的所有操作都将在中间变量A,B,C,D,E上进行SHA-1每一个主循环压缩函数F共包括80个操作,每个操作中都使用了一个非线性函数。在所有80个操作完成后,算法的下列步骤更新MD缓存01:05:44安全哈希函数(SHA)【例】SHA-1算法举例。字符串“abc”的二进制表示为011000010110001001100011,长度为24比特,则按照SHA-1的填充要求,应填充1个“1”和423个“0”,最后有两个字为“0000000000000018”,表明原始消息的长度为24比特。这样,这个输入只有一个512比特的分组。五个寄存器取如下的初始值:A=67452301B=EFCDAB89C=98BADCFED=10325476E=C3D2E1F0消息分组的所有字取上述经过填充后的512比特分组,即:W[0]=61626380H(01100001011000100110001110000000),W[1]=W[2]=…W[14]=00000000H,W[15]=00000018H。在经过80步循环后,五个寄存器中的值分别如下:A=A9993E36B=4706816AC=BA3E2571D=7850C26CE=9CD0D89D五个寄存器的值顺序排列,即得到消息“abc”的哈希函数值01:05:44哈希函数的性质哈希函数的结构4.2消息认证与哈希函数安全哈希函数(SHA)消息认证01:05:44消息认证消息认证消息认证是使消息的接收者能够检验收到的消息是否是真实的认证方法消息认证的目的有两个:其一是消息源的认证,即验证消息的来源是真实的;其二是消息的认证,即验证信息在传送过程中未被篡改。1)消息认证码MAC(MessageAuthenticationCode):是以消息和密钥作为输入的公开函数,可以生成定长的输出。该方法需要在信息的发送方和接收方之间共享密钥。2)哈希函数:是不带密钥的公开函数,它将任意长度的输入消息映射为固定长度的输出值。哈希函数与数字签名算法相结合,提供对于消息的完整性检验。01:05:44消息认证基于密钥哈希函数的MAC基于密钥哈希函数的MAC的形式如下。MAC=H(k‖M)HMAC=H(k‖M‖k)使用哈希函数构造的MAC,称为HMAC01:05:44消息认证基于分组加密算法的MAC令ek(m)表示输入消息为m,密钥为k的分组密码加密算法。为了认证消息M,发送者首先对M进行分组:M=m1m2…ml其中,每一个子消息组mi(i=1,2,…,l)的长度都等于分组加密算法输入的长度。如果最后一个子消息组ml长度小于分组长度,就必须对其填充一些随机值。设C0=IV为随机初始向量。现在,发送者用CBC加密:1()1,2,,ikiiCmCil01:05:44RSA数字签名体制ELGamal数字签名体制4.3数字签名体制数字签名标准DSS01:05:44RSA数字签名体制算法RSA签名体制。密钥建立:密钥建立过程和RSA密码系统的密钥建立过程相同。经过密钥建立过程,用户Alice的公钥为(N,e),其中N=pq,p和q是两个长度差不多的大素数,e是满足gcd(e,f(N))=1的整数。Alice的私钥为d,满足ed=1mod(f(N))。签名生成:为了生成消息的签名,Alice计算s=Signd(m)←md(modN),即得到消息签名对(m,s)。签名验证:设Bob是验证者,他知道公钥(N,e)属于Alice。给定一个消息-签名对(m,s),Bob的验证过程为测试m≡se(modN),如果成立,则Verify(N,e)(m,s)=True。01:05:44RSA数字签名体制ELGamal数字签名体制4.3数字签名体制数字签名标准DSS01:05:44RSA数字签名体制算法1.参数生成(1)公开参数设p是一个大素数,并确保在Zp中求解离散对数在计算上是困难问题;g是Zp中乘法群的一个生成元,或称为本原元素。pZ(2)用户私钥参数选定一个随机的x,,作为用户的私钥。pZ(3)用户公钥参数计算y≡gxmodp作为用户的公钥。由此设用户Alice的公私钥对为(xA,yA),yA公开,而xA保密。01:05:44RSA数字签名体制2.生成签名Alice欲生成对消息m的签名,则执行如下的签名过程:1)随机选择k,,并要求gcd(k,p-1)=1。2)计算签名:r←gkmodp。3)计算签名:s←k-1(m-xAr)mod(p-1)。得到消息签名对为(m,(r,s))。pZk1v3.验证签名设Bob为验证方,他知道公开参数(g,p)以及Alice的公钥yA。对于消息签名对(m,(r,s)),Bob执行验证过程。1)预查合法性如果1≤r≤p-1,继续,否则签名是不合法的。2)计算:3)计算:4)比较和:如果,表示签名有效;否则签名无效:1v1Amodrsvyrp2v2modmvgp2v1v21vv01:05:44RSA数字签名体制ELGamal数字签名体制4.3数字签名体制数字签名标准DSS01:05:44数字签名标准DSSDSA算法描述设p、q、g作为公开参数,供所有用户共同使用;xA是签名者的私钥;yA是签名者的公钥。对消息M的签名结果是两个数(s,r)。每一次签名都使用了随机数k,要求每次签名使用的k取值不同。(1)参数生成1)生成公开参数。p:是一个大的素数,2L-1p2L,其中512≤L≤1024。q:是(p-1)的素因子,并且其字长为160比特,即2159q2160。g:g≡h(p-1)/qmodp,其中h是一个整数,1h(p-1),且要求g1。以上三个参数p、q、g,是所有用户公用的参数,所以称为公共参数。2)用户参数。选取—个随机数x作为用户私钥,要求0xq;计算求得y≡gxmodp,y为用户公钥。01:05:44数字签名标准DSSpZ(2)签名过程签名的消息空间可以表示为。签名时