跳到主要内容

4. Encryption and Checksum Specifications (加密和校验和规范)

4. Encryption and Checksum Specifications (加密和校验和规范)

本文档中描述的 Kerberos 协议旨在使用流加密或块加密密码加密任意大小的消息。加密用于证明参与消息交换的网络实体的身份。每个域的密钥分发中心受该域中注册的所有主体信任, 可以机密地存储密钥。对此密钥知识的证明用于验证主体的真实性。

KDC 使用主体的密钥 (在 AS 交换中) 或共享会话密钥 (在 TGS 交换中) 加密对票据请求的响应; 获得密钥或会话密钥的能力意味着对适当密钥的知识和 KDC 的身份。主体能够解密 KDC 响应并向服务出示票据和正确形成的 Authenticator (使用 KDC 响应中的会话密钥生成) 验证主体的身份; 同样, 服务能够从票据中提取会话密钥并在响应中证明其对此的知识验证服务的身份。

[RFC3961] 定义了一个用于定义与 Kerberos 一起使用的加密和校验和机制的框架。它还定义了几种此类机制, 并且可以在该文档的未来更新中添加更多机制。

[RFC3961] 提供的字符串到密钥操作用于为主体 (通常为用户) 生成长期密钥。如果没有通过预认证数据提供, 默认的 salt 字符串是主体的域和名称组件的串联, 按顺序, 没有分隔符。除非另有说明, 否则使用 [RFC3961] 中定义的默认字符串到密钥不透明参数集。

使用第 5.2.9 节中定义的 EncryptedData、EncryptionKey 和 Checksum 数据对象传输加密数据、密钥和校验和。本文档中描述的加密、解密和校验和操作使用 [RFC3961] 中描述的相应加密、解密和 get_mic 操作, 使用每个 EncryptedData 或 Checksum 对象描述中指定的 "密钥用途" 值进行隐式 "特定密钥" 生成, 以便为每个操作改变密钥。请注意, 在某些情况下, 要使用的值取决于选择密钥的方法或消息的上下文。

密钥用途是无符号 32 位整数; 不允许零。用于加密或校验和 Kerberos 消息的密钥用途值在第 5 节中与消息定义一起指示。密钥用途值 512-1023 保留用于 Kerberos 实现内部使用。(例如, 使用会话密钥和不用于任何其他目的的密钥用途值加密某物产生的值为伪随机数生成器提供种子。) 密钥用途值 1024 到 2047 (含) 之间保留用于应用程序使用; 应用程序应该 (SHOULD) 在此范围内使用偶数值进行加密, 使用奇数值进行校验和。密钥用途值也在第 7.5.1 节的表中进行了总结。

可能存在根据 RFC 1510 加密类型或校验和类型定义协议的其他文档。这些文档不知道密钥用途。为了使这些规范在更新之前继续有意义, 如果未指定密钥用途值, 则必须使用密钥用途 1024 和 1025 分别派生用于加密和校验和的密钥。(这不适用于通过直接使用 Kerberos 认证交换产生的密钥独立于此框架进行自己的加密的协议。) 根据 Kerberos 加密和校验和类型定义的新协议应该 (SHOULD) 使用自己的密钥用途值。

除非另有说明, 否则不会从一个加密操作到另一个加密操作进行密码状态链接。

实现说明: 虽然不推荐, 但某些应用程序协议将继续直接使用密钥数据, 即使仅在当前存在的协议规范中。因此, 旨在支持通用 Kerberos 应用程序的实现可能需要使密钥数据可用, 以及 [RFC3961] 中描述的属性和操作。直接执行加密的一个更常见的原因是直接控制 "足够强" 的加密算法 (在给定应用程序的上下文中) 的协商和选择。尽管 Kerberos 不直接提供在应用程序客户端和服务器之间协商加密类型的设施, 但有使用 Kerberos 促进此协商的方法。例如, 客户端可能仅从 KDC 请求 "足够强" 的会话密钥类型, 并期望 KDC 返回的任何类型都将被应用程序服务器理解和支持。