非TCP应用程序应用Keychain的原理
Keychain为应用层协议提供了认证服务。当创建之后,Keychain需要被应用程序使用才能生效。按照不同应用程序应用Keychain进行认证的不同处理流程,可分为非TCP应用程序使用Keychain认证和TCP应用程序使用Keychain认证。
非TCP应用程序使用Keychain认证发送报文
应用程序询问Keychain的活跃发送key ID和Keychain提供的算法类型。
如果存在活跃的发送key,Keychain模块提供活跃的发送key ID和算法类型;如果没有,应用程序正常发送报文。
应用程序收到活跃发送key ID和算法类型后,将Keychain算法类型转换为相应协议的标准算法ID,并将此算法ID和key ID封装进报文。
应用程序提供需要用来计算MAC(Message Authentication Code)的数据。
Keychain模块使用活跃的发送key定义的认证算法和密钥,计算出MAC,并返回MAC。
应用程序产生携带认证信息的报文,并发送出去。
非TCP应用程序使用Keychain认证接收报文
接收端接收到携带认证信息的报文。
接收端应用程序将接收的算法ID转换为Keychain算法类型。
接收端应用程序提供数据报文、key ID、算法类型、需要验证的MAC值。
Keychain模块根据接收到报文的key的ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
如果对应的接收key活跃,Keychain模块使用此key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
返回成功消息或者失败消息。
应用程序根据Keychain的认证结果决定接收或丢弃报文。