第5章数字签名与认证技术哈希函数数字签名消息鉴别身份认证身份认证实例-Kerberos数据保护工具目录哈希函数概念哈希函数,也称为单向散列函数、杂凑函数或消息摘要算法。它通过把一个单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数据。哈希函数H能用于任意大小的分组,产生定长的输出;对任何给定的x,H(x)要相对易于计算,使得硬件和软件实现成为实际可能;单向性;弱抗冲突性;即强抗冲突性。哈希函数必须具有的特性单向性:给定M和H,求h=H(M)容易,但反过来给定h,寻找一个M’使H(M’)=h在计算上是不可行的;抗弱碰撞:给定M,要寻找另一信息M′,满足H(M′)=H(M)在计算上不可行;抗强碰撞:要寻找不同的信息M和M′,满足H(M′)=H(M)在计算上不可行。(概率论:生日攻击)生日悖论生日问题:一个教室中,最少应有多少学生,才使至少有两人具有相同生日的概率不小于1/2?概率结果与人的直觉是相违背的.实际上只需23人,即任找23人,从中总能选出两人具有相同生日的概率至少为1/2。【分析】:生日的取值范围:[1-365]不同输入的个数:23IV:初始值,CV:链接值,Yi:第i个输入数据块,f:压缩算法,n:散列码长度,b:输入块的长度。哈希函数的一般结构图MD5算法输入:任意长度的消息输出:128bit消息摘要处理:以512bit分组为处理单位注:MD5wasdevelopedbyRonRivest(“R”oftheRSA)atMITin1990’sMD5算法结构图在MD5算法中的处理步骤包括以下过程:首先,需要对消息进行填充。其次,将MD缓冲初始化。当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。输出散列值。所有L个512比特的分组处理完成后,第L阶段输出的结果便是消息M的信息摘要。MD5算法结构图MD5的单步操作MD5的安全性2019年,山东大学王小云教授证明了从理论上可以破解MD5-即找到MD5的碰撞,两个不同的文件可以产生相同的摘要。2019年8月美国加州召开的国际密码学会议,王小云做了破译MD5等算法的报告,产生了很大的影响。MD5设计者说到:“这些结果无疑给人非常深刻的印象,她应当得到我最热烈的祝贺,虽然我不希望看到MD5这样倒下,但人必须尊重真理”哈希函数数字签名消息鉴别身份认证身份认证实例-Kerberos数据保护工具数字签名的引入如何应对以下的攻击方式发送方不承认自己发送过某一报文接收方自己伪造一份报文,并声称它来自发送方某个用户冒充另一个用户接收或发送报文接收方对收到的消息进行修改数字签名可以解决以上争端数字签名概念数字签名就是利用一套规则对数据进行计算的结果,用此结果能确认签名者的身份和数据的完整性(美国DSS对数字签名的解释)数字签名应满足三个基本条件签名者不能否认自己的签名;接收者能够验证签名,而其他任何人都不能伪造签名;当签名的真伪发生争执时,存在一个仲裁机构或第三方能够解决争执。数字签名根据签名方式可以分为直接数字签名(directdigitalsignature)仲裁数字签名(arbitrateddigitalsignature)。(1)采用公开密钥的数字签名MMMEDA发方B收方KRAKUADKRA(M)使用发方的私钥对消息M进行数字签名(此时并没有对消息进行加密,因为任何人都可以获得公钥对消息M进行查看)直接数字签名具有保密性的公钥数字签名(2)具有保密功能的公钥数字签名MMMEA发方B收方KRAKUAEKUB[DKRA(M)]EDDKRBKUB签名加密解密验证签名直接数字签名比较KRA(3)采用消息摘要的数字签名MMA发方B收方KUAEKRA[H(M)]使用消息摘要的数字签名(不需要对整个消息进行签名,速度更快)HE||HD直接数字签名直接数字签名方案:仅涉及通信双方。签名方案的有效性依赖于发送方的私密密钥的安全性;发送方要抵赖发送某一消息时,可能会声称其私有密钥丢失或被窃,且他人伪造了他的签名。直接数字签名的问题需要仲裁的数字签名引入仲裁者来解决直接签名方案的问题。通常的做法是:所有从发送方A到接收方B的签名消息首先送到仲裁者Y,Y将消息及其签名进行一系列测试,以检查其来源和内容,然后将消息加上日期并与已被仲裁者验证通过的指示一起发给B。思考:A还能否认他的签名吗?仲裁者在这一类签名模式中扮演敏感和关键的角色。所有的通信方必须充分信任仲裁机构。需要仲裁的数字签名仲裁者是除通信双方之外,值得信任的公正的第三方;“公正”意味着仲裁者对参与通信的任何一方没有偏向。“值得信任”表示所有人都认为仲裁者所说的都是真实的,所做的都是正确的。举例:律师、银行、公证人(现实生活)在计算机网络中,由可信机构的某台计算机充当。(1)对称加密,仲裁能看到消息YABM‖EKAY[IDA‖H(M)]EKYB[IDA‖M‖EKAY[IDA‖H(M)]‖T]IDA:发送方A的标识符签名:EKAY[IDA‖H(M)]KAY:A和Y共享的对称密钥需要仲裁的数字签名(1)对称加密,仲裁能看到消息解决纠纷:B:向Y发送EKYB[IDA||M||EKAY[IDA||H(M)]]Y:用KYB恢复IDA,M,和签名EKAY[IDA||H(M)],然后用KAY解密签名并验证哈希值,从而验证A的签名。需要仲裁的数字签名(2)对称加密,仲裁不能看到消息BIDA‖EKAB[M]‖EKAY[IDA‖H(EKAB[M])]EKYB[IDA‖EKAB[M]‖EKAY[IDA‖H(EKAB[M])]‖T]AYAB之间共享的密钥KAB对消息进行加密,仲裁Y看不到消息的明文。双方仍然要高度信任Y。签名:EKAY[IDA‖H(EKAB[M])]需要仲裁的数字签名(3)公开密钥加密,仲裁不能看到消息BIDA‖EKRA[IDA‖EKUB(EKRA[M])]EKRY[IDA‖EKUB[EKRA[M]]‖T]AY仲裁Y通过EKRA[IDA‖EKUB(EKRA[M])]进行解密,可以确信消息一定来自于A(因为A才有KRA)签名:EKRA[IDA‖EKUB(EKRA[M])]需要仲裁的数字签名需要仲裁的数字签名(3)公开密钥加密,仲裁不能看到消息本签名方案比上述两个方案具有以下优点:1、在通信之前各方之间无须共享任何信息,从而避免了结盟欺骗的发生;2、即使KRA暴露,只要KRY未暴露,不会有日期错误标定的消息被发送;3、从A发送给B的消息的内容对Y和任何其他人是保密的。数字签名方案普通数字签名体制–RSA–EIGamal–DSS/DSA盲签名体制盲签名体制盲签名是根据电子商务具体的应用需要而产生的一种签名应用。当需要某人对一个文件签名,而又不让他知道文件的内容,这时就需要盲签名。盲签名与普通签名相比有两个显著的特点:签名者不知道所签署的消息内容;签名被接收者泄漏后,签名者无法追踪签名;也即,如果把签名的消息报文给签名者本人看,他只能确信是自己的签名,而无法知道什么时候、对什么样的盲消息进行了签名。应用:电子选举(投票)、电子货币(存取款、转帐)盲签名体制接收者B首先将待签的明文消息M进行盲变换,把变换后的盲消息发送给签名者A;经过A签名后,消息发送给接收者B;接收者B对签名做去盲变换,得出的便是签名者A对原数据的盲签名。盲签名原理图RSA盲签名算法算法描述:(1)接收者B对待签消息M进行盲化处理:随机选择盲化参数k,1kM,并计算:T=MKemodn(2)B将盲化消息T发送给A(由于k未知,A无法看到明文消息M)(3)A对盲消息T签名:Td=(MKe)dmodn=MdKmodn(4)A把对T的签名发送给接收者B;(5)B通过计算得到A对M的签名:S=Td/Kmodn=Mdmodn哈希函数数字签名消息鉴别身份认证身份认证实例-Kerberos数据保护工具概念认证(Authentication),又称鉴别,是对用户身份或报文消息来源及内容的验证。它是防止主动攻击的重要技术,是保证信息完整性、有效性的技术,即要搞清楚与之通信的对方身份是否真实,又要证实信息在传输过程中是否被篡改、伪装、窜扰、否认。认证的主要分为两个方面:身份/实体认证,即验证信息发送者是真的,而不是冒充的,包括信源、信宿等的认证和识别;消息/报文认证,验证信息的完整性,即验证数据在传输或存储过程中未被窜改、重放或延迟等。认证系统的模型认证编码器认证译码器信源A密钥源窜扰者安全信道信宿B纯认证系统的模型公开信道认证函数认证编码器和认证译码器可抽象为认证函数。认证函数产生一个认证标识(authenticationidentification)给出合理的认证协议(authenticationprotocol)接收者完成消息的认证(authentication)一个安全的认证系统,需满足(1)接收者能检验和证实消息的合法性、真实性和完整性(2)消息的发送者和接收者不能抵赖(3)除了合法的消息发送者,其它人不能伪造合法的消息认证函数分类认证的函数分为三类:消息加密函数(Messageencryption)用完整信息的密文作为对信息的认证。消息认证码MAC(MessageAuthenticationCode)是对信源消息的一个编码函数。散列函数(HashFunction)是一个公开的函数,它将任意长的信息映射成一个固定长度的信息。MEKEK(M)DMK提供保密提供认证(仅来自Bob,传输中没有被更改)不提供签名(Bob可以否认发送过消息M)BobAlice对称加密:保密性与认证认证函数1:加密函数认证函数1:加密函数公钥加密:认证与签名MDKRBEKRB(M)EMKB提供认证(仅Bob有KRB可以进行加密传输中没有被更改任何一方均可以使用KUB验证签名)提供签名(Bob不可否认)BobAlice公钥加密:保密、认证与签名MDKUAEKUA(DkRb(M))DKRA提供认证提供签名提供保密性EKRBDkRB(M)DkRB(M)EKUBMBobAlice认证函数1:加密函数认证函数2:消息认证码消息认证码:使用一个密钥生成一个固定大小的短数据块,并将该数据块加载到消息后面,称MAC(或密码校验和)MAC=Ck(M)MAC函数类似于加密函数,但不需要可逆性。因此在数学上比加密算法被攻击的弱点要少MAC的计算基于DES的消息认证码KTime=1DESO1(64bits)Time=2DESKTime=NDESKMAC(16to64bits)...(16=m=64)O2(64bits)ON(64bits)D1(64bits)D2(64bits)DN(64bits)计算MAC值的算法O1=EK(D1)O2=EK(D2⊕O1)O3=EK(D3⊕O3)ON=EK(DN⊕ON-1)MAC取ON的后m比特注意MAC需要对全部数据进行加密,因而计算MAC所需的时间较长,一般不会低于一次数据加密所需的时间(DES)。为此,采用更快速的哈希函数实现消息的认证。认证函数3:hash函数哈希函数数字签名消息鉴别身份认证身份认证实例-Kerberos数据保护工具身份认证身份认证就是确认实体是它所声明的。身份认证是最重要的安全服务之一。认证服务提供了关于某个实体身份的保证。(所有其它的安全服务都依赖于该服务)身份认证可以对抗假冒攻击的危险。身份认证的例子身份认证目的:某一实体确信与之打交道的实体正是所需要的实体。只是简单地鉴别实体本身的身份,不会和实体想要进行何种活动相联系。在安全体系中的作用:作为访问控制服务的一种必要支持,访问控制服务的执行依赖于确知的身份身份认证的分类:身份认证可以分为本地和远程两类。本地多用户认证:实体在本地环境的初始化鉴别(就是说,作为实体个人,和设备物理接触,不和网络中的其他设备通信)。远程用户认证:连接远程设备、实体和环境