网络与信息安全网络与信息安全第十讲第十讲鉴别协议鉴别协议陈钟教授北京大学信息科学技术学院软件研究所--信息安全研究室chen@infosec.pku.edu.cn2008-2009年度北京大学研究生课程2009/04/20NISC-10©cz@PKU讨论议题•密码协议•鉴别协议•鉴别与密钥交换协议•鉴别与交换协议实例设计鉴别交换协议•介绍在设计鉴别协议时特别需要注意的问题,并给出抵抗这些攻击的具体设计策略。•鉴别和密钥交换协议的核心问题有两个:–保密性–时效性•为了防止伪装和防止暴露会话密钥,基本鉴别与会话密码信息必须以保密形式通信。这就要求预先存在保密或公开密钥供实现加密使用。•第二个问题也很重要,因为涉及防止消息重放攻击。鉴别和交换协议•如果用于连接完整性服务的密钥被在线建立,那么事实证明将鉴别和密钥交换功能组合在一个协议中是重要的(鉴别和密钥交换协议)。•最常用的协议,该协议使得通信各方互相鉴别各自的身份,然后交换会话密钥。重放及对策•常见的消息重放攻击形式有:①简单重放:攻击者简单复制一条消息,以后在重新发送它;②可被日志记录的复制品:攻击者可以在一个合法有效的时间窗内重放一个带时间戳的消息;③不能被检测到的复制品:这种情况可能出现,原因是原始信息已经被拦截,无法到达目的地,而只有重放的信息到达目的地。④反向重放,不做修改。向消息发送者重放。当采用传统对称加密方式时,这种攻击是可能的。因为消息发送者不能简单地识别发送的消息和收到的消息在内容上的区别。•对策:①针对同一验证者的重放:非重复值②针对不同验证者的重放:验证者的标识符非重复值的使用A.序列号:计数的策略:对付重放攻击的一种方法是在认证交换中使用一个序数来给每一个消息报文编号。仅当收到的消息序数顺序合法时才接受之。但这种方法的困难是要求双方必须保持上次消息的序号。B.时间戳:A接受一个新消息仅当该消息包含一个时间戳,该时间戳在A看来,是足够接近A所知道的当前时间;这种方法要求不同参与者之间的时钟需要同步C.验证者发送随机值(如询问):不可预测、不重复时间戳•在网络环境中,特别是在分布式网络环境中,时钟同步并不容易做到•一旦时钟同步失败–要么协议不能正常服务,影响可用性(availability),造成拒绝服务(DOS)–要么放大时钟窗口,造成攻击的机会•时间窗大小的选择应根据消息的时效性来确定询问/应答方式(Challenge/Response)•A期望从B获得一个消息–首先发给B一个随机值(challenge)–B收到这个值之后,对它作某种变换,并送回去–A收到B的response,希望包含这个随机值•在有的协议中,这个challenge也称为nonce–可能明文传输,也可能密文传输–这个条件可以是知道某个口令,也可能是其他的事情–变换例子:用密钥加密,说明B知道这个密钥;简单运算,比如增一,说明B知道这个随机值•询问/应答方法不适应非连接性的应用,因为它要求在传输开始之前先有握手的额外开销,这就抵消了无连接通信的主要特点。相互鉴别协议•在理论上,相互鉴别可通过组合两个单向鉴别交换协议来实现。然而,这种组合需要被仔细地考察,因为有可能这样的组合易受窃听重放攻击。•另外,设计协议消息数比相应的单向交换协议的消息数的两倍少得多的相互鉴别交换协议是可能的。•因此,由于安全性和性能的原因,相互鉴别交换协议必须为此目的而特别地进行设计。讨论议题•密码协议•鉴别协议•鉴别与密钥交换协议•鉴别与交换协议实例讨论议题•鉴别与交换协议实例–CHAP–S/Key–双向鉴别–单向鉴别–Kerberos–X.509鉴别服务CHAP(challenge-HandshakeAuthenticationProtocol)•拨号用户鉴别协议,是一种通过PPP链接传送数据,完成对PPP链接的身份鉴别协议。CHAP主要适用于NAS(networkaccessServer)对来自于PSTN或ISDN的电路交换连接、拨入连接或专有连接的身份鉴别•询问握手鉴别协议(CHAP):RFC1994–采用提问/应答方式进行鉴别,通过在PPP链接的双方进行一次三次握手,完成对对方身份的鉴别CHAP示意Challenge=SessionID,ChallengeStringRespond=MD5Hash(SessionID,ChallengeString,UserPassword),UserNameClientClientServerServerSucceed/failedChallengeRespond工作原理-i•CHAP是验证方与被验证方之间的三次握手来验证访问者身份的协议。•验证方周期地验证登录和访问请求,一旦检测到,就生成和发送一个随机数challenge给被验证者。被验证者据此生成一个单向加密的摘要值作为应答(response)传给验证方。验证方根据收到的response来判断用户身份合法性。工作原理-ii•CHAP成功鉴别的前提是验证双方共享同样的秘密值和单向加密(HASH)算法。实际验证中,服务器端在发出随机数的同时,会和客户端一道以共享的秘密值和challenge为因子计算报文摘要,并把二者计算的结果汇总、比较、若相等,则认可该次访问,反之予以拒绝HASH算法HASH算法HASH(A,X)Response=HASH(A,X)Succeed/Failed秘密值ChallengeX秘密值A验证方(server)被验证方(client)CHAP鉴别原理CHAP协议的优点与缺点•优点–协议简单、易于实现–虽为单向鉴别协议,但可以通过在另一方的配置请求,实现对通信实体的双向鉴别–通过不断地改变鉴别标识符和提问消息的值来防止重放(playback)攻击。–利用周期性的提问防止通信双方在长期会话过程中被攻击。•缺点–CHAP鉴别基于共享密钥,给密钥管理带来巨大不便,不适合于大规模用户鉴别–CHAP要求提供明文的密钥形式。讨论议题•鉴别与交换协议实例–CHAP–S/Key–双向鉴别–单向鉴别–Kerberos–X.509鉴别服务S/Key协议•背景•避免以下的攻击•搭线监听网络上传输的口令及用户ID,并在适当的时候利用这些信息,登录计算机阅读或修改用户信息•S/KEY由贝尔实验室于1994年公开发布并在RF1760中定义,是基于MD4、MD5的一次性口令生成机制•S/keyprotocol主要用于防止重放攻击S/KEY验证程序•其安全性依赖于一个单向函数。为建立这样的系统A输入一随机数R,计算机计算f(R),f(f(R)),f(f(f(R))),…,共计算100次,计算得到的数为x1,x2,x3,…x100,A打印出这样的表,随身携带,计算机将x101存在A的名字旁边。•第一次登录,键入x100,•以后依次键入xi,计算机计算f(xi),并将它与xi+1比较。S/KEY协议组成•三个组成部分−客户端程序:为端用户提供登录程序,并在得到服务器质询值时,获取用户私钥,并调用口令计算器形成本次鉴别口令,然后发送给服务器程序−口令计算器:负责产生本次口令−服务器程序:验证用户口令•整个过程中,用户的私钥不会暴露在网络上客户端S/KEY服务器口令计算器端用户主机服务器1456723S/KEY三个组成部分关系①用户登录②客户端向服务器发出登录请求③服务器向客户端发出S/KEY质询④客户端要求用户键入私钥⑤私钥与服务器发出的质询问被送入计算器⑥计算器产生本次口令⑦客户端将口令传给服务器,服务器对之进行验证S/KEY的口令生成•准备S/KEY协议要求用户的私钥不少于8字节(64bit),它把种子和私钥粘接,进行MD4/MD5散列,并将输出分两部分异或并产生64bit输出.•生成根据登录服务器的提示,多次使用安全散列函数,产生一个64-bit最后的输出•输出取64-bit一次性口令并按照可读的形式显示它。(根据包含211单词的字典,对应六个英文单词)讨论议题•鉴别与交换协议实例–CHAP–S/Key–双向鉴别–单向鉴别–Kerberos–X.509鉴别服务双向鉴别•传统加密方法–Needham/SchroederProtocol[1978]–DenningProtocol[1982]–KEHN92•公钥加密方法–一个基于临时值握手协议:WOO92a–一个基于临时值握手协议:WOO92bNeedham/SchroederProtocol[1978]传统加密方法1、A→KDC:IDA||IDB||N12、KDC→A:EKa[Ks||IDB||N1||EKb[Ks||IDA]]3、A→B:EKb[Ks||IDA]4、B→A:EKs[N2]5、A→B:EKs[f(N2)]保密密钥Ka和Kb分别是A和KDC、B和KDC之间共享的密钥。本协议的目的就是要安全地分发一个会话密钥Ks给A和B。A在第2步安全地得到了一个新的会话密钥,第3步只能由B解密、并理解。第4步表明B已知道Ks了。第5步表明B相信A知道Ks并且消息不是伪造的。第4,5步目的是为了防止某种类型的重放攻击。特别是,如果敌方能够在第3步捕获该消息,并重放之,这将在某种程度上干扰破坏B方的运行操作。Needham/SchroederProtocol[1978]上述方法尽管有第4,5步的握手,但仍然有漏洞。假定攻击方C已经掌握A和B之间通信的一个老的会话密钥。C可以在第3步冒充A利用老的会话密钥欺骗B。除非B记住所有以前使用的与A通信的会话密钥,否则B无法判断这是一个重放攻击。如果C可以中途阻止第4步的握手信息,则可以冒充A在第5步响应。从这一点起,C就可以向B发送伪造的消息而对B来说认为是用认证的会话密钥与A进行的正常通信。DenningProtocol[1982]改进:1、A→KDC:IDA||IDB2、KDC→A:EKa[Ks||IDB||T||EKb[Ks||IDA||T]]3、A→B:EKb[Ks||IDA||T]4、B→A:EKs[N1]5、A→B:EKs[f(N1)]|Clock-T|Δt1+Δt2其中:Δt1是KDC时钟与本地时钟(A或B)之间差异的估计值;Δt2是预期的网络延迟时间。DenningProtocol比Needham/SchroederProtocol在安全性方面增强了一步。然而,又提出新的问题:即必须依靠各时钟均可通过网络同步。如果发送者的时钟比接收者的时钟要快,攻击者就可以从发送者窃听消息,并在以后当时间戳对接收者来说成为当前时重放给接收者。这种重放将会得到意想不到的后果。(称为抑制重放攻击)。一种克服抑制重放攻击的方法是强制各方定期检查自己的时钟是否与KDC的时钟同步。另一种避免同步开销的方法是采用临时数握手协议。KEHN921、A→B:IDA||Na2、B→KDC:IDB||Nb||EKb[IDA||Na||Tb]3、KDC→A:EKa[IDB||Na||Ks||Tb]||EKb[IDA||Ks||Tb]||Nb4、A→B:EKb[IDA||Ks||Tb]||EKs[Nb]公钥加密方法:一个使用时间戳的方法是:1、A→AS:IDA||IDB2、AS→A:EKRas[IDA||KUa||T]||EKRas[IDB||KUb||T]3、A→B:EKRas[IDA||KUa||T]||EKRas[IDB||KUb||T]||EKUb[EKRa[Ks||T]]一个基于临时值握手协议:WOO92a1、A→KDC:IDA||IDB2、KDC→A:EKRauth[IDB||KUb]3、A→B:EKUb[Na||IDA]4、B→KDC:IDB||IDA||EKUauth[Na]5、KDC→B:EKRauth[IDA||KUa]||EKUb[EKRauth[Na||Ks||IDB]]6、B→A:EKUa[EKRauth[Na||Ks||IDB]||Nb]7、A→B:EKs[Nb]一个基于临时值握手协议:WOO92b1、A→KDC:IDA||IDB2、KDC→A:EKRauth[IDB||KUb]3、A→B:EKUb[Na||IDA]4、B→KDC