潘爱民,北京大学计算机研究所 http://www.icst.pku.edu.cn/InfoSecCourse 网络与信息安全 安全基础 (二) 潘爱民,北京大学计算机研究所 http://www.icst.pku.edu.cn/InfoSecCourse
内容 Kerberos协议 Kerberos中ticket的flag Kerberos实现 IPSec简介 MIT Release Win2k Kerberos IPSec简介
Kerberos认证协议 历史 解决的问题 80年代中期 是MIT的Athena工程的产物 版本 认证、数据完整性、保密性 前三个版本仅用于内部 第四版得到了广泛的应用 第五版于1989年开始设计 RFC 1510, 1993年确定 标准Kerberos 解决的问题 认证、数据完整性、保密性
作为一种认证协议 特点 基于口令的认证协议 利用对称密码技术建立起来的认证协议 可伸缩性——可适用于分布式网络环境 环境特点 User-to-server authentication 密钥存储方案
Kerberos协议中一些概念 Principal(安全个体) KDC(Key distribution center) Ticket 被认证的个体,有一个名字(name)和口令(password) KDC(Key distribution center) 是一个网络服务,提供ticket和临时的会话密钥 Ticket 一个记录,客户可以用它来向服务器证明自己的身份,其中包括客户的标识、会话密钥、时间戳,以及其他一些信息。Ticket 中的大多数信息都被加密,密钥为服务器的密钥 Authenticator 一个记录,其中包含一些最近产生的信息,产生这些信息需要用到客户和服务器之间共享的会话密钥 Credentials 一个ticket加上一个秘密的会话密钥
Kerberos Model 基本的ticket交换 Client -> KDC KDC -> Client c(客户的id), s(服务器的id), n(nonce) KDC -> Client {Kc,s, n}Kc, {Tc,s}Ks Client -> Server {Ac}Kc,s, {Tc,s}Ks
基本的ticket交换的问题 客户个体密钥Kc的频繁使用 Kc的使用对于用户尽可能透明 可伸缩性 方案 引入TGS(Ticket-granting server)
附加的ticket交换 引入TGS(Ticket-granting service) 两种ticket TGT: {Tc,tgs}Ktgs Service ticket: {Tc,s}Ks
支持可伸缩性的两个概念 TGS Realm(域) Ticket-granting service 与domain的区别? 从安全性意义上来,是指信任边界
Kerberos中ticket示意图
Kerberos消息(1) Client -> Authentication Server(KDC) Options: KDCOptions IDc: principal’s name Realmc: client’s realm IDtgs: TGS’s name Times(from, till, rtime) Nonce1 可选的扩展信息
Kerberos消息(2) Authentication Server(KDC) -> Client Realmc IDc Tickettgs EncryptedData(with Kc) Kc,tgs Times(LastReq, Key-expiration*, Authtime, Starttime*, Endtime, Renew-till*) Nonce1 Realmtgs IDtgs
Tickettgs信息 Encrypted with Ktgs Flags Kc,tgs Realmc IDc ADc Times
Kerberos消息(3) C -> TGS Options: KDCOptions IDv: Server’s name Times(from*, till, rtime*) Nonce2 Tickettgs Authenticatorc
Authenticator Encrypted with Kc,tgs 用途是 IDc Realmc TS1 服务器可用来认证Ticket的有效性 TS可告诉服务器客户机当前的时间
Kerberos消息(4) TGS -> C Realmc IDc Ticketv EncryptedData(with Kc,tgs) Kc,v Times Nonce2 Realmv IDv
Ticketv信息 Encrypted with Kv Flags Kc,v Realmc IDc ADc Times
Kerberos消息(5) C -> Server Authenticaor: Encrypted with Kc,v Options Ticketv Authenticatorc Authenticaor: Encrypted with Kc,v Realmc IDc TS2 Subkey Seq#
Kerberos消息(6) Server -> C(optional) 仅用于双向认证 EncryptedData(with Kc,v) TS2 Subkey Seq#
Ticket交换中的flags INITIAL RENEWABLE MAY-POSTDATE POSTDATED 是由AS发出的ticket 告诉TGS,当这个ticket过期之后,它可以用来获得一个新的ticket MAY-POSTDATE 告诉TGS,以后可以根据这个ticket(TGT),发出一个postdate的ticket POSTDATED 表示这个ticket已经被postdated
ticket中的flags(续) INVALID PROXIABLE PROXY FORWARDABLE FORWARDED 告诉TGS, 根据所出示的ticket,发出一个地址不同的新ticket PROXY 表示这是一个proxy ticket FORWARDABLE 告诉TGS,根据这个TGT,发出一个地址不同的新ticket FORWARDED 表明这个ticket是一个forwarded ticket
INITIAL 表明一个ticket是由AS发出的 有的应用服务要求客户必须知道password,那么它可以要求只接受包含INITIAL标记的ticket 例如,修改口令的应用服务
PRE-AUTHENT & HW-AUTHENT AS可以要求在发出ticket之前,先认证客户,因 此,客户必须提供一个预认证数据块,比如,包含随机数、时间戳,等,然后用客户的私钥加密 如果客户没有提供AS所要求的预认证数据,则AS返回一个KDC_ERR_PREAUTH_FAILE消息 如果AS在认证的时候,要求硬件认证支持,则可以指定HW-AUTHEN标记
RENEWABLE 如果一个ticket设置了RENEWABLE,则它包含两个过期时间 另一个是最终的过期时间 客户可以请求一个新的ticket,只要在最终的过期时间之内,TGS都可以发出新的ticket,其中过期时间往后延长 好处 如果一个ticket被偷,TGS可以拒绝发出新的ticket
POSTDATED和INVALID 客户可以先用MAY-POSTDATE向AS请求一个TGT 然后,客户利用这个TGT,可以申请一些同时包含POSTDATED和INVALID的tickets,用于以后的会话过程 客户在使用之前,通过VALIDATE option,先请求TGS使INVALID ticket有效 用处: 比如在一个处理时间很长的任务中
PROXIABLE和PROXY PROXIABLE告诉TGS, 根据所出示的ticket,发出一个地址不同的新ticket PROXY表示这是一个proxy ticket 用处 允许客户把一个proxy传递给server, 让这个proxy代替自己完成特定的任务 原理 通过网络地址来认证客户
FORWARDABLE &FORWARDED 告诉TGS,根据这个TGT,发出一个地址不同的新ticket FORWARDED表明这个ticket是一个forwarded ticket 其实也是proxy的一种情形 可以完全代替客户的身份 一个用途 在跨域认证的时候,客户可以把这样的ticket出示给其他域的TGS,这使得客户可以访问其他域的服务器
Cross-realm认证 Kerberos 4支持跨realm认证
Cross-realm认证(续) Kerberos 5支持跨realm认证 提供了可伸缩能力
Kerberos数据库 KDC必需一个数据库,保存以下基本信息 其他的扩展fields Name: principal’s identifier Key: principal’s secret key P_kvno: principal’s key version Max_life: maximum lifetime for tickets Max_renewable_life: 其他的扩展fields 数据库的实现取决于具体的Kerberos实现 ,它可以与KDC位于不同的服务器,但是要保证安全性
Kerberos: 数据完整性和私有性 完整性 私有性 对每一个包计算检验和,并加密 HMAC算法 既然客户和服务器已经有了共享随机密钥,那么私有性就很容易保证
Kerberos中加密算法规范 具体的算法可以在参数中指定 NULL Encryption system DES in CBC mode with a CRC-32 checksum DES in CBC mode with a MD4 checksum DES in CBC mode with a MD5 checksum ……
关于Kerberos的一些讨论 重放攻击 Caching authenticators 时间服务 口令猜测攻击 数据加密算法的分离 …… 参考:Bel90. S. M. Bellovin and M. Merritt, ‘‘Limitations of the Kerberos Authentication System,’’ Computer Communications Review 20(5), pp. 119-132 (October 1990).
Kerberos的实现——MIT release MIT提供了完整的Kerberos实现 目前的最新版本为1.2 源码开放 是其他厂商的重要参考 支持各种平台(包括Windows) 同时提供了各种工具(k系列)
kadmin 管理Kerberos数据库,功能有 显示principal的属性 获得principal列表 修改口令 策略管理
Kadmin举例 shell% kadmin kadmin: getprinc jennifer/root Principal: jennifer/root@ATHENA.MIT.EDU Key version: 3 Maximum life: 1 day 00:00:00 Maximum renewable life: 7 days 00:00:00 Master key version: 1 Expires: Mon Jan 18 22:14:07 EDT 2038 Password expires: Mon Sep 19 14:40:00 EDT 1996 Password last changed: Mon Jan 31 02:06:40 EDT 1996 Last modified: by joeadmin/admin@ATHENA.MIT.EDU on Wed Jul 13 18:27:08 EDT 1996 Attributes: DISALLOW_FORWARDABLE, DISALLOW_PROXIABLE, REQUIRES_HW_AUTH Salt type: DEFAULT kadmin:
kdb5_util 功能 把kerberos数据库dump出来 恢复kerberos数据库 创建或者删除一个kerberos数据库
kinit kinit 获得一个ticket 例如 shell% kinit Password for jennifer@ATHENA.MIT.EDU: <-- [Type jennifer's password here.] shell% 如果口令不正确,则: Password for jennifer@ATHENA.MIT.EDU: <-- [Type the wrong password here.] kinit: Password incorrect
klist 列出所有的tickets shell% klist Ticket cache: /tmp/krb5cc_ttypa Default principal: jennifer@ATHENA.MIT.EDU Valid starting Expires Service principal 06/07/96 19:49:21 06/08/96 05:49:19 krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU 06/07/96 20:22:30 06/08/96 05:49:19 host/daffodil.mit.edu@ATHENA.MIT.EDU 06/07/96 20:24:18 06/08/96 05:49:19 krbtgt/FUBAR.ORG@ATHENA.MIT.EDU 06/07/96 20:24:18 06/08/96 05:49:19 host/trillium.fubar.org@ATHENA.MIT.EDU shell%
kpasswd 修改口令 shell% kpasswd Old password for david: <- Type your old password. New Password for david: <- Type your new password. Verifying, please re-enter New Password for david: <- Type the new password again. Password changed. shell%
Kerberos应用: telnet shell% telnet daffodil.mit.edu Trying 128.0.0.5 ... Connected to daffodil.mit.edu. Escape character is '^]'. NetBSD/i386 (daffodil) (ttyp3) login: david Password: <- david types his password here Last login: Fri Jun 21 17:13:11 from trillium.fubar.org Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. NetBSD 1.1: Tue May 21 00:31:42 EDT 1996 Welcome to NetBSD! shell%
Kerberos应用: rlogin shell% rlogin daffodil.mit.edu -l david Password: <- david types his password here Last login: Fri Jun 21 10:36:32 from :0.0 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. NetBSD 1.1: Tue May 21 00:31:42 EDT 1996 Welcome to NetBSD! shell%
Kerberos应用: ftp shell% ftp daffodil.mit.edu Connected to daffodil.mit.edu. 220 daffodil.mit.edu FTP server (Version 5.60) ready. 334 Using authentication type GSSAPI; ADAT must follow GSSAPI accepted as authentication type GSSAPI authentication succeeded Name (daffodil.mit.edu:jennifer): 232 GSSAPI user jennifer@ATHENA.MIT.EDU is authorized as jennifer 230 User jennifer logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> protect private 200 Protection level set to Private. ftp> cd ~jennifer/MAIL 250 CWD command successful. ftp> get RMAIL 227 Entering Passive Mode (128,0,0,5,16,49) 150 Opening BINARY mode data connection for RMAIL (361662 bytes). 226 Transfer complete. 361662 bytes received in 2.5 seconds (1.4e+02 Kbytes/s) ftp> quit shell%
其他Kerberos命令 kdestroy rsh ksu rcp
Kerberos配置文件 krb5.conf, Kerberos配置信息,例如 [libdefaults] ticket_lifetime = 600 default_realm = ATHENA.MIT.EDU default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc [realms] ATHENA.MIT.EDU = { kdc = kerberos.mit.edu kdc = kerberos-1.mit.edu kdc = kerberos-2.mit.edu admin_server = kerberos.mit.edu default_domain = mit.edu } FUBAR.ORG = { kdc = kerberos.fubar.org kdc = kerberos-1.fubar.org admin_server = kerberos.fubar.org [domain_realm] .mit.edu = ATHENA.MIT.EDU mit.edu = ATHENA.MIT.EDU
Kerberos配置文件 kdc.conf, KDC的配置,例如 [kdcdefaults] kdc_ports = 88 [realms] [realms] ATHENA.MIT.EDU = { kadmind_port = 749 max_life = 10h 0m 0s max_renewable_life = 7d 0h 0m 0s master_key_type = des3-hmac-sha1 supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal des-cbc-crc:v4 kdc_supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal des-cbc-crc:v4 } [logging] kdc = FILE:/usr/local/var/krb5kdc/kdc.log admin_server = FILE:/usr/local/var/krb5kdc/kadmin.log
Kerberos缺省端口配置 ftp 21/tcp # Kerberos ftp and telnet use the telnet 23/tcp # default ports kerberos 88/udp kdc # Kerberos V5 KDC kerberos 88/tcp kdc # Kerberos V5 KDC klogin 543/tcp # Kerberos authenticated rlogin kshell 544/tcp cmd # and remote shell kerberos-adm 749/tcp # Kerberos 5 admin/changepw kerberos-adm 749/udp # Kerberos 5 admin/changepw krb5_prop 754/tcp # Kerberos slave propagation eklogin 2105/tcp # Kerberos auth. & encrypted rlogin krb524 4444/tcp # Kerberos 5 to 4 ticket translator
Kerberos协议的实现——MS版本 Kerberos代替Windows NT的NT LM认证协议,是Win2000的默认认证协议,也是Windows 2000分布式安全服务的一部分 与Windows 2000的目录服务集成在一起 Kerberos数据库是AD的一部分 与系统的授权数据信息结合在一起 对MIT Kerberos作了扩展,也不完全兼容
Win2k Kerberos的实现形式 形式: 对上层应用透明 Security Service Provider (SSP) Security Support Provider Interface (SSPI) 对上层应用透明
Win2k Kerberos的Ticket结构
Ticket交换 登录 访问远程服务
Win2k Kerberos Delegation Server S代表客户申请一个新的ticket 利用ticket的FORWARD标志特性
Win2k Kerberos跨域认证
关于Win2k Kerberos 功能 兼容性问题 实现了可传递的域信任关系 实现了服务的delegation 与其他的系统服务之间的集成 与MIT采用的默认算法不同, 不过,可以协商 MIT使用DES,MS使用RC4 口令的散列算法不同 MIT使用一个string-to-key算法,MS使用MD4 授权域信息不兼容 安全个体的映射关系
IPSec 网络层安全性 IETF成立专门的WG标准化IPSec 着眼:真实性(认证)、完整性和保密性 好处:对于应用层透明 可以针对链路,也可以针对最终用户 可以实现在防火墙或者路由器上 弥补IPv4在协议设计时缺乏安全性考虑的不足 IETF成立专门的WG标准化IPSec 目前已有一系列的RFC和Internet Draft 文档结构复杂
IP Security示意图
IPSec的应用 通过Internet建立分支机构 通过Internet远程访问企业内部网络 合作伙伴之间通过Internet建立信任关系 也可用于电子商务应用 IPSec最常见的应用——VPN
IPSec的内容 协议包括两大部分 密钥管理(Key Management) AH: Authentication Header ESP: Encapsulating Security Payload 密钥管理(Key Management) SA(Security Association) ISAKMP定义了密钥管理框架 IKE是目前正式确定的密钥交换协议
SA(Security Association) 基本概念 是发送者和接收者两个IPSec系统之间的一个简单的单向逻辑连接,是与给定的一个网络连接或一组网络连接相关联的安全信息参数集合 因为SA是单个方向的,所以,对于一个双向通信,则需要两个SA SA与IPSec系统中实现的两个数据库有关 安全策略数据库 安全关联数据库
AH(Authentication Header) 为IP包提供数据完整性和认证功能 利用MAC码实现认证,双方必须共享一个密钥 认证算法由SA指定 两种认证模式: 传输模式:不改变IP地址,插入一个AH 隧道模式:生成一个新的IP头,把AH和原来的整个IP包放到新IP包的净荷数据中
AH两种模式示意图 传输模式 隧道模式
ESP(Encapsulating Security Payload) 提供保密功能,也可以提供认证服务 将需要保密的用户数据进行加密后再封装到IP包中,ESP只认证ESP头之后的信息 认证算法也由SA指定 也有两种模式:传输模式和隧道模式
ESP两种模式示意图 Orig IP Hdr ESP hdr TCP Data ESP trlr ESP auth (1) 传输模式 ESP 经认证的数据 经加密的数据 Orig IP Hdr ESP hdr TCP Data ESP trlr ESP auth (1) 传输模式 ESP hdr ESP auth ESP trlr Data TCP Orig IP New IP Hdr 经认证的数据 经加密的数据 (2) 隧道模式
参考资料 书 William Stallings, Cryptography and network security: principles and practice, Second Edition 文章 RFC 1510 Bel90. S. M. Bellovin and M. Merritt, ‘‘Limitations of the Kerberos Authentication System,’’ Computer Communications Review 20(5), pp. 119-132 (October 1990). John T. Kohl, B. Clifford Neuman, Theodore Y. Ts'o, “The Evolution of the Kerberos Authentication Service”, Proceedings of the Spring 1991 EurOpen Conference B. Clifford Neuman and Theodore Ts'o, “Kerberos: An Authentication Service for Computer Networks”, IEEE Communications Magazine, Volume 32, Number 9, pages 33-38, September 1994. David Chappel, “Exploring Kerberos, the Protocol for distributed security in Windows 2000”, Microsoft systems Journal, Aug. 1999 Web站点 http://web.mit.edu/kerberos/www/