
医疗设备正从独立系统向具备持续更新和远程诊断功能的互联平台转变。这在硬件资源受限、产品生命周期长以及监管严格的情况下,提高了功能安全与网络安全的要求。本文借鉴跨行业实践以及Vector在安全关键型嵌入式软件领域的工作经验,重点探讨工程师当前可以采取的措施。
主要痛点
- 生命周期长且更新频繁:在10多年时间里持续提供安全可靠的更新,同时保留合规性证据。
- 异构平台与SOUP:混合工具链和第三方代码使得实施一致的功能安全/网络安全控制措施变得复杂。
- 互联与互操作性:新的攻击面和认证复杂性(例如,医院IT系统和IEC 62443标准)。
- 技能与工具:密码学、安全更新管道及冗余架构具有高度复杂性;工具必须让默认正确更易实现。
医疗技术标准
- IEC 62304:软件生命周期、分类、验证、维护及问题解决。
- ISO 14971:风险管理,包括明确的危害识别、风险控制和残余风险。
- 支持性框架:IEC 60601-1(基本功能安全/基本性能)、IEC/TR 60601-4-5(引用IEC 62443《工业自动化控制系统安全》),以及关于软件物料清单(SBOM)和协调披露的指导原则。
确保功能安全和网络安全的实用方法
锁步
在锁步模式下,两个相同的处理器核心会同步执行相同的指令。硬件比较器会持续检查两个处理器的寄存器及计算结果。一旦检测到不一致,系统将报告错误,并切换至安全状态。这通过以下方式提升安全性:
- 错误检测:采用2oo2(两路中的两路)架构来检测差异。
- 更短的错误响应时间:持续比较可实现快速的无声故障或回退行为。
- 支持安全论证:结合ECC保护内存、看门狗、时钟/电源监控以及端到端保护,在计算内核、内存和通信之间建立一个闭环的错误检测链。
可信执行环境
通过硬件支持,将系统划分为安全/可信域和普通域。安全域对内存、外设和加密素材具有隔离访问权限;普通域与之严格隔离。
- 保护与网络安全相关的组件:网络安全要求、标定参数、配置信息、功能安全状态机和错误计数器均可驻留在安全域中,并受到保护,防止意外更改或篡改。
- 免受干扰:硬件隔离(安全域与普通域)与分区机制(MPU/MMU)相辅相成,降低存在缺陷或不安全的软件影响网络安全相关领域的风险。
- 密钥与通信保护:针对配置、日志和功能安全关键消息的安全密钥管理以及签名/CMAC机制,可增强对数据损坏和未经授权更改的检测能力。
网络安全更新
网络安全更新是指在整个生命周期内均受到保护、防止被篡改,仅来自授权来源,且在应用时可以保证网络安全或功能性的软件更新。其核心要素包括:
- 真实性:更新经过数字签名(代码签名);仅接受来自可信来源的软件包。
- 完整性:哈希校验确保内容未被篡改。
- 授权与访问:基于角色/权限的管理机制确保仅授权服务/用户可以发起更新。
- 保密性与安全传输:通过网络安全通道(例如TLS/mTLS)下载,防范中间人攻击。
网络安全通信
防范来自内部或外部的恶意或意外攻击:保密性、完整性、身份认证、重放保护。
- 具备硬件辅助的强加密服务。
- 传输的消息会附加身份验证信息(例如MAC)和有效期值。
- 采用TLS等加密协议。
功能安全通信
确保控制单元内部以及控制单元之间的通信安全。通过以下方式实现外部通信的安全性:
- 对数据、数据标识符和序列计数器进行循环冗余校验(CRC)。可检测信号的损坏和伪造。
- 序列计数器用于检测消息顺序异常以及重复或插入的消息。
- 接收端设有定时器,用于应对消息丢失和延迟的情况。
左移测试
左移测试是指将测试和质量保证活动尽可能早地纳入软件生命周期,更接近需求、架构和实现阶段,而不是仅在生命周期的末期进行。其目的是通过以下实践提供快速反馈并尽早发现错误:
- 对需求和架构进行早期审查。
- 将静态分析和编码规范直接集成到开发人员的工作流中。
- 具备自动化构建、测试和质量门槛的持续集成(CI)。
- 尽早进行API和集成测试。
跨行业经验教训
在Vector,我们多年来一直致力于开发安全关键型嵌入式软件,并为全球客户提供通过安全认证的解决方案。这不仅包括产品本身,还包括我们内部始终如一地贯彻的、可靠且文档完善的开发和认证流程。简而言之,我们深知安全应用的开发工作既复杂又费时,但同时又是不可或缺的。
为什么安全工作往往很艰巨,却不可或缺:
- 危害与风险分析
- 功能安全概念
- 技术安全概念
- 软硬件接口的定义
- 定性与定量安全分析
- 验证与确认
- 针对目标市场量身定制的开发流程和工作流
所有这些活动都是必要的,而且它们往往枯燥、繁琐且要求严苛。没有人会为了好玩去做这些事。但如果低估它们的重要性,就可能在后续的架构设计、实现和认证阶段面临代价高昂的迭代。这正是我们的工具和产品能发挥作用的地方:降低复杂性、规范化步骤,并让棘手的部分变得可控。
实际案例:如今,多核嵌入式系统中的安全性已成为行业标准,而这一领域面临的挑战尤为严峻:
- 各内核必须保持一致运行,即确定性、可重现且无副作用。
- 内存访问绝不能指向错误的资源,既不能出现无效指针,也不能发生跨分区干扰。
- 内核间通信必须高效且受控,同时符合功能安全规范。如果没有合适的基础软件,这将对架构、配置、测试和证据验证提出极高的要求。
基础软件如何显著简化您的功能安全开发工作:
- 在混合系统中实现无干扰运行,确保功能安全相关和非功能安全相关软件组件在同一控制单元上无干扰地执行:
- 不仅降低风险,简化无干扰的证明工作,还节省架构设计和测试的时间。
- 其他功能安全要求可以映射到其他基础软件模块上,例如安全可靠的通信:
- 确保一致性,并将出错风险降至最低。
- 支持多核微控制器:
- 支持在多个内核之间对任务、资源和内存区域进行清晰的分离。
- 用于不同内存分区和微控制器内核之间交互的高效解决方案:
- 有助于从源头上防止无效访问,并在不影响安全性的前提下确保性能。
- 根据公认的标准和流程进行开发和认证:
- 缩短认证和审计工作,并强化证据链。
效果:无需亲手构建、记录和维护每一个构建模块,而是直接集成一个已经从结构上涵盖不受干扰、分区、安全通信和多核协调功能的基础架构。因此,您的功能安全工程工作时间将从通用基础设施转向真正针对具体项目的风险。
在多核示例中,这具体意味着什么?
- 一致性执行:基础软件针对每个内核协调任务和资源,确保安全部分与非安全部分互不干扰。
- 内存和资源保护:明确的划分、定义明确的 HSI(硬件-软件接口)以及经过验证的访问路径,可防止错误的内存访问。
- 证据文件:成熟的模块和流程可减少验证、确认和安全论证的工作量,因为许多要求已被基础架构所涵盖,并且可以以可重用的方式加以证明。
- 分析当前的功能安全活动(从危害分析到功能安全论证),找出其中存在的冗余和手动步骤。
- 制定架构和流程指南,确保从一开始就实现无干扰和分区。
- 在控制单元上使用我们的基础软件进行试点部署,重点针对组件隔离和网络安全通信。
- 评估该方案对开发时间、测试工作量及证据说服力的影响,并将该方法推广至其他项目。
早期构建结构,后期事半功倍:减少返工、证据更清晰、发布更迅速。立即启动针对性试点,将您的功能安全开发提升到更高效的水平。

