2k likes | 2.23k Views
身份认证. 《 现代密码学 》 第 9 章. 本章主要内容. 1 、身份认证概述 2 、相互认证 3 、单向认证 4 、身份的零知识证明技术 5 、其他的身份认证密码协议 6 、典型的认证应用. 1 .身份认证概述. 为了保护网络资源及落实安全政策。需要提供可追究责任的机制,这里涉及到三个概念:认证、授权及审计。 ( 1 )认证 Authentication :在做任何动作之前必须要有方法来识别动作执行者的真实身份。认证又称为鉴别、确认。身份认证主要是通过标识和鉴别用户的身份,防止攻击者假冒合法用户获取访问权限。
E N D
身份认证 《现代密码学》第9章
本章主要内容 • 1、身份认证概述 • 2、相互认证 • 3、单向认证 • 4、身份的零知识证明技术 • 5、其他的身份认证密码协议 • 6、典型的认证应用
1.身份认证概述 • 为了保护网络资源及落实安全政策。需要提供可追究责任的机制,这里涉及到三个概念:认证、授权及审计。 • (1)认证Authentication:在做任何动作之前必须要有方法来识别动作执行者的真实身份。认证又称为鉴别、确认。身份认证主要是通过标识和鉴别用户的身份,防止攻击者假冒合法用户获取访问权限。 • (2)授权Authorization:授权是指当用户身份被确认合法后,赋予该用户进行文件和数据等操作的权限。这种权限包括读、写、执行及从属权等。 • (3)审计Auditing:每一个人都应该为自己所做的操作负责,所以在做完事情之后都要留下记录,以便核查责任。
身份认证概述 • 在现实生活中,我们个人的身份主要是通过各种证件来确认的,比如:身份证、户口本等。计算机网络信息系统中,各种计算资源(如:文件、数据库、应用系统)也需要认证机制的保护,确保这些资源被应该使用的人使用。 • 在大多数情况下,认证机制与授权和记账也紧密结合在一起。身份认证是对网络中的主体进行验证的过程,用户必须提供他是谁的证明。 • 身份认证往往是许多应用系统中安全保护的第一道设防,它的失败可能导致整个系统的失败。
身份认证概述 • 身份认证系统包含下列三项主要组成元件: • (1)认证服务器(Authentication Server) • 负责进行使用者身份认证的工作,服务器上存放使用者的私有密钥、认证方式及其他使用者认证的相关资讯。 • (2)认证系统用户端软体(Authentication Client Software) • 认证系统用户端通常都是需要进行登陆(login)的设备或系统,在这些设备及系统中必须具备可以与认证服务器协同运作的认证协议。 • 也有些情况下认证服务器与认证系统用户端软体是集成在一起的。 • (3)认证设备(Authenticator) • 认证设备是使用者用来产生或计算密码的软硬件设备。
身份认证概述 • 从用户角度来看,非法用户常采用以下手段对身份认证过程中攻击: • 数据流窃听(Sniffer):由于认证信息要通过网络传递,并且很多认证系统的口令是未经加密的明文,攻击者通过窃听网络数据,就很容易分辨出某种特定系统的认证数据,并提取出用户名和口令。 • 拷贝/重传:非法用户截获信息,然后再传送给接收者。 • 修改或伪造:非法用户截获信息,替换或修改信息后再传送给接收者,或者非法用户冒充合法用户发送信息。
身份认证概述 • 适合于各种不同场合的认证交换机制有多种选择与组合。例如: • 当对等实体以及通信手段都可信任时,一个对等实体的身份可以通过口令来证实。该口令能防止出错,但不能防止恶意行为(特别不能防止重演)。相互鉴别可在每个方向上使用不同的口令来完成; • 当每个实体信任它的对等实体但不信任通信手段时,抗主动攻击的保护能够由口令与加密联合提供,或由密码手段提供。防止重演攻击的需要双方握手(用保护参数),或时间标记(用可信任时钟)。带有重演保护的相互鉴别,使用三方握手就能达到。
身份认证概述 • 当实体不信任(或感到它们将来可能不信任)它们的对等实体或通信手段时可以使用抗抵赖服务。使用数字鉴名机制和公证机制就能实现抗抵赖服务。这些机制可与上面b中所述的机制一起使用。 • 在计算机网络中,通常采用三种方法验证主体身份。一是只有该主体了解的秘密,如口令、密钥;二是主体携带的物品,如智能卡;三是只有该主体具有的独一无二的特征或能力,如指纹、声音、视网膜血管分布图或签字等。
2. 相互认证 以前介绍过消息认证的基本概念,事实上安全可靠的通信除需进行消息的认证外,还需建立一些规范的协议对数据来源的可靠性、通信实体的真实性加以认证,以防止欺骗、伪装等攻击。 本节以网络通信的一个基本问题的解决引出认证协议的基本意义,这一基本问题陈述如下:
2. 相互认证 • A和B是网络的两个用户,他们想通过网络先建立安全的共享密钥再进行保密通信。那么A(B)如何确信自己正在和B(A)通信而不是和C通信呢?这种通信方式为双向通信,因此,此时的认证称为相互认证。类似地,对于单向通信来说,认证称为单向认证。
2.1 相互认证的实现 A、B两个用户在建立共享密钥时需要考虑的核心问题是保密性和实时性。为了防止会话密钥的伪造或泄露,会话密钥在通信双方之间交换时应为密文形式,所以通信双方事先就应有密钥或公开钥。第2个问题实时性则对防止消息的重放攻击极为重要,实现实时性的一种方法是对交换的每一条消息都加上一个序列号,一个新消息仅当它有正确的序列号时才被接收。 但这种方法的困难性是要求每个用户分别记录与其他每一用户交换的消息的序列号,从而增加了用户的负担,所以序列号方法一般不用于认证和密钥交换。
保证消息的实时性 保证消息的实时性常用以下两种方法: 时戳 如果A收到的消息包括一时戳,且在A看来这一时戳充分接近自己的当前时刻, A才认为收到的消息是新的并接受之。这种方案要求所有各方的时钟是同步的。 询问-应答 用户A向B发出一个一次性随机数作为询问,如果收到B发来的消息(应答)也包含一正确的一次性随机数,A就认为B发来的消息是新的并接受之。
保证消息的实时性 其中时戳法不能用于面向连接的应用过程,这是由于时戳法在实现时固有的困难性。首先是需要在不同的处理器时钟之间保持同步,那么所用的协议必须是容错的以处理网络错误,并且是安全的以对付恶意攻击。第二,如果协议中任一方的时钟出现错误而暂时地失去了同步,则将使敌手攻击成功的可能性增加。
保证消息的实时性 • 最后还由于网络本身存在着延迟,因此不能期望协议的各方能保持精确的同步。所以任何基于时戳的处理过程、协议等都必须允许同步有一个误差范围。考虑到网络本身的延迟,误差范围应足够大;考虑到可能存在的攻击,误差范围又应足够小。
保证消息的实时性 而询问-应答方式则不适合于无连接的应用过程,这是因为在无连接传输以前需经询问\|应答这一额外的握手过程,这与无连接应用过程的本质特性不符。对无连接的应用程序来说,利用某种安全的时间服务器保持各方时钟同步是防止重放攻击最好的方法。 通信双方建立共享密钥时可采用单钥加密体制和公钥加密体制。
2.2 单钥加密体制下共享密钥的的建立 1. 单钥加密体制 采用单钥加密体制为通信双方建立共享的密钥时,需要有一个可信的密钥分配中心KDC,网络中每一用户都与KDC有一共享的密钥,称为主密钥。KDC为通信双方建立一个短期内使用的密钥,称为会话密钥,并用主密钥加密会话密钥后分配给两个用户。这种分配密钥的方式在实际应用中较为普遍采用,如Kerberos系统采用的就是这种方式。
Needham-Schroeder协议 (1) Needham-Schroeder协议 以下是1978年出现的著名的Needham-Schroeder认证协议。 这里需建立一个称为鉴别服务器的可信权威机构(密钥分发中心KDC),拥有每个用户的秘密密钥。若用户A欲与用户B通信,则用户A向鉴别服务器申请会话密钥。在会话密钥的分配过程中,双方身份得以鉴别。 ① A→KDC:IDA‖IDB‖N1 ② KDC→A:EKA[KS‖IDB‖N1‖EKB[KS‖IDA]] ③ A→B:EKB[KS‖IDA] ④ B→A:EKS[N2] ⑤ A→B:EKS[f(N2)]
Needham-Schroeder认证过程 • 其中KDC是密钥分发中心,Ra、Rb是一次性随机数,保密密钥Ka和Kb分别是A和KDC、B和KDC之间共享的密钥,Ks是由KDC分发的A与B的会话密钥,EX表示使用密钥X加密。
Needham-Schroeder协议 式中KA、KB分别是A、B与KDC共享的主密钥。协议的目的是由KDC为A、B安全地分配会话密钥KS,A在第②步安全地获得了KS,而第③步的消息仅能被B解读,因此B在第③步安全地获得了KS,第④步中B向A示意自己已掌握KS,N2用于向A询问自己在第③步收到的KS是否为一新会话密钥,第⑤步A对B的询问作出应答,一方面表示自己已掌握KS,另一方面由f(N2)回答了KS的新鲜性。
Needham-Schroeder协议 • 可见第④、⑤两步用于防止一种类型的重放攻击,比如敌手在前一次执行协议时截获第③步的消息,然后在这次执行协议时重放,如果双方没有第④、⑤两步的握手过程的话,B就无法检查出自己得到的KS是重放的旧密钥。
Needham-Schroeder协议 然而以上协议却易遭受另一种重放攻击,假定敌手能获取旧会话密钥,则冒充A向B重放第③步的消息后,就可欺骗B使用旧会话密钥。敌手进一步截获第④步B发出的询问后,可假冒A作出第⑤步的应答。 进而,敌手就可冒充A使用经认证过的会话密钥向B发送假消息。
Needham-Schroeder协议改进一 (2)Needham-Schroeder协议的改进方案之一 为克服以上弱点,可在第②步和第③步加上一时戳,改进后的协议如下: ① A→KDC:IDA‖IDB ② KDC→A:EKA[KS‖IDB‖T‖EKB[KS‖IDA‖T]] ③ A→B:EKB[KS‖IDA‖T] ④ B→A:EKS[N1] ⑤ A→B:EKS[f(N1)]
Needham-Schroeder协议改进一 其中T是时戳,用以向A、B双方保证KS的新鲜性。A和B可通过下式检查T的实时性: |Clock-T|<Δt1+Δt2 其中Clock为用户(A或B)本地的时钟,Δt1是用户本地时钟和KDC时钟误差的估计值,Δt2是网络的延迟时间。 以上协议中由于T是经主密钥加密的,所以敌手即使知道旧会话密钥,并在协议的过去执行期间截获第③步的结果,也无法成功地重放给B,因B对收到的消息可通过时戳检查其是否为新的。
Needham-Schroeder协议改进一 以上改进还存在以下问题: 方案主要依赖网络中各方时钟的同步,这种同步可能会由于系统故障或计时误差而被破坏。 如果发送方的时钟超前于接收方的时钟,敌手就可截获发送方发出的消息,等待消息中时戳接近于接收方的时钟时,再重发这个消息。这种攻击称为等待重放攻击。
Needham-Schroeder协议改进一 抗击等待重放攻击的一种方法是要求网络中各方以KDC的时钟为基准定期检查并调整自己的时钟,另一种方法是使用一次性随机数的握手协议,因为接收方向发送方发出询问的随机数是他人无法事先预测的,所以敌手即使实施等待重放攻击,也可被下面的握手协议检查出来。
Needham-Schroeder协议改进二 (3) Needham-Schroeder协议的改进方案之二 下面的协议可解决Needham-Schroeder协议以及改进方案一可能遭受的攻击: ① A→B:IDA‖NA ② B→KDC:IDB‖NB‖EKB[IDA‖NA‖TB] ③ KDC→A:EKA[IDB‖NA‖KS‖TB]‖EKB[IDA‖KS‖TB]‖NB ④ A→B:EKB[IDA‖KS‖TB]‖EKS[NB]
Needham-Schroeder协议改进二 协议的具体含义如下: ① A将新产生的一次性随机数NA与自己的身份IDA一起以明文形式发往B,NA以后将与会话密钥KS一起以加密形式返回给A,以保证A收到的会话密钥的新鲜性。
Needham-Schroeder协议改进二 ② B向KDC发出与A建立会话密钥的请求,表示请求的消息包括B的身份、一次性随机数NB以及由B与KDC共享的主密钥加密的数据项。其中NB以后将与会话密钥一起以加密形式返回给B以向B保证会话密钥的新鲜性,请求中由主密钥加密的数据项用于指示KDC向A发出一个证书,其中的数据项有证书接收者A的身份、B建议的证书截止时间TB、B从A收到的一次性随机数。
Needham-Schroeder协议改进二 ③ KDC将B产生的NB连同由KDC与B共享的密钥KB加密的IDA‖KS‖TB一起发给A,其中KS是KDC分配的会话密钥,EKB[IDA‖KS‖TB]由A当作票据用于以后的认证。KDC向A发出的消息还包括由KDC与A共享的主密钥加密的IDB‖NA‖KS‖TB,A用这一消息可验证B已收到第①步发出的消息(通过IDB),A还能验证这一步收到的消息是新的(通过NA),这一消息中还包括KDC分配的会话密钥KS以及会话密钥的截止时间TB。
Needham-Schroeder协议改进二 ④ A将票据EKB[IDA‖KS‖TB]连同由会话密钥加密的一次性随机数NB发往B,B由票据得到会话密钥KS,并由KS得NB。NB由会话密钥加密的目的是B认证了自己收到的消息不是一个重放,而的确是来自于A。
Needham-Schroeder协议改进二 以上协议为A、B双方建立共享的会话密钥提供了一个安全有效的手段。再者,如果A保留由协议得到的票据,就可在有效时间范围内不再求助于认证服务器而由以下方式实现双方的新认证: ① A→B:EKB[IDA‖KS‖TB],N′A ② B→A:N′B,EKS[N′A] ③ A→B:EKS[N′B]
2.3 公钥加密体制下共享密钥的建立 2. 公钥加密体制 曾介绍过使用公钥加密体制分配会话密钥的方法,下面的协议也用于这个目的。 ① A→AS: IDA‖IDB ② AS→A:ESKAS[IDA‖PKA‖T]‖ESKAS[IDB‖PKB‖T] ③ A→B:ESKAS[IDA‖PKA‖T]‖ESKAS[IDB‖PKB‖T‖EPKB[ESKA[KS‖T]]
公钥加密体制下共享密钥的建立 其中SKAS、SKA分别是AS和A的秘密钥,PKA、PKB分别是A和B的公开钥,E为公钥加密算法,AS是认证服务器(authentication server)。 第①步,A将自己的身份及欲通信的对方的身份发送给AS。 第②步,AS发给A的两个链接的数据项都是由自己的秘密钥加密(即由AS签字),分别作为发放给通信双方的公钥证书。
公钥加密体制下共享密钥的建立 • 第③步,A选取会话密钥并经自己的秘密钥和B的公开钥加密后连同两个公钥证书一起发往B。因会话密钥是由A选取,并以密文形式发送给B,因此包括AS在内的任何第3者都无法得到会话密钥。时戳T用以防止重放攻击,所以需要各方的时钟是同步的。
公钥加密体制下共享密钥的建立 下一协议使用一次性随机数,因此不需要时钟的同步: ① A→KDC:IDA‖IDB ② KDC→A:ESKAU[IDB‖PKB] ③ A→B:EPKB[NA‖IDA] ④ B→KDC:IDB‖IDA‖EPKAU[NA] ⑤ KDC→B:ESKAU[IDA‖PKA]‖EPKB[ESKAU[NA‖KS‖IDB]] ⑥ B→A:EPKA[ESKAU[NA‖KS‖IDB]‖NB] ⑦ A→B:EKS[NB]
公钥加密体制下共享密钥的建立 其中SKAU和PKAU分别是KDC的秘密钥和公开钥。 第①步,A通知KDC他想和B建立安全连接。 第②步,KDC将B的公钥证书发给A,公钥证书包括经KDC签字的B的身份和公钥。 第③步,A告诉B想与他通信,并将自己选择的一次性随机数NA发给B。 第④步,B向KDC发出得到A的公钥证书和会话密钥的请求,请求中由KDC的公开钥加密的NA用于让KDC将建立的会话密钥与NA联系起来,以保证会话密钥的新鲜性。
公钥加密体制下共享密钥的建立 第⑤步,KDC向B发出A的公钥证书以及由自己的秘密钥和B的公开钥加密的三元组{NA,KS,IDB}。三元组由KDC的秘密钥加密可使B验证三元组的确是由KDC发来的,由B的公开钥加密是防止他人得到三元组后假冒B建立与A的连接。 第⑥步,B新产生一个一次性随机数NB,连同上一步收到的由KDC的秘密钥加密的三元组一起经A的公开钥加密后发往A。 第⑦步,A取出会话密钥,再由会话密钥加密NB后发往B,以使B知道A已掌握会话密钥。
公钥加密体制下共享密钥的建立 以上协议可进一步做如下改进: 在第⑤、⑥两步出现NA的地方加上IDA,以说明NA的确是由A产生的而不是其他人产生的,这时{IDA,NA}就可惟一地识别A发出的连接请求。
Diffie-Hellman共享密钥的建立 • Diffie-Hellman算法发明于1976年,是第一个公开密钥算法。Diffie-Hellman算法不能用于加密与解密,但可用于密钥分配。密钥交换协议(key exchange protocol)是指两人或多人之间通过一个协议取得密钥并用于通信加密。在实际的密码应用中密钥交换是很重要的一个环节。比如说利用对称加密算法进行秘密通信,双方首先需要建立一个共享密钥。如果双方没有约定好密钥,就必须进行密钥交换。如何使得密钥到达接收者和发送者手里是件很复杂的事情,最早利用公钥密码思想提出一种允许陌生人建立共享秘密密钥的协议叫Diffle-Hellman密钥交换。
Diffie-Hellman共享密钥的建立 • Diffie-Hellman密钥交换算法是基于有限域中计算离散对数的困难性问题之上的。离散对数问题是指对任意正整数x,计算gx mod P是容易的;但是一般的已知g、Y和P求x使Y= gx mod P是计算上几乎不可能的。 • 当Alice和Bob要进行秘密通信时,他们可以按如下步骤建立共享密钥: • (1)Alice选取大的随机数x,并计算X=gx (mod P),Alice将g、P、X传送给Bob。 • (2)Bob选取大的随机数y,并计算Y = gy(mod P),Bob将Y传送给Alice。 • (3)Alice计算K=Yx(mod P);Bob计算K’=Xy(mod P),易见,K=K’ =gxy(mod P)。Alice和Bob获得了相同的秘密值K。双方以K作为加解密钥以对称密钥算法进行保密通信。
Diffie-Hellman共享密钥的建立 • 监听者可以获得g、P、X、Y,但由于算不出x、y,所以得不到共享密钥K。 • 虽然Diffie-Hellman密钥交换算法十分巧妙,但由于没有认证功能,存在中间人攻击。当Alice和Bob交换数据时,Trudy拦截通信信息,并冒充Alice欺骗Bob,冒充Bob欺骗Alice。其过程如下:
Diffie-Hellman共享密钥的建立 • (1)Alice选取大的随机数x,并计算X=gx (mod P),Alice将g、P、X传送给Bob,但被Trudy拦截。 • (2)Trudy冒充Alice选取大的随机数z,并计算 Z = gz(mod P),Trudy将Z传送给Bob。 • (3)Trudy冒充Bob选取大的随机数z,并计算 Z = gz(mod P),Trudy将Z传送给Alice。 • (4)Bob选取大的随机数y,并计算 Y = gy(mod P),Bob将Y传送给Alice,但被Trudy拦截。 由(1)、(3)Alice与Trudy共享了一个秘密密钥gxz,由(2)、(4)Trudy与Bob共享了一个秘密密钥gyz。
Diffie-Hellman共享密钥的建立 • 站间协议(station-to-station protocol)是一个密钥协商协议,它能够挫败这种中间人攻击,其方法是让A、B分别对消息签名。 • (1)A → B :gx • (2)B → A :gy || Ek(Sb(gy || gx)) • (3)A → B :Ek(Sa(gx || gy))
Diffie-Hellman共享密钥的建立 • 其中建立的会话密钥是k=gxy。站间协议的一个改进版本没有使用加密,建立的会话密钥仍然是k=gxy。 • (1)A → B :gx • (2)B → A :gy || Sb(gy || gx) • (3)A → B :Sa(gx || gy) • 站间协议具有前向保密性(Forward secret)。前向保密性是指长期密钥被攻破后,利用长期密钥建立的会话密钥仍具有保密性。站间协议中A、B的私钥泄露不影响会话密钥的安全。
2.4 公钥加密体制下的认证过程 • 首先假定双方已经知道对方的公开密钥,如交换证书。 • ISO认证的基本步骤如下: • (1) A → B :Ra • (2) B → A :Certb||Rb || Sb(Ra || Rb||B) • 其中Ra、Rb是大的随机数,Certb是B的证书,Sb()表示使用B的私有密钥进行数字签名。如果需要双向认证,需要第三步: • (3) A → B :Certa||Sa(Ra || Rb||A) • 这里Sa()表示使用A的的私有密钥进行数字签名。
公钥加密体制下的DS认证协议 • 现在我们假定双方不知道对方的公开密钥。这时需要一个可信的第三方T保存公开密钥库。Denning-Sacco认证协议如下: • (1)A → T :A || B • (2)T → A :ST(B || KB)|| ST(A || KA) • T把用T的私钥T签名的B的公钥KB发给A。T也把用T的私钥T签名的A自己的公钥KA发给A。 • (3)A → B :EB(SA(K || TA))|| ST(B,KB)|| ST(A,KA)
公钥加密体制下的DS认证协议 • A向B传送随机会话密钥K、时间标记TA(都用A自己私钥签名并用B的公钥加密)和两个签了名的公开密钥。 • B用私钥解密A的消息,然后用A的公钥验证签名。以确信时间标记仍有效。在这里A和B两人都有密钥K,他们能够安全地通信。
公钥加密体制下的DS认证协议 • 但该协议是有缺陷的。在和A一起完成协议后,B能够伪装是A。其步骤是: • (1)B → T :B||C • (2)T → B :ST(C||KC)|| ST(B || KB) • (3)B(A) → C :EC(SA(K || TA))|| ST(C || KC)|| ST(A || KA) • B将以前从A那里接收的会话密钥和时间标记的签名用C的公钥加密,并和A和C的证书一起发给C。C用私钥解密A的消息,然后用A的公钥验证签名。检查并确信时间标记仍有效。C现在认为正在与A交谈,B成功地欺骗了C。在时间标记截止前,B可以欺骗任何人。