f52fd75be176a586f57a44a30eed3326.ppt
- Количество слайдов: 93
认证与证书
典型的认证应用 n 1.Kerberos认证 n Kerberos认证服务是由麻省理 学院的Project Athena针对分布式环境的开放式系统开发的认证机制。 Kerberos提供了一种在开放式网络环境下(无保护) 进行身份认证的方法,它使网络上的用户可以相互证 明自己的身份。 它已被开放软件基金会(OSF)的分布式计算环境( DCE),以及许多网络操作系统供应商所采用。 n n 常用的有两个版本:第 4版和第 5版。其中版本 5更正 了版本 4中的一些安全缺陷。
Kerberos认证 n Athena的计算环境由大量的匿名 作站和相对较少的独立 服务器组成。服务器提供例如文件存储、打印、邮件等服务, 作站主要用于交互和计算。我们希望服务器能够限定仅能 被授权用户访问,能够验证服务的请求。在此环境中,存在 如下3种威胁: n (1)用户可以访问特定的 作站并伪装成该 作站用户。 n (2)用户可以改动 作站的网络地址伪装成其它 作站。 n (3)用户可以根据交换窃取消息,并使用重放攻击来进入 服务器。
Kerberos认证 n 在这样的环境下,Kerberos认证身份不依赖主机 操作系统的认证、不信任主机地址、不要求网络 中的主机保持物理上的安全。在整个网络中,除 了Kerberos服务器外,其他都是危险区域,任何 人都可以在网络上读取、修改、插入数据。 n 解决的问题: 认证、数据完整性、保密性
作为一种认证协议 n 特点 q q 基于口令的认证协议 利用对称密码技术建立起来的认证协议 可伸缩性——可适用于分布式网络环境 环境特点 n n User-to-server authentication 密钥存储方案
认证协议:设计一个协议(一) n 假设A和B要进行通讯,A和B有一个共享的密 钥Kab, 如何利用这个密钥进行认证,并且商 定一个会话密钥Ks 告诉你Ks, 以后就用它, 别让别人知道 我是A A B Kab 好的,我用它 试试,可我怎 么知道你是B呢 如果你知道Kab, 那么你就知道Ks, 我就知道你是A
认证协议:设计一个协议(二) n 假设A和B要进行通讯,A和B与KDC各有一个共享密钥Ka和Kb, 如 何利用这两个密钥进行认证,并且商定一个会话密钥Ks KDC 我是A,我 想和B通讯 A Ka 我把必要的 信息告诉你 我把消息给你,如果 你是B, 你就可以解开 A KDC: (IDA||IDB) KDC A: EKa[Ks||IDB||EKb(Ks, IDA)] A B: EKb(Ks, IDA)||EKs(M) 会话密钥Ks, 由A送给B的 认证信息 Kb B
针对认证协议的一些常见攻击手段 和相应对策 n 中间人攻击(MITM, man in the middle) A u u u E B 如果通讯双方没有任何先决条件,那么这种攻击 总是存在的 A和B的协商过程很容易受到这一类攻击 对策: u 增加A和B之间的先决知识
常见攻击和对策(二) n 重放攻击(replay attacks) B A E u u 偷听者可以记录下当前的通讯流量,以后在适当的时候 重发给通讯的某一方,达到欺骗的目的 对策: u 保证通讯的唯一性 u 增加时间戳
常见攻击和对策(三) n 字典攻击 q q q 只要能够获得口令的密文形式,就可以实施字典攻 击 在线和离线 字典攻击的有效性 n n 判断一个口令是有效的 对策 q q 用户和管理员:选择好的口令 协议设计:对口令的使用过程中,不要泄露口令的 信息 在密文中增加口令以外的额外信息
常见攻击和对策(四) n 已知明文攻击 q 在许多认证协议中,一方会选择一个随机数,并且明文传输这个随机 数,另一方加密这个随机数,并送回来——Challenge/Response, 所以偷听者可以获得已知明文/密文对 q 对策: n n n 避免传输明文/密文对 增加已知明文攻击的难度 选择明文攻击 q 在认证协议中,如果随机数的选择没有任何规则,那么中间人或者假 冒方就有可能选择随机数,从而实施选择明文攻击 q 对策 n 随机数的选择限制
认证协议中的常用技术(一) n 时间戳 q A收到一个消息,根据消息中的时间戳信息,判断消 息的有效性 n q 如果消息的时间戳与A所知道的当前时间足够接近 这种方法要求不同参与者之间的时钟需要同步 n n 在网络环境中,特别是在分布式网络环境中,时钟同步并 不容易做到 一旦时钟同步失败 q q q 要么协议不能正常服务,影响可用性(availability),造成拒绝 服务(DOS) 要么放大时钟窗口,造成攻击的机会 时间窗大小的选择应根据消息的时效性来确定
认证协议中的常见技术(二) n 询问/应答方式(Challenge/Response) q A期望从B获得一个条件 n n n q 在有的协议中,这个challenge也称为nonce n q 可能明文传输,也可能密文传输 这个条件可以是知道某个口令,也可能是其他的事情 n q 首先发给B一个随机值(challenge) B收到这个值之后,对它作某种变换,得到response,并送回 去 A收到这个response,可以验证B符合这个条件 变换例子:用密钥加密,说明B知道这个密钥; 简单运算,比如增一,说明B知道这个随机值 常用于交互式的认证协议中
例 n 假设:我去邮件服务器申请邮件,服务程序必须能验证我是 我所申明的那人 n 笨办法:服务器让我输入口令 (那么每个服务器必须知道用户的口令,如果网络有成千个 用户,那么每个服务器就要知道成千条口令,如果想改变口 令,就必须联系所有服务器,通知它们修改口令等) 解决:每个用户知道自己的口令 每个服务器也知道自己的口令 引入一个认证服务器——AS(Authentication Server),它 知道所有的口令,包括用户和服务器,并将口令保存在一个 单独的中央数据库中, 且AS和每台服务器共享惟一的密钥。
简单的认证对话 n (1)用户向AS请求认证,必须告诉AS使用哪个服务 n (2)AS请用户证明身份,用户将密码送给AS n (3)AS将密码与数据库中的密码想比较,如果相等,则通过验证 n (注:AS不能将邮件服务的密码给用户,否则下次用户想再次使用邮 件服务时,就可以绕过AS了) n (4)AS给用户一张票,票里有用户名,并且用邮件服务器的密码加 密 n (5)用户向邮件服务器提出请求,并用票来证明自己的身份 n (6)服务器用自己的密码来解开票,如果能正确解密,并得到用户 的名字,将这个名字与随票一起送上的用户名进行比较,相同则通过 验证。
问题: 当服务解密票据时,如何知道它是被正确地解密的呢? n 解决: 应该在票据里包含有服务的名字 当解开票后,通过找到自己的名字来判断解密的正确性。 n 票=(用户名+服务器名)用服务器的口令加密
问题: 假设AS在将用户的票传给用户过程中,被截取了,或复制 了,然后伪造成用户,并用窃取的票向邮件服务器提出请 求,则服务被盗用了。 n 解决: 票=用户名+用户地址+服务器名 因为伪造的 作站用户名相同,而网络地址不匹配。 n
n n n (1) C AS: IDc || Pc || IDs (2) AS C: Ticket (3) C S: IDc || Ticket=Eks[IDc || ADc || IDs ] 其中: C=客户机 AS=认证服务器 S=服务器 IDc=C上用户的标识符 IDs=S的标识符 Pc=C上用户的口令 ADc=C的网络地址 Ks=AS和S共享的加密密钥 ||=连接
更加安全的认证对话 问题: (1)用户每次想要得到服务都要取一张新票 (2)当用户每次向AS认证时,密码以明文形式在网络 上传输,如果口令被窃取,就可以伪造此用户来使用 任何服务了。 n 解决的目标: (1)用户口令只输入一次 (2)口令不能在网络上进行明文传输 n 解决的方法: 引入票据授权TGS(Ticket-Granting Server)服务器 n
n (1)用户与AS通讯,用户向AS证明自己的 身份,并取得一张票据授权票,现在用户想从 邮件服务器上取邮件,但没有邮件服务器的票, 所以用户要用“票据授权”票去取邮件服务的票。 n 不需要使用口令去取新的服务票,票据授权票 可以重复使用。
n (2)用户取票据授权时,用户不将口令送给 AS,只是送用户名。 AS用用户名去查找用户口令,然后将票据授 权票的包用用户的口令去加密。 用户用自己的口令去解开包,就可以得到票据 授权的票了。
n 问题: n 假设用户已在用一个不安全的 作站,在用户 登录各种服务后,无意中在退出时留下了这些 票,假设被人登录了 作站,并发现了这些票, 就可以骗取服务,并将票拷走,永远使用它们。
n 解决:写一个程序,在用户退出时将票销毁。 n 但销毁不是一个好的办法: 因为当用户登录到 作站时,有人打开一个监 视网络并拷贝别人服务票据的程序并拷贝一份 用户的票,当用户退出并离开,将它的 作站 地址调整为用户刚登录时的地址,就可以欺骗 服务器了。(因为它已有了用户名,用户地址, 票据)
n 解决:票不能永远合法,给每张票一个有效期 n 票=用户名+用户地址+服务名+有效期+时 间戳
n n n n (1)C AS: IDc || IDtgs (2)AS C: Ekc[Tickettgs] (3)C TGS: IDc || IDv || Tickettgs (4)TGS C: Tickets (5)C S: IDc || Tickets Tickettgs=Ektgs[IDc || ADc || IDtgs || TS 1 || Lifetime 1] Tickets=Eks[IDc || ADc || TS 2 || Litetime 2]
n 如果S能解开票, 则说明票来自TGS, 因为只有 TGS和S共享KS, 可以防止有人伪造假票。 n 检查票是否在有效期内, 如果过期, 则服务拒绝, 可以阻止使用旧票或偷来的票来骗取服务。 n 测试票的用户名和地址是否匹配请求者的用户 名和地址, 如果测试失败, 则说明使用了别有 票。
n 问题: n (1)如果名字和地址匹配, 证明了什么, 什么也没 有, 因为票可以被偷走, 用户名和网络地址都可以 被改变, 票也可以在有效期内被盗用(如果票的有 效期为8个小时,那么用户在使用了2个小时后 提前退出了,那6个小时就有可能被盗用——有 效期内被盗用)。
n (2)服务不能确定票的发送者是不是合法用户, 服务 之所以无法判断是因为它没有与用户共享一个秘密。 n (3)票据授予票据的生存期, 如果短, 则需要重复输入 口令, 如果长, 则对手可能重放攻击。 n (4)要求服务器向用户认证自己, 伪造的服务器将会 充当真的服务器, 捕获来自用户的信息, 而拒绝提供真 正的服务。
n 解决: n Kerberos认证
Kerberos认证 n 为了减轻每个服务器的负担,Kerberos把身份认证的 任务集中在身份认证服务器上。 n Kerberos的认证服务任务被分配到两个相对独立的服 务器:认证服务器AS(Authenticator Server)和票 据许可服务器TGS(Ticket Granting Server),它们 同时连接并维护一个中央数据库存放用户口令、标识 等重要信息。 n 整个Kerberos系统由四部分组成:AS,TGS,Client, Server。
Kerberos认证 n Kerberos使用两类凭证:票据(ticket)和鉴 别码(authenticator)。该两种凭证均使用私 有密钥加密,但加密的密钥不同。
n Ticket用来安全的在认证服务器和用户请求的 服务之间传递用户的身份,同时也传递附加信 息用来保证使用ticket的用户必须是Ticket中指 定的用户。Ticket一旦生成,在生存时间指定 的时间内可以被client多次使用来申请同一个 server的服务。
n Authenticator则提供信息与Ticket中的信息进 行比较,一起保证发出Ticket的用户就是 Ticket中指定的用户。Authenticator只能在一 次服务请求中使用,每当client向server申请服 务时,必须重新生成Authenticator。
Kerberos认证 Kerberos的记号 C n 这里我们 首先介绍 Kerberos 认证版本 4 的内容, 在叙述中 我们使用 以下记号: 客户 S 服务器 ADc 客户的网络地址 Lifetime 票据的生存期 TS 时间戳 Kx x的秘密密钥 Kx, y x与y的会话密钥 Ex[m] 以x的秘密密钥加密的m Ticket x x的票据 Authenticator x x的鉴别码
Kerberos版本 4认证过程 n 用户c请求服务s的整个Kerberos认证协议过程 如下。 n(1)C请求票据许可票据 n(2)AS发放票据许可票据 和[C,TGS]间会话密钥 n(3)C请求服务器票据 n(4)TGS发放服务器票据 和[C,S]间会话密钥 n(5)C请求服务 n(6)S提供服务器认证信息
Kerberos认证框图 以上是Kerberos V 4过程 的简要描述,详细过程分为 以下3个阶段,共 6步。
Kerberos版本 4认证过程 n (1)C请求票据许可票据 n 用户得到票据许可票据的 作在登录 作站时 进行。登录时用户被要求输入用户名,输入后 系统会向认证服务器AS以明文方式发送一条 包含用户和TGS服务两者名字的请求。 n C n IDC是 作站的标识,其中的时间戳是用来防 回放攻击的。 AS: IDC || IDtgs || TS 1
Kerberos版本 4认证过程 n (2)AS发放票据许可票据和会话密钥 n 认证服务器检查用户是否有效,如果有效,则随机产 生一个用户用来和TGS通信的会话密钥Kc, tgs,然后 创建一个票据许可票据Tickettgs,票据许可票据中包 含有用户名,TGS服务名,用户地址,当前时间,有 效时间,还有刚才创建的会话密钥。票据许可票据使 用Ktgs加密。认证服务器向用户发送票据许可票据和 会话密钥Kc, tgs,发送的消息用只有用户和认证服务 器知道的Kc来加密,Kc的值基于用户的密码。
Kerberos版本 4认证过程 n AS C: EKc[Kc, tgs || IDtgs || TS 2 || Lifetime 2 || Tickettgs] n 这里: n Tickettgs=EKtgs[Kc,tgs || IDc || ADc || IDtgs || TS 2 || Lifetime 2] n Lifetime与Ticket相关联,如果太短需要重 复申请,太长会增加重放攻击的机会。
AS发送的报文
Kerberos版本 4认证过程 n (3)C请求服务器票据 n 用户 作站收到认证服务器回应后,就会要求用 户输入密码,将密码转化为DES密钥Kc,然后将 认证服务器发回的信息解开,将票据和会话密钥 保存用于以后的通信,为了安全性用户密码和密 钥Kc则被删掉。
Kerberos版本 4认证过程 n n n 当用户的登录时间超过了票据的有效时间时,用户的请求就会失败, 这时系统会要求用户重新申请票据Tickettgs。用户可以查看自己所 拥有的令牌的当前状态。 一个票据只能申请一个特定的服务,所以用户必须为每一个服务s申 请新的票据,用户可以从TGS处得到票据Tickets。 用户首先向TGS发出申请服务器票据的请求。请求信息中包含s的名 字,上一步中得到的请求TGS服务的加密票据Tickettgs,还有用会 话密钥加密过的Authenticator信息。 C TGS: IDs || Tickettgs || Authenticatorc Tickettgs=EKtgs[Kc, tgs || IDc || ADc || IDtgs || TS 2 || Lifetime 2] Authenticatorc=Ekc, tgs[IDc || ADc || TS 3]
用户向服务器申请服务的报文
Kerberos版本 4认证过程 n (4)TGS发放服务器票据和会话密钥 n TGS得到请求后,用私有密钥Ktgs和会话密钥Kc,tgs解开请求得 到Tickettgs和Authenticatorc的内容,根据两者的信息鉴定用户身 份是否有效。如果有效,TGS生成用于c和s之间通信的会话密钥 Kc, s,并生成用于c申请得到s服务的票据Tickets,其中包含c和s的 名字,c的网络地址,当前时间,有效时间和刚才产生的会话密钥。 票据Tickets的有效时间是票据Tickettgs剩余的有效时间和所申请的 服务缺省有效时间中最短的时间。 n Tgs最后将加密后的票据Tickets和会话密钥Kc, s用用户和TGS之间 的会话密钥Kc, tgs加密后发送给用户。用户c得到回答后,用Kc, tgs 解密,得到所请求的票据和会话密钥。 n TGS n 这里:Tickets=EKs[Kc, s || IDc || ADc || IDs || TS 4 || Lifetime 4] C: Ekc, tgs[Kc, s || IDs || TS 4 || Tickets]
Kerberos版本 4认证过程 n n n (5)C请求服务 用户申请服务s的 作与(3)相似,只不过申请的服务由 TGS变为s。 用户首先向s发送包含票据Tickets和Authenticatorc的请求, s收到请求后将其分别解密,比较得到的用户名,网络地 址,时间等信息,判断请求是否有效。用户和服务程序之 间的时钟必须同步在几分钟的时间段内,当请求的时间与 系统当前时间相差太远时,认为请求是无效的,用来防止 重放攻击。 C S: Tickets || Authenticatorc 这里:Tickets=EKs[Kc, s || IDc || ADc || IDs || TS 4 || Lifetime 4] Authenticatorc=Ekc, s[IDc || ADc || TS 5]
Kerberos版本 4认证过程 n (6)S提供服务器认证信息 n 当C也想验证S的身份时,S将收到的时间戳加 1,并用会 话密钥Kc,s加密后发送给用户,用户收到回答后,用会 话密钥解密来确定S的身份。 n S n 通过上面六步之后,用户C和服务S互相验证了彼此的身 份,并且拥有只有C和S两者知道的会话密钥Kc, s,以后 的通信都可以通过会话密钥得到保护。 C: Ekc, s[TS 5+1]
Kerberos版本 5 n Kerberos版本 5对Kerberos只做了两处改变: n (1)因为意识到验证器用少于五分钟的有效期 不足以防止攻击者进行重演。 Kerberos版本 5 中,验证器真正只能用一次,因为服务器用“重 演缓冲区”保存了最近一次提交的验证器的信息。 如果攻击者试图截取验证器并重用它,“重演缓 冲区”会发现验证器已经被提交了。
n (2)改变了Kerberos送给用户的票的时候, 票不再用用户的口令加密。 因为它已经用票据授权服务的口令加过密了。 票据授权服务的票被用来获取其它票的时候, 它直接就被传输了。因此票不需要再用用户的 口令加密一次。
Kerberos版本 5认证过程 n n n n Kerberos版本 5认证过程: 在下面所述的认证过程中,我们用以下的记号: Times-时间标志:表明票据的开始使用时间、截止使 用时间等; Nonce-随机数:用于保证信息总是最新的和防止重放 攻击; Realm-在大型网络中,可能有多个Kerberos形成分级 Kerberos体制,Realm表示用户C所属的领域; Options-用户请求的包含在票据中的特殊标志。 ADx-X的网络地址。
Kerberos版本 5认证过程 n n n 用户C从AS获得访问TGS的票据Ttgs (1)C → AS:IDC‖IDtgs‖Times‖Options‖Nonce 1‖Realm. C (2)AS → C: IDC‖Realm. C‖Tickettgs‖EKC(KC, tgs‖Times‖Nonce 1‖Re almtgs‖IDtgs) 其中: Tickettgs=EKtgs(KC, tgs‖IDC‖ADC‖Times‖Realm. C‖Flag s) Ticket中的Flags字段支持更多的功能。 用户C从TGS获得访问Server的票据Tickets
n n (3)C → TGS: Options‖IDs‖Times‖Nonce 2‖Tickettgs‖Authentic ator. C (4)TGS → C: Realm. C‖IDC‖Ticket. S‖EKC, tgs(KC, S‖Times‖Non ce 2‖Realm. S‖IDS) 其中: Authenticator. C=EKC, tgs(IDC‖Realm. C‖TS 1) Ticket. S=EKS(Flags‖KC, S‖Realm. C‖IDC‖ADC‖Ti mes)
Kerberos版本 5认证过程 n n 用户C将Ticket. S提交给Server, 获得服务 (5)C → S:Options‖Ticket. S‖Authenticator. C (6)S → C:EKC, S(TS 2‖Subkey‖Seq) 其中: Authenticator. C=EKC, S(IDC‖Realm. C‖TS 2‖Subk ey‖Seq) Subkey和Seq均为可选项,Subkey指定此次会话 的密钥,若不指定Subkey则会话密钥为KC, S; Seq为本次会话指定的起始序列号,以防止重传 攻击。
Kerberos版本 5认证过程 n 消息(1)、(3)、(5)在两个版本中是基本相同的。 第 5版删除了v 4中消息(2)、(4)的票据双重加密; 增加了多重地址;用开始可结束时间替代有效 时间;并在鉴别码里增加了包括一个附加密钥 的选项; n V 4只支持DES(数据加密标准)算法,V 5采用独 立的加密模块,可用其它加密算法替换;
n V 4版里,为防止重放攻击,nonce由时间戳实现,这就 带来了时间同步问题。即使利用网络时间协议(Network Time Protocol)或国际标准时间(Coordinated universaltime)能在一定程度上解决时间同步问题,但网 络上关于时间的协议并不安全。 n V 5 版允许nonce可以是一个数字序列,但要求它唯一。 由于服务器无法保证不同用户的nonce不冲突,偶然的 冲突可能将合法用户的服务器申请当作重放攻击而拒之 门外。
Kerberos协议的优势 n n n Kerberos协议具有以下的一些优势: (1)与授权机制相结合; (2)实现了一次性签放的机制,并且签放的 票据都有一个有效期; (3)支持双向的身份认证; (4)支持分布式网络环境下的域间认证。
Kerberos协议的安全分析 n 在Kerberos认证机制中,也存在一些安全稳患。Kerberos机 制的实现要求一个时钟基本同步的环境,这样需要引入时间 同步机制,并且该机制也需要考虑安全性,否则攻击者可以 通过调节某主机的时间实施重放攻击(Replay Attack)。在 Kerberos系统中,Kerberos服务器假想共享密钥是完全保密 的,如果一个入侵者获得了用户的密钥,他就可以假装成合 法用户。攻击者还可以采用离线方式攻击用户口令。如果用 户口令被破获,系统将是不安全的。又如,如果系统的login 程序被替换,则用户的口令会被窃取。
Kerberos区域与多区域的 Kerberos的一个完整服 务范围由一个Kerberos服务 器、多个客户机和多个服务 器构成,并且满足以下两个 要求: ① Kerberos服务器必须在它
Kerberos区域与多区域的 Kerberos 满足以上两个要求的 Kerberos的一个完整服务范 围称为Kerberos的一个区域。 网络中隶属于不同行政机构 的客户和服务器则构成不同 的区域,一个区域的用户如
Kerberos区域与多区域的Kerberos服务还要求在两个区域间,第 1个区域 的Kerberos服务器信任第 2区域的Kerberos服务器对本区域中 用户的认证,而且第 2区域的服务器也应信任第 1区域的 Kerberos服务器。 下图是两个区域的Kerberos服务示意图,其中区域A中的 用户希望得到区域B中服务器的服务。为此,用户通过自己 的客户机首先向本区域的TGS申请一个访问远程TGS(即区 域B中的TGS)的票据许可票据,然后用这个票据许可票据 向远程TGS申请获得服务器服务的服务许可票据。具体描述 如下:
两个区域的Kerberos服务 ① 客户向本地AS申请访问本区域 TGS的票据 ② AS向客户发放访问本区域TGS的 票据 ③ 客户向本地TGS申请访问远程TGS 的票据许可票据 ④ TGS向客户发放访问远程TGS的 票据许可票据 ⑤ 客户向远程TGS申请获得服务器服 务的服务许可票据 ⑥ 远程TGS向客户发放服务许可票据 ⑦ 客户申请远程服务器的服务
Kerberos区域与多区域的Kerberos ① 客户向本地AS申请访问本区域TGS的票据: C→AS:IDC‖IDtgs‖TS 1。 ② AS向客户发放访问本区域TGS的票据: AS→C:EKC[Kc, tgs‖IDtgs‖TS 2‖lifetime 2‖Tickettgs]。 ③ 客户向本地TGS申请访问远程TGS的票据许可票据: C→TGS:IDtgsrem‖Tickettgs‖Authenticatorc。 ④ TGS向客户发放访问远程TGS的票据许可票据: TGS→C:EKc, tgs[Kc, tgsrem‖IDtgsrem‖TS 4‖Tickettgsrem]。
Kerberos区域与多区域的 Kerberos ⑤ 客户向远程TGS申请获得 服务器服务的服务许可票据: C→TGSrem:IDvrem‖Tickettgsrem‖Authenticatorc。 ⑥ 远程TGS向客户发放服务 许可票据: TGS→C: EKc, tgsrem[Kc, vrem‖IDvrem‖TS 6‖Ticketvrem]。 ⑦ 客户申请远程服务器的服 务:
Kerberos区域与多区域的 Kerberos 对有很多个区域的情况 来说,以上方案的扩充性不 好,因为如果有N个区域, 则必须有N(N-2)/2次密钥交 换才可使每个Kerberos区域
认证业务与证书
X. 509 认证业务 如果每个想要为某些资料做签名的人,都到 CA那里申请各种不同类型的证书,那么管理 各种不同的证书格式很快就成为一个问题。 n 为了解决这个问题,ITU (国际电信同盟)设计 并批准了一个专门针对证书格式的标准。 该标准被称为X. 509,现在已经广泛应用于 Internet上,自从1988年首次被标准化以来, 它已经经历了三个版本。 n
X. 509 认证业务 X. 509作为定义目录业务的X. 500系列的一个组成 部分,是由ITU建议的,这里所说的目录实际上是维护 用户信息数据库的服务器或分布式服务器集合,用户信 息包括用户名到网络地址的映射和用户的其他属性。X. 509定义了X. 500目录向用户提供认证业务的一个框架, 目录的作用是存放用户的公钥证书。 X. 509还定义了基于公钥证书的认证协议。 由于X. 509中定义的证书结构和认证协议已被广泛 应用于S/MIME、IPSec、SSL/TLS以及SET等诸多应用 过程,因此X. 509已成为一个重要的标准。
X. 509 认证业务 X. 509的基础是公钥密码 体制和数字签字,但其中未 特别指明使用哪种密码体制( 建议使用RSA),也未特别指 明数字签字中使用哪种杂凑
证书 1. 证书的格式 用户的公钥证书是X. 509 的核心问题,证书由某个可 信的证书发放机构CA建立, 并由CA或用户自己将其放入
X. 509的证书格式和证书吊 销列表
X. 509 证书格式 ① 版本号 默认值为第 1版。如果证书中需有发放者惟一识 别符或主体惟一识别符,则版本号一定是 2,如果有一个或 多个扩充项,则版本号为 3。 ② 顺序号 为一整数,由同一CA发放的每一证书的顺序号 是惟一的。 ③ 签字算法识别符 ④ 发放者名称 ⑤ 有效期 据项。 签署证书所用的算法及相应的参数。 指建立和签署证书的CA名称。 包括证书有效期的起始时间和终止时间两个数
X. 509 证书格式 ⑥ 主体名称 指证书所属用户的名称,即这一证书用来证 明持有秘密钥用户的相应公开钥。 ⑦ 主体的公开钥信息 包括主体的公开钥、使用这一公开 钥的算法的标识符及相应的参数。 ⑧ 发放者惟一识别符 这一数据项是可选用的,当发放者 (CA)的名称被重新用于其他实体时,则用这一识别符来 惟一标识发放者。 ⑨ 主体惟一识别符 这一数据项也是可选用的,当主体的 名称被重新用于其他实体时,则用这一识别符来惟一地标 识主体。 ⑩ 扩充域 其中包括一个或多个扩充的数据项,仅在第 3版 中使用。
X. 509 证书格式 签字 CA用自己的秘密钥 对上述域的杂凑值签字的结 果,此外,这个域还包括签 字算法标识符。 X. 509中使用以下表示法 来定义证书:
n 例
X. 509 证书获取 2. 证书的获取 CA为用户产生的证书应有以 下特性: ① 其他任一用户只要得到 CA的公开钥,就能由此得到 CA为该用户签署的公开钥。 ② 除CA以外,任何其他人
X. 509 证书获取 如果所有用户都由同一CA为自己签署证书,则这一CA 就必须取得所有用户的信任。用户证书除了能放在目录中 以供他人访问外,还可以由用户直接发给其他用户。用户B 得到用户A的证书后,可相信用A的公开钥加密的消息不会 被他人获悉,还相信用A的秘密钥签署的消息是不可伪造的。 如果用户数量极多,则仅一个CA负责为用户签署证书 就有点不现实,因为每一用户都必须以绝对安全(指完整 性和真实性)的方式得到CA的公开钥,以验证CA签署的证 书。因此在用户数目极多的情况下,应有多个CA,每一CA 仅为一部分用户签署证书。
X. 509 证书获取 设用户A已从证书发放机构X 1处获取了公钥证书,用户B 已从X 2处获取了证书。如果A不知X 2的公开钥,他虽然能读 取B的证书,但却无法验证X 2的签字,因此B的证书对A来说 是没有用处的。然而,如果两个CA X 1和X 2彼此间已经安全 地交换了公开钥,则A可通过以下过程获取B的公开钥: ① A从目录中获取由X 1签署的X 2的证书,因A知道X 1的公开 钥,所以能验证X 2的证书,并从中得到X 2的公开钥。 ② A再从目录中获取由X 2签署的B的证书,并由X 2的公开钥 对此加以验证,然后从中得到B的公开钥。
X. 509 证书获取 以上过程中,A是通过一 个证书链来获取B的公开钥, 证书链可表示为 X 1《X 2》X 2《B》 类似地,B能通过相反的 证书链获取A的公开钥,表 示为X 2《X 1》X 1《A》。
X. 509 证书获取 此时任意两个相邻的 CA Xi和Xi+1已彼此间为对方 建立了证书,对每一CA来说, 由其他CA为这一CA建立的 所有证书都应存放于目录中,
X. 509 证书获取 下图 是X. 509的CA层次结构 的一个例子,其中的内部结 点表示CA,叶结点表示用户。 用户A可从目录中得到相应 的证书以建立到B的以下证 书链: X《W》W《V》V《Y》Y《
X. 509的层次结构
X. 509 证书吊销 3. 证书的吊销 每一证书都有一有效期,然而有些证书还未到截止日期 就会被发放该证书的CA吊销,这是由于用户的秘密钥有可 能已被泄露,或者该用户不再由该CA来认证,或者CA为该 用户签署证书的秘密钥有可能已泄露。为此每一CA还必须 维护一个证书吊销列表CRL(certificate revocation list),其中存 放所有未到期而被提前吊销的证书,包括该CA发放给用户 和发放给其他CA的证书。CRL还必须经该CA签字,然后存 放于目录以供他人查询。
X. 509 证书吊销 CRL中的数据域包括发放者CA的名称、建立CRL的日期、 计划公布下一CRL的日期,以及每一被吊销的证书数据域, 而被吊销的证书数据域包括该证书的顺序号和被吊销的日 期。因为对一个CA来说,他发放的每一证书的顺序号是惟 一的,所以可用顺序号来识别每一证书。 每一用户收到他人消息中的证书时,都必须通过目录检 查这一证书是否已被吊销。为避免搜索目录引起的延迟以 及由此而增加的费用,用户自己也可维护一个有效证书和 被吊销证书的局部缓存区。
X. 509认证 n X. 509是个重要的标准,除了定义证书结 构外,它还定义了基于使用公开密钥证书的可 选认证协议。该协议基于公开密钥加密体制, 每个用户拥有一对密钥:公开密钥和秘密密钥。 按照双方交换认证信息的不同,可以分为单向 认证、双向认证和三向认证三种不同的方案。
一路单向认证、二路双向认证和三路双向认证
X. 509的认证过程
x. 509 一路单向认证 n (1)一路单向认证 n A → B:A||Sa(Ta||Ra||B||Eb(Ya)) n 这里Sa()是A的签名,Eb()是使用B的公开密钥进行的加密,Eb(Ks)是 可选项。A 、B是A、B的标识。Yx是用户x的数据。 n Ra临时值。A生成不会重复的数字Ra,Ra用来检测重放攻击并且也 用来防止伪造。Ta是一个时戳。Ta包括一个或者两个以下数据:标 志产生的时间和有效时间。 n B取得A的公钥,并验证A的证书的有效性。使用A的公钥验证签名, 并验证数据的完整性。验证在A发送过来的信息中,指明的接收用户 是不是B。验证发送过来的时戳是不是当前时间。作为可选的步骤, 可以验证Ra有没有重复。
n n n 证实了下列内容: (1)用户A的身份和消息是由A产生的 (2)消息是供B使用的。 (3)消息的完整性和原始性 (这个消息没有发送多次等)
x. 509 二路双向认证 n n (2)二路双向认证 A → B:A||Sa(Ta||Ra||B||Eb(Ya)) B → A:Sb(Tb||Rb||A||Ra||Ea(Yb)) Eb(Kab)、Ea(Kba)是可选项。双向认证不仅 实现了B认证A,也实现了A认证B。
双向认证是在单向认证 的基础上,B再向A作出应答, 以证明: B的身份、应答消息 是由B产生的;应答的意欲 接收者是A;应答消息是完
n n n n (1)用户A的身份和消息是由A产生的 (2)消息是供B使用的。 (3)消息的完整性和原始性 (这个消息没有发送多次等) 增加以下认证内容 (4)B的身份和应答消息是由B产生的 (5)消息是供A使用的 (6)应答消息的完整性的原始性
x. 509 三路双向认证 n n (3)三路双向认证 A → B:A||Sa(Ta||Ra||B||Eb(Ya)) B → A:Sb(Tb||Rb||A||Ra||Ea(Yb)) A → B:Sa(Rb ||B)
在上述双向认证完成后,A 再对从B发来的一次性随机 数签字后发往B,即构成第 三向认证。三向认证的目的 是双方将收到的对方发来的
x. 509 认证协议的攻击 n n n 攻击者对B重放消息A||Sa(Ta||Ra||B||Eb(Ya)), 由于B不对时戳进行验证,B不会发现是旧的 消息 B选取新的随机数Rb,发送消息 Sb(Tb||Rb||A||Ra||Ea(Yb)),攻击者截获该消 息,并利用B的公钥获得Rb。攻击者为了获得 Sa(Rb),他给A发送消息让A开始对攻击者进 行认证。认证结束的时候,攻击者获得A发来 的Sa(Rb)。 攻击者利用获得的Sa(Rb)冒充A成功。
f52fd75be176a586f57a44a30eed3326.ppt