Kerberos 认证协议教程
1 引言
Kerberos 协议旨在为开放且不安全的网络提供可靠的身份验证,防止主机间通信被拦截。但需注意,如果计算机本身存在漏洞(如认证服务器、应用服务器或客户端未更新),Kerberos 无法提供保障。因此,Kerberos 是用于不可信网络上可信主机的身份验证协议。例如,若攻击者获取了包含密钥的文件并复制到另一台机器,仅通过伪造 DNS 或 IP 地址即可冒充服务器。
2 目标
Kerberos 协议旨在实现以下目标:
- 用户密码绝不通过网络传输;
- 用户密码绝不以任何形式存储在客户端机器上,使用后应立即丢弃;
- 用户密码在认证服务器数据库中也不应以明文存储;
- 每个工作会话只需输入一次密码,实现单点登录 (Single Sign-On);
- 集中管理认证信息,应用服务器不存储用户认证信息,便于管理员统一禁用账户或修改密码;
- 支持双向认证 (Mutual authentication),即应用服务器也需向客户端证明其身份;
- 支持生成和交换加密密钥,建立加密连接。
3 组件与术语定义
3.1 领域 (Realm)
领域指认证管理域,确立认证服务器的权限边界。用户/服务属于某领域意味着与该领域的认证服务器共享秘密(密码/密钥)。域名区分大小写,通常全大写。建议将 Realm 名称设为 DNS 域名的大写形式,例如 EXAMPLE.COM。
3.2 主体 (Principal)
主体是认证服务器数据库中的条目名称。Kerberos 5 主体格式为:
component1/component2/.../componentN@REALM
实践中最多使用两个组件。
- 用户主体:
Name[/Instance]@REALM,例如[email protected]或admin/[email protected]。 - 服务主体:
Service/Hostname@REALM,例如imap/[email protected]或host/[email protected]。 - 系统主体:如
krbtgt/REALM@REALM,用于加密票据授予票据 (TGT)。
3.3 票据 (Ticket)
票据由客户端提交给应用服务器以证明身份。由认证服务器签发,使用服务的密钥加密。内容包括:
- 请求用户主体;
- 目标服务主体;
- 客户端 IP 地址列表(可选);
- 时间戳;
- 最大有效期;
- 会话密钥。
票据通常有有效期(如 10 小时),以防止滥用。
3.4 加密
Kerberos 使用对称密钥加密。Kerberos 5 支持多种加密类型,需确保客户端与服务器至少有一种共同支持的加密类型。
3.4.1 加密类型
Kerberos 4 仅支持 DES-56,已废弃。Kerberos 5 支持 RC4-HMAC, 3DES, AES128, AES256 等。
3.4.2 加密密钥
使用 string2key 函数将明文密码转换为加密密钥,该函数不可逆。常用哈希算法包括 MD5 和 CRC32。
3.4.3 盐值 (Salt)
Kerberos 5 引入盐值概念,将主体名与密码拼接后再进行 string2key 处理。这确保了同一密码在不同主体下生成不同的密钥,提高了安全性。
3.4.4 密钥版本号 (kvno)
当密码或密钥更新时,计数器递增,当前值即为 kvno。


