软件锁步冗余执行等安全机制是一种用于提高软件系统的功能安全性和可靠性的技术。它的基本思想是让两个或多个软件副本执行相同的功能,然后比较它们的输出,以检测和处理可能的故障¹²。不同的安全机制有不同的特点和优缺点,例如:
锁步(lock-step):两个 CPU 内核执行完全相同的代码,每个内核都将输出反馈给一个比较逻辑模块。如果输出不一致,说明有故障发生。这种方法简单有效,但是浪费了一个内核的性能²。
冗余执行(redundant execution):两个独立的应用程序,运行在不同的 CPU 内核上,甚至在不同的虚拟机中。当应用的输出可用时,它们与额外的高安全完整性内核进行比较,以确保正确性。这种方法可以提高性能和灵活性,但是也增加了系统的复杂性和交叉检查的难度²。
分核锁(split-lock):一种结合了锁步和冗余执行的方法,它允许系统在启动时配置为“拆分模式”(两个独立的CPU,可用于不同的任务和应用程序)或“锁定模式”(CPU的锁定步进,用于高安全性完整性应用)。这种方法可以在高计算性能与高安全完整性支持之间实现平衡²。
(1) 汽车软件平台开发 - 知乎. https://www.zhihu.com/column/c_1357837554818162688.
(2) 锁步,冗余执行,以及分核锁 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/625480349.
(3) 软件异构冗余执行系统的安全能力分析. http://www.infocomm-journal.com/txxb/CN/Y2021/V42/I9/1.
进一步介绍分核锁(split-lock)
分核锁(split-lock)是一种结合了锁步(lock-step)和冗余执行(redundant execution)的安全机制,它可以在高计算性能与高安全完整性之间实现平衡¹²。分核锁的特点是:
- 它允许系统在启动时配置为“拆分模式”(两个独立的 CPU,可用于不同的任务和应用程序)或“锁定模式”(两个 CPU 的锁步执行,用于高安全性完整性应用)¹²。
- 它可以支持故障操作模式,即在锁定模式下运行时,如果一个 CPU 出现故障,系统可以将其下线(拆分),并在降级的操作模式下继续运行¹²。
- 它可以提高系统的性能和灵活性,同时保证系统的安全性和可靠性¹²。
分核锁适合用于对功能安全性和计算性能都有较高要求的场景,如自动驾驶、车载系统等领域¹²。
(1) 锁步,冗余执行,以及分核锁 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/625480349.
(2) 锁步,冗余执行,以及分核锁-电子工程专辑. https://www.eet-china.com/mp/a223027.html.
(3) Arm发布Cortex-A76AE自动驾驶芯片架构,宣示车载系统市场主权-阿里云开发者社区. https://developer.aliyun.com/article/646865.
(4) 锁步核(lock-step core)、软件冗余设计与可分核(Split-Lock)的比较_隋边边的博客-CSDN博客. https://blog.csdn.net/Setul/article/details/104626310.
选择适合的安全机制需要根据不同的场景和需求进行综合考量。一般来说,可以从以下几个方面来评估安全机制的优劣:
安全性:安全机制能否有效地防止未经授权的访问、篡改、泄露或破坏数据,以及能否及时地检测和处理故障情况。
性能:安全机制在执行过程中对系统的资源消耗和响应速度的影响,以及能否满足系统的计算需求。
灵活性:安全机制能否适应不同的用户、数据、请求和环境,以及能否方便地进行配置和修改。
可维护性:安全机制的设计和实施是否符合相关的法律法规,以及是否容易进行监管和管理。
根据这些方面,可以比较不同的安全机制的优缺点,例如:
- 软件锁步冗余执行等安全机制具有较高的安全性和可靠性,但是也牺牲了一定的性能和灵活性,适合用于对功能安全性要求较高的场景,如汽车、航空等领域¹²。
- 基于角色的访问控制(role-BAC)具有较高的灵活性和可维护性,但是也增加了一定的管理复杂度,适合用于对用户权限管理要求较高的场景,如企业、组织等领域³。
- 基于规则的访问控制(rule-BAC)具有较高的性能和灵活性,但是也需要定义清晰的规则和默认策略,适合用于对请求特征判断要求较高的场景,如防火墙、风控系统等领域³。
- 强制访问控制(MAC)具有最高的安全性,但是也需要对所有数据进行标记和分类,适合用于对数据机密性要求极高的场景,如政府、军事等领域³。
你可以根据自己的具体情况,选择最适合你的安全机制。😊
(1) 如何解读数据安全机制? - 知乎. https://www.zhihu.com/question/585086856.
(2) 信息安全中的访问控制 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/151618654.
(3) 什么是安全策略?如何创建安全策略? - 华为. https://info.support.huawei.com/info-finder/encyclopedia/zh/%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5.html.
根据ISO26262,功能安全是指不存在因电气和电子系统故障行为引起的危害而导致的不合理风险。
无论垂直市场如何,这个定义都意味着对任何安全相关系统有很多非常具体的要求。
各种安全标准还定义了不同级别的安全完整性,即特定系统需要有多“安全”。例如,控制车辆制动器的系统将具有最高级别的安全性,因为这种系统的故障可能是灾难性的。
然而,控制驾驶员座椅电机的系统虽然仍具有安全要求,但相对没有那么高的要求。在ISO26262中,这被定义为“汽车安全完整性等级”或“ASIL”。ASIL目前被定义为四个不同的级别,从“A”(最低)到“D”(最高)。这些级别与系统必须达到的诊断覆盖率直接相关,换句话说,与给定系统预期检测到的故障数量直接相关。
根本挑战
随着汽车行业向完全自主实施迈进,人们期望这场革命将带来一个更安全的世界。超过90%的车辆事故是由人为错误引起的,新一代车辆最终可以极大地降低死亡数字。然而,在车辆上实现功能安全,仍有几个基本挑战需要解决。自动化的系统需要消耗大量的计算性能,并且,由于它们能够控制车辆的方向和速度,因此它们需要具备最高水平的安全完整性。
那么,实现这一目标的技术选择是什么?
1. 锁步(lock-step)
在“锁步”中配置两个 CPU 内核是实现高级别诊断覆盖率的传统方法 - 能够检测错误情况的发生。原理很简单,每个内核执行完全相同的代码,每个内核都将输出反馈给一个比较逻辑模块。
比较逻辑模块逐周期比较输出,只要结果相等,一切正常。如果结果之间存在差异,则可能表明需要做更多检查或处理故障情况。
需要进行的操作由系统开发人员定义,并取决于相关系统。它既可以直接重新启动,或者在给定一段时间后重新检查错误条件是否仍然存在。锁步设计固定在芯片中,因此没有灵活性,因此,虽然拥有两个内核,但实际只能运用到单个内核的性能。
这种方法运用的非常普遍,多年来一直适用于微控制器和不太复杂的确定性微处理器。
2. 冗余执行(Redundant execution)
提供更高性能功能的 CPU 通常更复杂,确定性更低,因此对锁步更具挑战性。这导致了解决上述挑战还需要考虑更多方案,软件冗余或冗余执行就是一种选择。
此方法假定两个独立的应用程序,运行在不同的 CPU 内核上,甚至在不同的虚拟机中(如果实施了虚拟化)。当应用的输出可用时,它们与额外的高安全完整性内核进行比较,以确保正确性,由于其独立的时钟和电源,通常被称为“安全岛”。这个安全岛将负责最后的“决定和启动”阶段。此方法可以降低高计算群集上的诊断覆盖率要求,还可以在实现中引入更大程度的灵活性,同时提高效率。
然而,它也大大增加了系统的复杂性,再加上交叉检查的颗粒度较低。由于软件灵活性的优势,这种方法可能会在未来几年更广泛地用于某些需要安全性和高计算性能的应用程序。
3. 分核锁(Split-Lock):两全其美
最终的解决方案必须是将两种方法的优势(灵活性、性能、简单性和经过验证)结合在一起的解决方案。通过引入“分核锁”功能,高计算性能与高安全完整性支持相结合。
分核锁与锁步有何不同?从本质上讲,它增加了锁步 CPU 实现中不可用的灵活性。它允许系统在启动时配置为“拆分模式”(两个独立的CPU,可用于不同的任务和应用程序)或“锁定模式”(CPU的锁定步进,用于高安全性完整性应用)。这种灵活性甚至可以扩展到支持潜在的故障操作模式 - 继续在降级模式下运行而不是完全关闭系统的能力。例如,在锁定模式下运行时,如果一个内核开始出现故障情况,系统可能会被静默,故障内核可能会下线(拆分),从而允许在降级的操作模式下继续运行。这种“拆分可用”功能对于部署自主功能的系统都至关重要。