TCP应用程序应用Keychain的原理
TCP应用程序使用Keychain认证发送报文
在donica草案中,TCP使用增强的认证选项进行认证交互,增强认证选项的报文格式如图17-4所示:
目前该草案还没有标准化,IANA没有统一定义类型(Kind)值和认证算法对应的ID(Alg-id)。各设备商使用不同的取值。为了使不同厂商的设备能够互通,Keychain使TCP类型值和认证算法的ID可以配置和维护。
应用程序询问活跃的发送key ID、TCP Kind、TCP algorithm-id。
如果存在活跃的发送key,则Keychain模块提供应用程序请求的信息。
应用程序用TCP Kind、TCP algorithm-id、key ID填充TCP增强认证选项。
应用程序给Keychain模块提供需要用来计算MAC(Message Authentication Code)的数据。
Keychain模块根据活跃发送key所配置算法和密钥,计算MAC,并返回MAC值。
应用程序将获取的MAC填充到增强认证选项,将报文发送出去。
TCP应用程序使用Keychain认证接收报文
接收端收到携带认证信息的TCP报文。
接收端向Keychain模块提供数据报文、key ID、TCP algorithm-id、TCP Kind以及需要验证的MAC。
Keychain模块检查,接收报文中的TCP类型和算法ID和本端的是否一致。如果不一致,则返回认证失败消息。
Keychain模块根据接收到的key ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
如果对应的接收key活跃,Keychain模块根据该接收key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
返回成功消息或者失败消息。
应用程序根据Keychain的认证结果确认接收或丢弃报文。