汽车网络安全:关于SecOC及测试开发实践简介( 二 )


文章图片
图7新鲜度值的分发示例
4.MAC生成
MAC是对受保护数据的身份认证 。 其中涉及的加密算法多种多样 , 每个算法还可以有多个配置 。 这里我们以SecOC提供的一个方案Profile1进行说明 , 其使用CMAC/AES-128的算法 , 截取8bit的新鲜度值和24bit的MAC , 配置信息如下所示 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图8Profile1配置
除此配置外 , MAC生成还需要128bit的密钥(这里预先定义了0x0102030405060708090A0B0C0D0E0F10)、16bit的DataID(这里预先定义了33)、完整的新鲜度值和需要认证的数据 。 DataID是用来标识I-PDU的数据 , 可以给密钥管理机制提供支持 。 以Demo中时间戳为8.300203的I-PDU进行说明 , 需要认证的数据为0xE8030000000000FF , 完整的新鲜度值为0x100000405 , 实际进行加密运算的数据为DataID、待认证数据和完整新鲜度值的拼接 , 计算后的实际MAC为0x498330e818f3fbb068759ff3b72d015f , 截取24bit后发送的MAC为0x498330 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图9MAC发送示例
这里使用的加密为对称加密 , 以更快地进行I-PDU的交换 。 通常的做法还包括利用非对称加密的方式来传递对称加密的密钥 , 以此完成密钥的定期更新 。 通过对DataID、I-PDU和密钥的映射 , 以及密钥的更新和分发 , 可以做到一个非常完整的密钥管理方案 。
5.SecOC测试开发
从上面可以看出 , SecOC的机制是比较复杂的 , 按照过往的项目经验 , 需要测试验证的内容包括新鲜度值管理、MAC认证、密钥分发等 。
为了保证ECU的运行环境 , 并监测ECU自身的行为 , 我们需要仿真其外部条件 , 包括同步报文、ECU接收的SecOC报文等 。 为了实现此仿真环境 , 可以使用CANoe提供的Security模块 。
在CANoe的SecurityConfiguration中 , 对SecOC方案的进行选择与配置 , 并将其与控制器的端口形成映射 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图10SecurityConfiguration配置
在ARXML中 , 可直接配置相关的信息 , 包括DataID、新鲜度值的长度等 。 通过这种方式 , 可以对每个I-PDU进行不同DataID的配置从而形成I-PDU和DataID的映射 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图11ARXML相关配置
在CANoe的SecurityManager中 , 可以对DataID进行其密钥的写入 , 实现密钥与DataID的映射 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图12SecurityManager相关配置
除了使用CANoe的Security模块 , 还可以集成CANoe的SecOC接口函数等进行编程来实现仿真环境 。 解决了仿真环境后 , 需要依据所开发的测试用例实现测试脚本 。 一方面验证正向的SecOC流程 , 另一方面验证SecOC机制的防“攻击”特性 。 通过使用CANoe的各个内置函数及外部第三方编程接口 , 对仿真条件进行相应的输入控制器 , 并监测ECU的反馈 , 就可以高效地完成SecOC的验证 。
汽车网络安全:关于SecOC及测试开发实践简介
文章图片
图13SecOC测试用例展示
6.总结
在网络安全领域 , 越高的安全性要求 , 意味安全机制的复杂性 , 对系统资源消耗和性能的更高要求 。 那么 , 需分析和确认哪些数据需要被保护、网络安全等级如何定义也尤为重要 。 结合应用场景 , 考虑数据的敏感性、实时性等要求 , 才能选择合适的方案 。 不管是E2E更偏向数据完整性的校验 , 还是SecOC中更关注身份合法性的认证 , 包括SSL、TLS提供的保密性 , 都是可供选择的方案 。