网络与信息安全
Information and Network Security
(数字签名与认证协议)
数字签名与认证协议
Digital Signature And
Authentication Protocols
数字签名
• 传统签名的基本特点:
–能与被签的文件在物理上不可分割
–签名者不能否认自己的签名
–签名不能被伪造
–容易被验证
• 数字签名是传统签名的数字化,基本要求:
–能与所签文件“绑定”
–签名者不能否认自己的签名
–签名不能被伪造
–容易被验证
• 公钥算法的一个最重要的发展是数字签名。
数字签名
• Message authentication用以保护双方之间的
数据交换不被第三方侵犯;但它并不保证双
方自身的相互欺骗。假定A发送一个认证的
信息给B,双方之间的争议可能有多种形式:
– B伪造一个不同的消息,但声称是从A收到的。
– A可以否认发过该消息,B无法证明A确实发了
该消息。
• 例如:改大金额;股票交易指令亏损后抵赖。
数字签名应具有的性质
• 必须能够验证作者及其签名的日期时间;
• 必须能够认证签名时刻的内容;
• 签名必须能够由第三方验证,以解决争
议;
因此,数字签名功能包含了认证的功能。
数字签名的设计要求
• 签名必须是依赖于被签名信息的一个位串模
板;
• 签名必须使用某些对发送者是唯一的信息,
以防止双方的伪造与否认;
• 必须相对容易生成该数字签名;
• 必须相对容易识别和验证该数字签名;
• 伪造该数字签名在计算复杂性意义上具有不
可行性,既包括对一个已有的数字签名构造
新的消息,也包括对一个给定消息伪造一个
数字签名;
• 在存储器中保存一个数字签名副本是现实可
行的。
两类数字签名函数
• 直接数字签名
• 仲裁数字签名
直接数字签名(DDS)
(1) AB: EKRa[M]
提供了认证与签名:
• 只有A具有KRa进行加密;
• 传输中无法被篡改;
• 任何第三方可以用KUa 验证签名
(1’) AB: EKUb [EKRa(M)]
提供了保密(KUb)、认证与签名(KRa):
数字签名方案
• 先对消息M作一个摘要H(M)
• 然后发送方用自己的私钥对H(M)进行加密,
得到签名EKRa(H(M))
• 连同消息M一起,发送出去
• B收到复合的消息之后,把签名提取出来
• B用A的公钥对签名解密得到M’
• B计算所收到消息的摘要H’=H(M’)
• 如果H’=H(M’),则消息确实是A产生的
• 问题
–公钥的管理,公钥与身份的对应关系
–签名的有效性,私钥丢失?
直接数字签名
(2) 提供认证及数字签名
AB: M||EKRa[H(M)]
-- H(M) 受到密码算法的保护;
-- 只有 A 能够生成 EKRa[H(M)]
(2’) 提供保密性、认证和数字签名。
AB: EK[M||EKRa[H(M)]]
H
|| M
KRa
M
D
KUa
H
compare
EKRa [ H(M)]
数字签名方案一
A
B
E
RAS 的方案
M
H
|| M
H(M)
E
KRa
D
KUa
M
H(M)
H
compare
数字签名方案二
A
B
H
||E
KRa
M
D
KUa
M
H
compare
EKRa(M)
EKRa(M)
H[EKRa(M)]
数字签名方案二*
A
B
直接数字签名的缺点
• 验证模式依赖于发送方的保密密钥;
–发送方要抵赖发送某一消息时,可能会声称其
私有密钥丢失或被窃,从而他人伪造了他的签
名。
–通常需要采用与私有密钥安全性相关的行政管
理控制手段来制止或至少是削弱这种情况,但
威胁在某种程度上依然存在。
–改进的方式例如可以要求被签名的信息包含一
个时间戳(日期与时间),并要求将已暴露的
密钥报告给一个授权中心。
• A的某些私有密钥确实在时间T被窃取,敌方可
以伪造A的签名及早于或等于时间T的时间戳。
仲裁数字签名
• 引入仲裁者。
–通常的做法是所有从发送方A到接收方B的签
名消息首先送到仲裁者S,S将消息及其签名
进行一系列测试,以检查其来源和内容,然
后将消息加上日期并与已被仲裁者验证通过
的指示一起发给B。
• 仲裁者在这一类签名模式中扮演敏感和关键的
角色。
–所有的参与者必须极大地相信这一仲裁机制
工作正常。(trusted system)
(a) 单密钥加密方式,仲裁者可以看见消息
(1) AS:M||EKAS[IDA|| H(M)]
(2) SB:EKSB[IDA|| M || EKAS[IDA|| H(M)] || T]
A与S之间共享密钥KAS,B与S之间共享密钥KSB;
A:准备消息M,计算其散列码H(M),用A的标识符IDA 和散列值构成
签名,并将消息及签名经KAS加密后发送给S;
S:解密签名,用H(M)验证消息M,然后将IDA,M,签名,和时间戳
一起经KSB加密后发送给B;
B:解密S发来的信息,并可将M和签名保存起来。
解决纠纷:
B:向S发送 EKSB[IDA|| M || EKAS[IDA|| H(M)]]
S:用KSB恢复IDA,M,和签名( EKAS[IDA|| H(M)]),然后用
KAS解密签名并验证散列码
仲裁数字签名技术
注意:
在这种模式下B不能直接验证A的签名,B认为S的消息已认证,只
因为它来自S。因此,双方都需要高度相信S:
• A必须信任S没有暴露KAS,并且没有生成错误的签名
EKAS[IDA|| H(M)]
• B必须信任S仅当散列值正确并且签名确实是A产生的情况下才
发送的 EKSB[IDA|| M || EKAS[IDA|| H(M)] || T]
• 双方都必须信任S处理争议是公正的。
只要S遵循上述要求,则A相信没有人可以伪造其签名;B相信A不
能否认其签名。
上述情况还隐含着S可以看到A给B的所有信息,因而所有的窃听者
也能看到。
(b) 单密钥加密方式,仲裁者不可以看见消息
(1) AS: IDA || EKAB[M]||EKAS[IDA|| H(EKAB[M])]
(2) SB:EKSB[IDA||EKAB[M] || EKAS[IDA|| H(EKAB[M])] || T]
在这种情况下,A与B之间共享密钥KAB,
A:将标识符IDA ,密文 EKAB[M],以及对IDA和密文消息的散列码用
KAS加密后形成签名发送给S。
S:解密签名,用散列码验证消息,这时S只能验证消息的密文而不
能读取其内容。然后S将来自A的所有信息加上时间戳并用KSB加
密后发送给B。
(a)和(b)共同存在一个共性问题:
S和发送方联手可以否认签名的信息;
S和接收方联手可以伪造发送方的签名;
(c) 双密钥加密方式,仲裁者不可以看见消息
(1) AS: IDA || EKRA[IDA || EKUB (EKRA[M])]
(2) SB: EKRS[IDA|| EKUB[EKRA[M]] || T]
A:对消息M双重加密:首先用A的私有密钥KRA,然后用B的公开
密钥KUB。形成一个签名的、保密的消息。然后将该信息以及
A的标识符一起用KRA签名后与IDA 一起发送给S。这种内部、
双重加密的消息对S以及对除B以外的其它人都是安全的。
S:检查A的公开/私有密钥对是否仍然有效,是,则认证消息。并
将包含IDA、双重加密的消息和时间戳构成的 消息用KRS签名后
发送给B。
本模式比上述两个模式具有以下好处:
1、在通信之前各方之间无须共享任何信息,从而避免了联手作弊;
2、即使KRA 暴露,只要KRS 未暴露,不会有错误标定日期的消息
被发送;
3、从A发送给B的消息的内容对S和任何其他人是保密的。
认证协议认证协议
安全层次
安全的密码算法
安全协议
网络安全
系统安全
应用安全
回顾:信息安全的需求
• 保密性Confidentiality
• 完整性Integrity
–系统完整性
–数据完整性
• 可用性Availability
• 真实性 authenticity
–认证
• 消息认证
• 身份认证:验证真实身份和所声称身份相符的过程
• ……
认证协议
• 基于对称密码算法的认证方案
–是否需要密钥分发中心(KDC)?
–对于协议的攻击手法
–认证的对象
• 消息发送方
• 消息本身
• 基于公钥密码算法的认证方案
–公钥和身份的绑定
基于对称密码算法的认证
• 消息认证
– MAC码或者HMAC码
– 前提:存在共享密钥
• 密钥管理中心
• 或者用一个密钥交换协议
• 身份认证
– 依据
• 所知:口令、密钥,等
• 所有:身份证、智能卡,等
• 物理标识:指纹、笔迹、虹膜、DNA,等
– 基于口令
• 证明是否知道口令
• 口令的强度
• 双方认证 (mutual authentication)和单向认证 (one-way authentication)
– 目的:分发密钥、签名有效性,……
认证方式
• 两方通讯
– 一方发起通讯,另一方应答
– 双向(mutual authentication)和单向认证(one-way
authentication)
• 有第三方介入的认证
– 第三方为可信任方,KDC
• 在线和离线
• 其他情形
– 多方认证
– 跨域认证
– 委托认证模型、信任模型
– ……
认证协议:设计一个协议(一)
• 假设A和B要进行通讯,A和B有一个共享的密钥Kab,如何
利用这个密钥进行认证,并且商定一个会话密钥Ks
1 AB: (IDA||N1)
2 BA: EKab[Ks,IDB,f(N1),N2)]
3 AB: EKs[f(N2)]
这里的f函数为某个确定的运算,比如f(x)=x+1
A
Kab
B
1、我是A
2、告诉你Ks,
以后就用它,
别让别人知道
3、 好的,我用它
试试,可我怎
么知道Ks
4、 如果你知道Kab,
那么你就知道Ks,
我就知道你是A
认证协议:设计一个协议(二)
• 假设A和B要进行通讯,A和B与KDC各有一个共享密钥Ka和Kb, 如何
利用这两个密钥进行认证,并且商定一个会话密钥Ks
AKDC: (IDA||IDB||N1)
KDCA: EKa[Ks||IDB||N1||EKb(Ks,IDA)]
AB: EKb(Ks,IDA)||EKs(M)
A
Kb
B
我是A,我
想和B通讯
KDC
Ka 我把必要的
信息告诉你
我把消息给你,如果
你是B,你就可以解开
会话密钥Ks,
由A送给B的认
证信息
认证协议中的常用技术(一)
• 时间戳
– A收到一个消息,根据消息中的时间戳信息,
判断消息的有效性
• 如果消息的时间戳与A所知道的当前时间足够接近
–这种方法要求不同参与者之间的时钟需要同步
• 在网络环境中,特别是在分布式网络环境中,时钟同
步并不容易做到
• 一旦时钟同步失败
– 要么协议不能正常服务,影响可用性(availability),造成
拒绝服务(DOS)
– 要么放大时钟窗口,造成攻击的机会
–时间窗大小的选择应根据消息的时效性来确定
认证协议中的常见技术(二)
• 询问/应答方式(Challenge/Response)
– A期望从B获得一个条件
• 首先发给B一个随机值(challenge)
• B收到这个值之后,对它作某种变换,得到
response,并送回去
• A收到这个response,可以验证B符合这个条件
– 在有的协议中,这个challenge也称为nonce
• 可能明文传输,也可能密文传输
– 这个条件可以是知道某个口令,也可能是其
他的事情
• 变换例子:用密钥加密,说明B知道这个密钥;
简单运算,比如增一,说明B知道这个随机值
– 常用于交互式的认证协议中
双方认证协议
• 最常用的认证协议,该协议使得通信各
方互相认证鉴别各自的身份,然后交换
会话密钥。
• 基于认证的密钥交换核心问题有两个:
–保密性
–时效性
最坏情况下可能导致敌人暴露会话密钥,或成功地冒充其他人;至少也
可以干扰系统的正常运行,处理不好将导致系统瘫痪。
常见的消息重放攻击形式有:
1、简单重放:攻击者简单复制一条消息,以后在重新发送它;
2、可被日志记录的复制品:攻击者可以在一个合法有效的时间
窗内重放一个带时间戳的消息;
3、不能被检测到的复制品:这种情况可能出现,原因是原始信
息已经被拦截,无法到达目的地,而只有重放的信息到达目
的地。
4、反向重放,不做修改。向消息发送者重放。当采用传统对称
加密方式时,这种攻击是可能的。因为消息发送者不能简单
地识别发送的消息和收到的消息在内容上的区别。
消息重放攻击:
对付重放攻击的一种方法是
在认证交换中使用一个序数来给每一
个消息报文编号。仅当到的消息序数顺
序合法时才接受之。但这种方法的困难
是要求双方必须保持上次消息的序号。
1、时间戳:A接受一个新消息仅当该消息包含一个时间戳,该时间戳
在A看来,是足够接近A所知道的当前时间;这种方法要求不同参
与者之间的时钟需要同步。
2、盘问/应答方式。(Challenge/Response)A期望从B获得一个新消息
,首先发给B一个临时值(challenge),并要求后续从B收到的消息(
response)包含正确的这个临时值。
对付重放攻击更为一般的方法方法是:
时间戳方法似乎不能用于面向连接的应用。
(1) 某些协议需要在各种处理器时钟中维持同步。该协议必须既要容
错以对付网络出错,又要安全以对付重放攻击。
(2) 由于某一方的时钟机制故障可能导致临时失去同步,这将增大攻
击成功的机会。
(3) 由于变化的和不可预见的网络延迟的本性,不能期望分布式时钟
保持精确的同步。因此,任何基于时间戳的过程必须采用时间窗
的方式来处理:一方面时间窗应足够大以包容网络延迟,另一方
面时间窗应足够小以最大限度地减小遭受攻击的机会。
盘问/应答方法不适应非连接性的应用。
因为它要求在传输开始之前
先有握手的额外开销,这就抵消了无连接通信的主要特点。
安全的时间服务器用以实现时钟同步可能是最好的方法。
1、A KDC:IDA||IDB||N1
2、KDC A:EKak[Ks||IDB||N1||EKbk[Ks||IDA]]
3、A B: EKbk[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
方的运行操作。
一个使用KDC进行密钥分配的方案——
Needham/Schroeder Protocol
上述方法尽管有第4,5步的握手,但仍然有漏洞。
假定攻击方C已经掌握A和B之间通信的一个老的会话密钥。
C可以在第3步冒充A利用老的会话密钥欺骗B。除非B记住所有
以前使用的与A通信的会话密钥,否则B无法判断这是一个重放
攻击。如果C可以中途阻止第4步的握手信息,则可以冒充A在
第5步响应。从这一点起,C就可以向B发送伪造的消息而对B来
说认为是用认证的会话密钥与A进行的正常通信。
(作业:有何安全漏洞?)
Denning Protocol (对Needham/Schroeder protocol 的改进):
1、A KDC:IDA||IDB
2、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 是预期的网络延迟时间。
Denning Protocol 比 Needham/Schroeder Protocol在安全性方面增强了
一步。然而,又提出新的问题:即必须依靠各时钟均可通过网络同
步。
如果发送者的时钟比接收者的时钟要快,攻击者就可以从发送者窃听
消息,并在以后当时间戳对接收者来说成为当前时重放给接收者。这
种重放将会得到意想不到的后果。(称为抑制重放攻击)。
一种克服抑制重放攻击的方法是强制各方定期检查自己的时钟是否与
KDC的时钟同步。
另一种避免同步开销的方法是采用临时数握手协议.
1、A B: IDA||Na
2、B KDC: IDB||Nb || EKb[IDA || Na || Tb]
3、KDC A: EKa[IDB||Na ||Ks|| Tb ] || EKb[IDA || Ks || Tb] || Nb
4、A B: EKb[IDA || Ks || Tb] || EKs[ Nb ]
进一步的改进( Kehn92):
A B
KDC
4
23
1
关于Kehn92协议
• EKb[IDA || Ks || Tb]相当于一个ticket
• 如果A要再次访问B,可以不再通过KDC
– A → B:EKb[IDA || Ks || Tb] || Na’
– B检查ticket是否在有效时间,若是,则
B → A:Nb||EKs[Na]
– A → B:EKs[Nb’]
A B
KDC
2
1
3
1、A AS:IDA||IDB
2、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]]
其中:AS为鉴别服务器
公钥加密方法:
一个使用时间戳的方法是:
1、A KDC:IDA||IDB
2、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]
一个基于临时值握手协议(WOO92a)
1、A KDC:IDA||IDB
2、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||IDA||IDB]]
6、B A: EKUa[EKRauth[ Na ||Ks ||IDA || IDB]||Nb]
7、 A B: EKs[Nb]
作业:WOO92b对WOO92a做了改动,达到了什么目的?
一个基于临时值握手协议(WOO92b):
使用常规加密方法:
1、A KDC:IDA||IDB|| N1
2、KDC A:EKa[Ks || IDB || N1 || EKb [Ks || IDA]]
3、A B: EKb [Ks || IDA] || EKs[M]
公钥加密方法:
1、 A B: EKUb[Ks ]|| EKs[M]
1、 A B: M || EKRa[H(M)]
1、 A B: EKUb [ M || EKRa[H(M)]]
1、 A B: M || EKRa[H(M)] || EKRas [ T || IDA ||KUa ]
数字签名标准(DSS)
美国国家标准技术研究所(NIST)已
经公布了联邦信息处理标准 (FIPS PUB 186
,即所谓的数字签名标准(DSS, Digital
Signature Standard)。DSS利用了安全散
列算法(SHA)并提出了一种新的数字 签
名技术,即数字签名算法。DSS最早发表于
1991年,并根据公众对该体制安全性担心的
反应在1993年进行了修改。1996年又进行了
更进一步的小修改。
DSS方法
• RSA算法即能用于加密和签名,又能
用于密钥交换。(RSA签名)
• DSS使用的算法只能提供唯数字 签名
功能。不象RSA方法,它不能用做加
密或者密钥交换。然而,它是一种公
开密钥技术。
H
|| M
KRa
M
D
KUa
H
compare
EKRa [ H(M)]
RAS数字签名方案
A
B
E
RAS 的方案
DSS方案
H
|| MM
compare
A
B
Sig
K
KUG KRa
s
r
H Ver
KUG KUa
KUG --------通信伙伴共有的一组参数, 既全局公钥
Windows采用的认证方案
• Lan Manager认证(称为LM协议)
– 早期版本
• NTLM v1 认证协议
– NT SP3之前的版本
• NTLM v2 认证协议
– NT SP4开始支持
• Kerberos v5认证协议
– Windows 2000引进
安全性
加强
LanMan认证方案
• 可以用于共享级认证
• Windows 9x/NT都支持
• 由IBM开发
LanMan的口令加密方案
• 从口令——〉hash值
– 口令变成大写
– 把口令变成14个字符,或者截断、或者补空字符
– 这14个字符分成两个7字符
– 用7个字符输出一个64位的hash值
– 把两个64位结果拼起来,得到128位值
– 服务器保存该128位值,作为“hashed password”
• 缺陷
– 如果口令长度在8-13位之间,则后面的7字符先破解,对前7
个字符的破解可以提供某些信息
• 建议:使用7位或者14位口令
NT的口令加密方案
• 从口令变成hash值
– 把口令变成Unicode(统一字符编码标准)编码
– 使用MD4散列算法
– 得到128位散列值
• 一种更好的方法是在口令上添加一些附加的信息,这样可
以增加破解的难度
– Hash之前增加附加信息
– UNIX的crypt使用了附加信息
NT口令破解的一个测试结果
• 在一台高端PC机(4个CPU)上强行破解
– 小时内破解字母-数字口令
– 45小时破解字母-数字-部分符号口令
– 480小时破解字母-数字-全部符号口令
忘记了(NT) Administrator的密码
插:UNIX中crypt口令加密方案
• crypt()是一个口令加密函数,它基于DES算法。我们可以认为这是一
个单向加密操作
• 函数原型:
char *crypt(const char *key, const char *salt);
*salt是两个字符,每个字符可从[a-zA-Z0-9./]中选出来
• 算法
– UNIX标准算法使用DES加密算法,用key对一个常量进行加密,获得一
个13字节的密文编码输出,其中包括salt的两个字符[from Red Hat
Linux ]
• Salt的作用
– 同样的口令产生不同的密文
– 增加了穷举空间——?
• 建议使用更为安全的MD5算法
NTLM认证过程(from MSDN,微软的开发商网络)
1. 用户在客户机上,提供域名、用户名和口令。系统计算口令的hash
值,然后把口令丢掉
2. 客户把用户名以明文方式发送给服务器
3. 服务器产生一个128位随机数(challenge或者nonce),发送给客户
4. 客户用口令的hash值作为密钥,加密随机数,并把结果送回给服务
器。这是应答(response)
5. 服务器把以下信息送给域控制器(DC):
用户名、challenge和response
6. 域控制器利用用户名从SAM(Security Account Manager)数据库得到
用户口令的hash值,并用此值加密challenge
7. 域控制器比较它自己算出来的challenge密文和客户算出来的
challenge密文。如果相等的话,认证成功
NT Workstation认证协议
1. C->S: ReqChal, Cc
S->C: Cs
2. C、S计算会话密钥 Ks =
E(PW[9..15],E(PW[0..6],Add(Cc,Cs)))
3. C: Rc = Cred(Ks,Cc)
C->S Authenticate, Rc
4. S: assert(Rc == Cred(Ks,Cc))
Rs = Cred(Ks,Cs),
S->C Rs
C: assert(Rs == Cred(Ks,Cs))
From NT Domain Authentication
身份认证
应用示例
身份认证实例身份认证实例----
KerberosKerberos
引言
• Greek Kerberos: 古希腊神话故事中一种三
个头的狗,还有一个蛇形尾巴。是地狱之
门的守护者。
• Modern Kerberos: 意指有三个组成部分的
网络之门的保卫者。“三头”包括:
–认证(authentication)
–帐目清算(accounting)
–审计(audit)
(认证、数据完整性、保密性)
!
.
Kerberos认证协议
• 历史
– 80年代中期
–是MIT(.Massachusettes Institute of
Technology
– (美国)麻省理工学院)的Athena 工程的产物(
part of Project Athena at MIT)
–版本
• 前三个版本仅用于内部
• 第四版得到了广泛的应用
• 第五版于1989年开始设计
– 1993年确定
– 标准Kerberos
• 解决的问题
–认证、数据完整性、保密性
问题
• 在一个开放的分布式网络环境中,用户通
过工作站访问服务器上提供的服务。
–服务器应能够限制非授权用户的访问并能够
认证对服务的请求。
–工作站不能够被网络服务所信任其能够正确
地认定用户,即工作站存在三种威胁。
• 一个工作站上一个用户可能冒充另一个用户操作;
• 一个用户可能改变一个工作站的网络地址,从而冒
充另一台工作站工作;
• 一个用户可能窃听他人的信息交换,并用重放攻击
获得对一个服务器的访问权或中断服务器的运行。
Kerberos要解决的问题
• 所有上述问题可以归结为一个非授权用户能
够获得其无权访问的服务或数据。
• 不是为每一个服务器构造一个身份认证协议,
Kerberos提供一个中心认证服务器,提供用
户到服务器和服务器到用户的认证服务。
• Kerberos采用传统加密算法(不用公钥加密)。
• Kerberos Version4和Version5 。
信息系统资源保护的动机
• 单用户单机系统:用户资源和文件受到物理
上的安全保护;
• 多用户分时系统:操作系统提供基于用户标
识的访问控制策略,并用logon过程来标识
用户。
• Client/Server网络结构:由一组工作站和一
组分布式服务器或中心式服务器组成。
Client/Server网络结构三种可能的安全方案
相信每一个单独的客户工作站可以保证对
其用户的识别,并依赖于每一个服务器强
制实施一个基于用户标识的安全策略。
要求客户端系统将它们自己向服务器作身
份认证,但相信客户端系统负责对其用户
的识别。
要求每一个用户对每一个服务证明其标识
身份,同样要求服务器向客户端证明其标
识身份。
Kerberos的解决方案
• 在一个分布式的client/server体系机构中采
用一个或多个Kerberos服务器提供一个认
证服务。
Kerberos系统应满足的要求
• 安全:网络窃听者不能假冒其它用户获得必
要信息以;Kerberos应足够强壮以至于潜在
的敌人无法找到它的弱点连接。
• 可靠:Kerberos应高度可靠,并且应借助于
一 个分布式服务器体系结构,使得一个系统
能够备份另一个系统。
• 透明:理想情况下,用户除了要求输入口令
以外应感觉不到认证的发生。
• 可伸缩:系统应能够支持大数量的客户和服
务器。
Kerberos协议中一些概念
• Principal(安全个体)
– 被认证的个体,有一个名字(name)和口令(password)
• KDC(Key distribution center)
– 是一个网络服务,提供ticket和临时的会话密钥
• Ticket(票据)
– 一个记录,客户可以用它来向服务器证明自己的身份,其
中包括客户的标识、会话密钥、时间戳,以及其他一些信
息。Ticket 中的大多数信息都被加密,密钥为服务器的密
钥
• Authenticator(认证)
– 一个记录,其中包含一些最近产生的信息,产生这些信息
需要用到客户和服务器之间共享的会话密钥
• Credentials(证书)
– 一个ticket加上一个秘密的会话密钥
Kerberos Version4
• 引入一个信任的第三方认证服务,它使用
的协议建立在Needham & Schroeder协议
的基础上。
• 采用DES,精心设计协议,提供认证服务。
引入身份认证服务器(AS),它知道所有用户的口令并将它们存储在一
个中央数据库中。AS与每一个服务器共有一个唯一的保密密钥。这些密钥
已经用物理方式或更安全的方式发出去了。
考虑以下假定的对话:
(1) C AS: IDC || PC || IDV
(2) AS C: Ticket
(3) C V : IDC || Ticket
Ticket = EKV[IDC || ADC || IDV]
其中:C : client
AS : Authentication Server
V : server
IDC : identifier of user on C
IDV : identifier of V
PC : password of user on C
ADC : network address of C
KV : AS与V共有的保密密钥
C V
AS
(1) (2)
(3)
一个简单的认证对话
在Tiket中:
IDC ——指明消息由C发出
ADC ——防止用IDC 的名称从另一个工作站转发message(3)
IDV ——V可以验证加密的正确性
更安全的认证对话
• 两个主要问题
–希望用户输入口令的次数最少。(每天用多
次或访问不同的服务器)
–口令以明文传送会被窃听。
• 解决办法
–可重复使用的票据 (ticket reusable)
–票据授予服务器 (ticket-granting
server)(TGS)
每个用户登录会话一次(Once per user logon session)
(1) C AS : IDC || IDtgs
(2) AS C : EKC[Tickettgs] TGS: 票据授予服务器
(3) (KC 由用户口令生成的密钥,当回应到达C 时客户机提
(4) 示C 输入口令,这样就不用传输明文口令)
每个服务类型一次(Once per type of service)
(3) C TGS : IDC || IDv || Tickettgs
(4) TGS C : TicketV
(5) 每个服务对话一次(Once per service session)
(5) C V : IDC || TicketV
Tickettgs = EKtgs[IDC||ADC||IDtgs||TS1||Lifetime1]
TicketV = EKV[IDC||ADC||IDV||TS2||Lifetime2]
KV : AS与V共有的保密密钥 Ktgs : AS与TGS共有的保密密钥
C V
AS
(1) (2) (3)
TGS
(4)
(5)
Kerberos
改进后的假想对话:
Kerberos V4 Authentication Dialogue
• 两个问题
–与ticket-granting ticket相关的Lifetime问
题;
–需要服务器向客户进行认证;
• 解决方案
–会话密钥 (session key)
(a) Authentication Service Exchange: to obtain ticket-granting ticket
(1) C AS : IDC || IDtgs || TS1
(2) AS C : EKC[Kc,tgs || IDtgs || TS2 || Lifetime2 || Tickettgs]
Tickettgs = EKtgs [Kc,tgs || IDC || ADC || IDtgs || TS2 || Lifetime2]
(b) Ticket-granting Service Exchange: to obtain service-granting ticket
(3) C TGS : IDV || Tickettgs || Authenticatorc
(4) TGS C : EKc,tgs[Kc,v || IDV || TS4 || Ticketv]
Tickettgs = EKtgs[Kc,togs|| IDC|| ADC|| IDtgs || TS2 || Lifetime2]
Ticketv = EKV[Kc,v||IDC||ADC|| IDv||TS4||Lifetime4]
Authenticatorc = EKc,tgs[IDc||ADc||TS3]
(c) Client/Server Authentication Exchange: To obtain service
(5) C V : Ticketv || Authenticatorc
(6) V C : EKc,v[TS5+1] ( for mutual authentication)
Ticketv = EKV[Kc,v||IDc||ADc||IDv||TS4||Lifetime4]
Authenticatorc = EKc,v[IDc||ADc||TS5]
Kerberos Version 4 消息交换小结
Summary of Kerberos Version 4 Message Exchanges
(a) Authentication Service Exchange
Message(1) Client 请求 ticket-granting ticket
IDC : 告诉AS本client端的用户标识;
IDtgs : 告诉AS用户请求访问TGS;
TS1 : 让AS验证client端的时钟是与AS的时钟同步的;
Message(2) AS返回ticket-granting ticket
EKC :基于用户口令的加密,使得AS和client可以验证口令,
并保护Message(2)。
Kc,tgs : session key的副本,由AS产生,client可用于在AS与client
之间信息的安全交换,而不必共用一个永久的key。
IDtgs : 确认这个ticket是为TGS制作的。
TS2 : 告诉client该ticket签发的时间。
Lifetime2: 告诉client该ticket的有效期;
Tickettgs: client用来访问TGS的ticket。
Rationale for the Elements of the Kerberos Version 4 Protocol
(b) Ticket-granting Service Exchange
Message(3) client 请求service-granting ticket
IDv: 告诉TGS用户要访问服务器V;
Tickettgs : 向TGS证实该用户已被AS认证;
Authenticatorc:由client生成,用于验证ticket;
Message(4) TGS返回service-granting ticket
EKc,tgs : 仅由C和TGS共享的密钥;用以保护Message(4);
Kc,tgs: session key的副本,由TGS生成,供client和server之间
信息的安全交换,而无须共用一个永久密钥。
IDv : 确认该ticket是为server V签发的;
TS4 : 告诉client该ticket签发的时间;
TicketV : client用以访问服务器V的ticket;
Tickettgs: 可重用,从而用户不必重新输入口令;
EKtgs :ticket用只有AS和TGS才知道的密钥加密,以预防篡改;
Kc,tgs : TGS可用的session key副本,用于解密authenticator,从而
认证ticket;
IDc : 指明该ticket的正确主人;
Kerberos处理过程概要
C
V
AS
(1) (2) (3)
TGS
(4)
(5)
Kerberos
(6)
Kerberos中ticket示意图
Kerberos管辖范围与多重服务
• 一个完整的Kerberos环境包括一个Kerberos服务器,一组工
作站,和一组应用服务器,满足下列要求:
– Kerberos服务器必须在其数据库中拥有所有参与
用户的ID(UID)和口令散列(hash)表。所有用户
均在Kerberos服务器上注册。
– Kerberos服务器必须与每一个服务器之间共享一
个保密密钥。所有服务器均在Kerberos服务器上
注册。
• 这样的环境被视为一个领域(realm)。
–每一个辖区的Kerberos 服务器与其它辖区内的
Kerberos服务器之间共享一个保密密钥。两个
Kerberos服务器互相注册。
请求另一领域的服务
(1) C AS : IDC || IDtgs || TS1
(2) AS C : EKC[Kc,tgs || IDtgs || TS2 || Lifetime2 || Tickettgs]
(3) C TGS: IDtgsrem || Tickettgs || Authenticatorc
(4) TGS C: EKc,tgs[Kc,tgsrem || IDtgsrem || TS4 || Tickettgsrem]
(5) C TGSrem: IDvrem || Tickettgsrem || Authenticatorc
(6) TGS C: EKc,tgsrem[Kc,vrem || IDvrem || TSb || Ticketvrem]
(7) C Vrem: Ticketvrem || Authenticatorc
C
AS TGS TGSrem
Vrem
(1) (2)(3)
(4) (5)
(6)
(7)
Kerberos Version 5
• 改进version 4 的环境缺陷
–加密系统依赖性
– Internet协议依赖性
–消息字节次序
– Ticket的时效性
–身份验证转发(Authentication
forwarding)
–领域间的身份验证(Inter-realm
authentication)
Kerberos Version 5
• 改进Version 4 的技术缺陷
–双重加密(Double encryption)
–传播加密块链加密(PCBC encryption)
–会话密钥(Session key)
–口令攻击(Password attacks)
Kerberos参考资料
(Kerberos References)
Kerberos协议模型的分析
• 可以证明Kerberos协议模型功能的正确性
• 发现Kerberos协议模型依赖于安全的时间
服务
功能特性分析
• 可信第三方
–所需的共享密钥分配和管理变得十分简单
– AS担负认证工作,减轻应用服务器的负担
–安全相关数据的集中管理和保护,从而使
攻击者的入侵很难成功
• Ticket
– AS的认证结果和会话密钥安全地传送给应
用服务器
–在生存期内可重用,减少认证开销,提高
方便性
功能特性分析
• Ticket发放服务
–降低用户口令的使用频度,更好地保护口
令
–减轻AS的负担,提高认证系统的效率
• 时间戳
–防止对Ticket和Authenticator的重放攻击
• 以共享秘密(密钥)为认证依据
局限性分析
• 重放攻击
– ticket-granting ticket具有较长的生存期,
很容易被重放
–对于有准备的攻击者,5分钟的生存期内也
可能进行重放攻击
–保存所有存活鉴别符并通过比较检测重放
攻击的办法难以实现
–与其他攻击形式结合的重放攻击更容易成
功
局限性分析
• 时间依赖性
–实现较好的时钟同步往往是很困难的
–攻击者误导系统时间并进行重放攻击有可
乘之机
–基于安全的时间服务?
• 猜测口令攻击
–脆弱口令容易受到攻击
–协议模型未对口令提供额外的保护,猜测
复杂度为O(K)
局限性分析
• 域间鉴别
–多跳域间鉴别涉及很多因素,实现过程复
杂不明确
• 篡改登录程序
–认证系统本身的程序完整性很难保证
• 密钥存储问题
–口令及会话密钥无法安全存放于典型的计
算机系统中
MZ协议模型
• Kerberos协议模型的改进模型
–消除认证协议对安全时间服务的依赖性
–更好地防止重放攻击
–提高口令猜测的复杂度
–简化域间认证
–使用混合加密算法
–使用nonce
结束结束