基本概念
Keychain是加密规则(key)的集合。每个规则必须含有以下三个要素:认证算法、认证密钥(加密字符串)、规则的发送/接收时间。其中认证算法和认证密钥用来控制加密/解密报文,发送/接收时间表示在这段时间内,能够使用配置的算法和密钥对报文认证后发送/接收。
key
key包含认证信息和活跃时间。认证信息包括认证算法和认证密钥。Keychain支持MD5、SHA-1、SHA-256、HMAC-MD5、HMAC-SHA1-12、HMAC-SHA1-20等认证算法。应用程序应用Keychain时,也必须支持Keychain里配置的认证算法。认证密钥是一串字符,由用户配置得到。
活跃时间包括发送时间和接收时间。设备上通过设置key的接收和发送活跃时间实现动态变更认证信息。根据key配置的接收时间和发送时间,key可以分为活跃的发送key和活跃的接收key:
活跃的发送key:当系统时间处于key配置的发送时间范围内时,该key处于发送活跃状态。应用程序发送报文时,使用此key配置的认证算法和密钥生成发送端的MAC(Message Authentication Code)。
活跃的接收key:当系统时间处于key配置的接收时间范围内时,该key处于接收活跃状态。应用程序接收报文时,使用此key配置的认证算法和密钥生成接收端的MAC。
Message Authentication Code
Message Authentication Code(信息认证码,简称MAC)是一串字符。在Keychain的应用中,由设备使用认证算法,对数据报文和认证密钥进行计算得到。
Keychain的时间模式
Keychain的时间模式是指Keychain中的key按时间工作的方式,包括绝对时间模式和周期时间模式。
绝对时间模式表示Keychain只能在一个绝对的时间段内工作。
- 日周期模式,表示Keychain中的key在每天固定时间段内生效。
- 周周期模式,表示Keychain中的key在每周指定的周几生效。
- 月周期模式,表示Keychain中的key在每月指定的日期生效。
- 年周期模式,表示Keychain中的key在每年指定的月份生效。
一个Keychain只能指定一种时间模式。在Keychain创建时就需要指定时间模式,key的发送和接收时间根据Keychain的时间模式进行配置。
缺省发送key
如果在某个时间段管理员没有配置key,此时将没有活跃的发送key。在该时间段,应用程序将没有认证的交互。为了避免这种情况,可以配置缺省发送key。在没有其他活跃的发送key时,应用程序将使用缺省发送key作为活跃的发送key。
接收容忍时间
当设备上的发送key发生改变时,对应接收端的接收key也必须发生改变。由于时间不同步,在两台设备上的key发生改变时,可能会有时间差。在这段时间内,由于key的不一致将导致报文丢失。为了避免该情况出现,需要在接收key发生切换时有一个平滑的过渡。这个平滑的过渡时间段称为接收容忍时间。
接收容忍时间只能对接收key有用,可以在每一个Keychain中配置接收容忍时间。配置接收容忍时间后,如图17-1所示,接收key的启动和结束时间都将做相应的延长。
TCP kind-value和TCP algorithm-id
TCP应用程序之间通过TCP认证建立连接。对于TCP的认证交互,TCP使用增强的TCP认证选项。
不同的厂商使用不同的kind-value值代表增强的TCP认证选项。为了实现不同厂商设备之间的交互,kind-value是可配置的,能根据对端设备的TCP类型进行调整。
在TCP的增强认证选项中存在一个algorithm-id字段,该字段用来表示认证算法的类型。由于algorithm-id不是因特网地址分配组织IANA(Internet Assigned Numbers Authority)统一定义的,不同的厂商之间使用不同的algorithm-id值来代表认证算法。为了实现不同厂商之间的互通,algorithm-id的值与认证算法的对应关系也是可以配置的。