零、认证认证(Authentication)是防止主动攻击的重要技术,对于开放环境中各种信息系统的安全有着重要作用认证的主要目的:验证消息来自意定的、真实的发送者;验证消息的完整性,在传送或存储过程中未被篡改、重放或延迟等;提供不可否认性。认证采用的主要技术报文鉴别(Messageauthentication)数字签名(Digitalsignature)身份识别(Identityverification)一、散列函数1、散列函数概况2、常用散列函数1、散列函数(Hash函数)概况散列函数以一个变长的报文M作为输入,产生一个定长的输出(散列码)的函数,可记为h=H(M)(|M||h|)散列函数的目的是为文件、报文或其他分组数据产生“指纹”,常用于报文鉴别和数字签名散列函数是一个多对一的函数因此在理论上,必定存在不同的报文对应同样的散列,但这种情况在实际中必须不可能出现(计算上不可行)散列函数本身不是保密的散列函数没有密钥的参与,散列值仅仅是报文的函数散列函数的需求1、H能用于任意长度的数据分组;2、H产生定长的输出;3、对任意给定的X,H(X)要容易计算;4、对任何给定的h,寻找x使得H(x)=h,在计算上不可行(单向特性);5、对任意给定的分组x,寻找不等于x的y,使得H(x)=H(y),在计算上不可行(弱抗碰撞);6、寻找任意的一对分组(x,y),使得H(x)=H(y),在计算上不可行(强抗碰撞)。散列函数的有效安全级别假设散列函数的输出为m比特,可以将其抗各种攻击的有效安全级别表示为:这意味着安全散列函数的输出长度有一个下界:40bit的散列长度将非常不安全:因为仅仅在220≈100万个随机的散列值中就有50%的概率发现一个碰撞。一般建议最小的报文散列的长度为128bit,实际中常采用160bit。单向2m弱抗碰撞2m强抗碰撞2m/22、常用散列函数1、MD5算法MD5的散列码只有128比特,其对抗生日攻击的有效级是264,从现在的角度看太小,安全性不够。2、SHA-1算法SHA(安全散列算法)由NIST在1993年公布(FIPSPUB180),并在1995年进行了修订,称为SHA-1(FIPSPUB180-1);算法产生160比特的散列码;SHA-1是目前首选的散列算法。常用散列函数演示输入字符串:“12345678”25D55AD283AA400AF464C76D713C07AD7C222FB2927D828AF22F592134E8932480637C0DMD5SHA-1输入文件(1.4G):The.Imitation.Game.2014.mp4MD5SHA-1A3DD6A05AD84FB733ECB01EFA275002F93F661DAB2E912AF2802F1BB32BB527739F63107二、报文鉴别1、概述2、利用单钥加密实现鉴别3、报文鉴别码(MAC)4、带密钥的散列函数1、概述报文鉴别的主要用途保证消息的完整性;保证消息来源的可靠性;报文鉴别的主要方法报文加密:以整个报文的密文作为它的鉴别符;报文鉴别码(MAC):以一个报文的公共函数和用于产生一个定长值的密钥作为鉴别符;带密钥的散列函数(HMAC):将秘密因素引入原始报文,然后对其进行散列,并将散列函数的结果作为鉴别码。2、利用单钥加密实现鉴别报文加密本身可以提供一定程度的鉴别能力如果采用常规加密,则1)接收方知道报文一定是由发送方创建的,因为创建该报文对应的密文的密钥只有发送方和接收方所共享;2)并且(加密后的)报文的内容没有被篡改过,如果报文的内容(密文)被篡改,则解密后无法恢复原始的合法报文(明文)。报文的内部结构为了增强鉴别能力,最好能使原始的报文(明文)具有某种结构,这样在接收端可以通过验证这种结构,来确定报文是否被篡改。利用单钥加密实现鉴别发送方接收方3、报文鉴别码报文鉴别码(MessageAuthenticationCode,MAC)是一个定长的数据分组,它是报文和一个密钥的函数:MAC=Ck(M)如果收发双方共享一个密钥,则1、发送端发送报文时,可计算报文的MAC,并将其附在报文后一起传送。2、接收端采用相同的算法和密钥,对收到的报文进行同样的计算,产生新的MAC,如果新的MAC和收到的MAC相同,则收端可以确信:1)报文没有被更改过(包括外界的干扰和人为篡改);2)报文来自意定的发送者。利用MAC保证数据完整性的原理M发送方A接收方BCMCk(M)||Ckk和Ck(M)相同吗?是否接受拒绝数据发送方,如调度系统数据接收方,如被控站攻击者(不知道收发双方当前的密钥K),试图篡改报文事先共享密钥K在网络上传输的报文,如调度命令采用对称加密算法产生MAC可以将任何工作于CBC模式的常规分组算法作为MAC函数,并将CBC的最后一个分组当作MACDAA(DataAuthenticationAlgorithm)算法该算法是使用最广的MAC函数(FIPSPUB113,ANSIX9.17),基于DES-CBC模式;算法步骤:1)取IV=0,并将报文最后一个分组用0填充成64比特;2)采用DES的CBC模式加密报文;3)抛弃加密的中间结果,只将最后一组密文(或最后一组密文的左边M(16≤M≤64)比特)作为MAC;从目前的角度看,64比特的MAC长度较小产生MAC的DAA算法4、带密钥的散列函数目前,构造MAC方法的研究热点已经从分组密码(FIPSPUB113)转向散列函数散列函数的执行速度比分组密码快;散列函数没有出口限制。标准的散列函数并不依赖于密钥,因此不能直接用于MAC,必须将密钥和现有的散列函数结合起来当前获得广泛采用的方案是HMAC(RFC2104)HMACHMAC(RFC2104)作为IPSEC中强制实行的MAC,同时也被其他的Internet协议(如SSL)使用HMAC的设计目标:1)无需修改地使用现有的散列函数;2)当出现或获得更快或更安全的散列函数时,对算法中嵌入的散列函数要能轻易地进行替换;3)保持散列函数的原有性能,不会导致算法性能降低;4)使用和处理密钥的方式很简单;5)基于对嵌入散列函数合理的假设,对鉴别机制的强度有一个易懂的密码编码分析。HMAC的结构HMAC的结构(续)HMAC的计算HMACK=Hash[(K+XORopad)||Hash[(K+XORipad)||M)]]K+是对密钥K填充生成的b比特的串opad,ipad是特定的填充常量HMAC增加了三个散列压缩函数HMAC适用于MD5,SHA-1,RIPEMD-160等各种散列函数三、数字签名1、概述2、RSA数字签名3、数字签名标准DSS1、概述普通的报文鉴别能用来保护通信双方免受任何第三方的攻击,然而,它无法防止通信双方互相攻击。假定A发送一个经过鉴别的消息给B,双方之间的争议可能有多种形式:1)B伪造一个不同的消息,但声称是从A收到的。2)A可以否认发过该消息,B无法证明A确实发了该消息。解决以上问题可以用数字签名《中华人民共和国电子签名法》已于2004年8月28日第十届全国人民代表大会常务委员会第十一次会议通过,自2005年4月1日起施行。对数字签名的要求1、签名必须依赖于要签名报文的比特模式2、签名必须使用对发送者来说是唯一的信息以防止伪造和抵赖3、伪造一个数字签名在计算上是不可行的包括“根据已有的数字签名来构造新报文”,以及“对给定的报文构造一个虚假的数字签名”。4、数字签名的产生必须相对简单5、数字签名的识别和证实必须相对简单数字签名的定义一个数字签名方案是一个5元组(P,A,K,S,V),它满足下列条件P是所有可能消息的有限集;A是所有可能签名的有限集;K是所有可能密钥的有限集;数字签名的定义(续)对每一个k∈K,有一个签名算法sigk∈S和一个相应的验证算法verk∈V,对每一个消息x∈P和每一个签名y∈A,每一个sigk:P—A和verk:P×A—{真,假}都是满足下列条件的函数:对每一个k∈K,sigk和verk应该是多项式时间函数;其中verk是一个公开函数,sigk将是一个秘密函数,对一个给定的x,只有签名者能计算签名y,满足verk(x,y)=真。()(,)()trueysigxverxyfalseysigx 若 若2、RSA签名方案1、密钥产生设n=p*q,p和q是素数,P=A=Zn,定义K={(n,p,q,a,b):a*b≡1(modφ(n))},其中n和b公开(公钥),p、q、a保密(私钥)。2、签名算法(利用私钥a,是保密的)y≡sigk(x)≡xa(modn)3、验证算法(利用公钥b,是公开的)verk(x,y)=true当且仅当x≡yb(modn)数字签名和散列函数在实际应用中,数字签名几乎总是和散列函数结合使用签名时,签名者完成如下工作1)按如下步骤计算消息x的签名yx(消息)z=h(x)(摘要)y=sigk(z)2)将(x,y)传给验证者。验证者收到(x,y)后,完成如下工作1)通过公开的hash函数h重构消息摘要z=h(x);2)检查verk(z,y)=true?3、数字签名标准DSSDSS:DigitalSignatureStandard;数字签名标准DSS(DigitalSignatureStandard)是NIST公布的联邦信息处理标准FIPSPUB186,最早发表于1991年,随后在1993年和1996年进行了一些修改。DSS使用了安全散列算法SHA和数字签名算法DSA。DSS的处理流程签名者验证者四、身份证明1、概述2、通行字(口令)身份证明3、一次性口令1、概述身份证明是指在两方或多方参与的信息交互中,参与者中的一方对其余各方(自称的或未说明的)身份的判断与确认。身份证明还可进一步分类为身份验证(IdentityVerification)和身份识别(IdentityRecognition)身份验证工作的条件包括被验证者个人的(自称的)“身份”及作为该“身份”凭据的个人信息;身份识别工作的条件只有被识别者的个人信息,及一个群体的个人信息数据库,被识别者很可能属于该群体。实现身份证明的途径实现身份证明的途径所知:密钥、口令等;所有:身份证、护照、信用卡、钥匙等;个人特征:指纹、笔迹、声纹、手型、血型、视网膜、虹膜、DNA等(生物识别);你做的事情:如手写签名和步态识别等。双因素认证同时使用上面的两种途径进行证明,如:口令+智能卡。2、通行字(口令)身份证明通行字(也称口令)身份验证协议是信息系统中一种使用最为广泛的身份验证协议协议涉及若干示证者(P)和唯一的验证者(V)最简单的通行字身份验证协议可以是“one-pass”协议即整个过程中只需要由示证者P向验证者V传送一次消息,其内容是示证者P的身份标识ID(identity)和通行字PW(password)。(ID,PW)数据对中的ID一般事先由验证者V为示证者P分配以保证其唯一性,数据对中的PW则可由示证者P产生后提交给验证者V保存,或由验证者V为示证者P分配并由V保存。口令认证基本协议1、P→V:IDp;2、V→P:提示P“输入口令”;3、P→V:PWp;4、V从其口令文档中找出记录(IDp,PWp),如果接收的PWp与记录中的匹配,就允许访问。基于散列函数的口令方案在该方案中,验证者V存储口令的散列值而不是原始口令例如:如采用MD5,则口令’123456’在验证者处存储为MD5(‘123456’),即E10ADC3949BA59ABBE56E057F20F883E用下述协议完成鉴别:1)示证者P将他的口令传送给验证者V;2)验证者V完成口令的散列函数计算;3)验证者V把散列函数的运算结果和它以前存储的值进行比较。由于验证者不再存储