· 系统的固件实现方案
· 硬件实现方案;例如利用创新方法实现信号链或输出控制,从而让产品脱颖而出
· 任何解决系统中特殊问题的创新方法
例如,采用尽可能少的硬件资源的嵌入式系统实现方案就是一个很好的例证。这种实现方案可以降低产品制造成本,使产品在竞争激烈的市场中更加畅销。
知识产权 (IP) 安全问题公司任何成功所面临的主要挑战。每种产品都需要经过大量的研发和创新才能够成功推出。嵌入式系统制造商向市场推出产品后始终要关注的是逆向工程攻击。这在当今的市场中是个棘手的现实问题。如果竞争对手窃取IP并复制设计,那么您的产品销售收入将会受到极大影响。
通常在谈到嵌入式系统的IP安全性时,人们首先想到的是与微控制器或微处理器配合使用的固件。当说到MCU时一些系统设计人员会戛然而止。而硬件会怎样?是的,有些人很重视硬件,并通过多种方法设法隐藏硬件实现方法。任何完整的嵌入式系统的组成部分不仅仅包含固件,还涉及大量硬件(图1)。
图1:嵌入式系统
其中的硬件负责与外设进行交互,用以感应输入,生成输出,以及进行信号调节。让我们以电动自行车的控制系统为例。图2给出了这种系统的一种可能的实现方案。
图2:电动自行车控制系统
如图2所示,为MCU编写的固件通常用来接收总线(电源)电压、速度命令等输入内容,执行信号调节,并将信号转换为数字,然后进行各种计算,并根据为MCU编写的固件制定决策,例如控制电机和LED输出。
嵌入式系统的IP安全性可分为两部分。
· 防止发生未经授权的固件访问
· 隐藏模拟与数字资源及其互连情况
防止发生未经授权的固件访问
不同微控制器采用不同方法来防止闪存中的代码遭到未授权访问,而有的微控制器根本不采取任何保护措施。进一步说,所有解决方案都采用禁止从闪存存储区域读取数据来解决安全问题。有些设备会禁用整个闪存存储系统的读/写访问。这种解决方案无法在终端系统中添加引导加载程序。如果需要在系统中实现引导加载程序且IP安全性同样重要,那么系统设计人员就需要选择合适的微控制器。
有些微控制器将闪存分为多个模块,并对每个模块采取不同的安全等级保护。对于这种器件,我们可以在实现引导加载程序的同时获得同样高的保护等级。让我们看一下赛普拉斯半导体的PSoC 1器件所提供的闪存保护功能。这些器件支持各种闪存保护模式:
· 无保护模式
· 工厂升级模式
· 现场升级模式
· 完全保护模式
所选的保护模式只能在编程时载入NVL(非易失性)位,不能在运行时间更改,以免保护等级发生意外更改,也是为了防止攻击者通过在闪存无保护区域写入特定代码试图修改固件。
无保护模式:这种模式下允许执行所有外部和内部写入/读取操作。该保护模式适合在开发阶段使用,因为此时无需将器件提供给第三方。该模式不应用于生产阶段。
工厂升级模式:这种保护模式适用于需要由外部程序员对各个闪存模块进行升级的系统。这种保护模式不允许外部读取,但允许外部写入、内部读取和内部写入。如果某个特定模块需要在不擦除整个存储器的前提下由外部程序员进行升级,那么可以使用这种模式。例如对于需要由客户或安装团队校正系统并将校正数据存储在闪存中的这种情况,这种模式就很有用。尽管在系统中进行的这种升级非常有用,但在能够使用安全性更高的模式的情况下必须避免使用该模式。原因在于该模式缺乏对外部写入的保护。如果有人在可升级区域插入用以读取闪存内容的代码,那么IP就会失去保护。然而对于这些器件,为特定模块只能设定此类安全级别,其他模块则可以设定更高的安全等级。因此必须确保将非关键代码存储在这些特定模块中。
现场升级模式:这种保护模式禁用外部写入和读取操作,只允许内部写入和读取,因此无法通过程序员接口读/写闪存。该模式最适合支持引导加载支持的系统。在采用引导加载程序的嵌入式系统中,引导加载程序通过通信协议接收需要写入的闪存数据,然后使用内部程序将数据写入闪存。类似地,也是使用内部命令来执行读取操作。因此,引导加载程序可以使闪存成为只读状态。引导加载程序可存储在具有更高安全等级(完全保护模式)的模块中,因此引导加载程序本身不会被修改。额外对引导加载程序的通信进行加密还能进一步降低闪存读取可能性。[page]
完全保护模式:如果无需对闪存模块进行现场或使用外部程序进行升级,那么这种保护模式理想适用于生产阶段。这种模式禁止以任何形式访问闪存,并禁用内/外部读/写操作。
在生成十六进制文件(将在生产就绪型系统编程)的同时,系统设计人员必须设定合适的保护等级,想方设法实现最高IP安全性。
对于需要为不同闪存区域设定不同保护等级的系统而言,最好检查一下闪存粒度保护的设定情况。有些微控制器只允许为闪存赋予一个保护等级。有些器件允许将闪存分为容量为数kB的块,有的闪存块甚至低至64字节。应使用可将闪存分为小块的器件,这样能最大程度地缩小处于较低保护等级的闪存区域。否则会造成闪存浪费或使更多闪存内容面临安全威胁。
隐藏模拟与数字资源及其互联方式
目前我们已经讨论了系统固件部分的IP保护问题。一些OEM厂商为了防止竞争对手读取部件编号,会在PCB板上涂焦油或环氧树脂。对于大批量系统还可以在IC器件上印刷定制部件编号。定制部件编号同样可以使实际部件编号难以识别。然而,这些方法都无法做到万无一失。竞争对手可以跟踪各种连接,观察各种引脚上的信号,并找出设计中所使用的部件,而且找到各种模块在PCB板上的连接方式也并非难事。因此,隐藏各种外设及其互连方式的唯一办法就是使用物理隐藏。例如,如果所有连接都能隐藏到单个芯片内部,那么要弄懂信号链并确定系统使用的外设就变得更加困难。将各种外设集成到单个芯片中有助于隐藏硬件相关信息,考虑到这一事实,因此在防止受逆向工程攻击时,片上系统(SoC)器件应该是最佳选择。然而,有些SoC的专用引脚存在逆向工程漏洞,例如当器件为外设提供专用引脚时,就很容易判断出所使用的外设类型。因此,那些具有灵活布线功能、可以让任意外设连接任意引脚的SoC能够更好地防止受逆向工程攻击。
图3(a)、3(b)和3(c)分别给出了电动自行车控制系统的三个高端实现实例(为了简便,只给出了比较抽象的方框图,并未包含PCB上的各种其它组件)。这些实现方案包括:
· 使用焊接在印刷电路板上的各个模块
· 使用带专用外设引脚的SoC
· 使用带灵活I/O布线功能的SoC
图3(a):基于单个组件的实现方案
图3(b):带专用外设引脚的SoC
图3(c):采用带灵活I/O布线功能的SoC
如果让工程师对以不同方式实现同一系统的这三种PCB板进行逆向工程设计,哪种更容易被还原工程?答案很明显应该是图3(a)中的实现方案,因为一切都清晰暴露在PCB板上。要对3(b)中的方案进行反逆向工程设计就需要更长的时间,但仍可获得基本的实现方法。那么图3(c)方案会怎样?可以说很难甚至不可能摸清这种实现方案,因为它更像是一个只有输出和输出的黑盒子。工程师根本无法找到该系统中实现的模拟信号链,因为SoC可以让所有外设连接任何一个引脚,而且这些外设在内部的互连无需借助任何物理引脚。此外,由于可编程逻辑没有使用专用引脚,因此无法找到保护逻辑。
对这种方案进行逆向工程设计的唯一可能方法是读取决定外设与引脚连接的寄存器。但是竞争对手必须首先解决闪存读取这个难题。如果有人能破解闪存的安全机制,或者系统设计人员忘了设置必要的闪存保护功能,那么如果外设与大部分MCU一样有固定地址,这种情况下信号链才可能被破解。
赛普拉斯半导体公司的PSoC 1器件在这方面能提供最佳的安全功能。这些器件采用通用模拟和数字模块以及可编程布线方式。同一通用模块可实现任意外设。例如,可编程模拟模块可用于实现可编程增益放大器 (PGA)、模数转换器(ADC)、比较器、滤波器甚至电容式感应模块。可编程数字模块可配置成定时器、计数器、UART、PRS生成器或SPI。这些模块都可以连接到任意引脚。这一切都由一些寄存器位来确定。这些寄存器值存储在闪存中并在启动过程中加载。寄存器值在闪存中的存储位置并不固定,而是由程序来决定。系统设计人员可在编译过程中改变寄存器值的存储位置。此外,还可以在运行过程中修改这些寄存器值,以便重新配置模块从而实现不同外设。例如,在启动阶段配置成可编程增益放大器的模块可重新配置成比较器或ADC。因此,几乎不可能对包含这类器件的设计中的硬件资源进行逆向工程设计。
如今的产品要想取得成功必须面对逆向工程设计这一残酷现实,为此应在系统中添加IP安全功能用以避免IP遭到未授权访问。其中很重要的一点就是要隐藏硬件与固件实现方案,从而实现最高安全等级。不同的MCU制造商提供不同的方法来防止闪存遭到非法读/写,因此选择系统器件之前必须评估该产品的安全技术与效果。采用可编程资源和可编程布线技术的SoC对系统中所有底层实现方案都进行了抽象化,留给竞争对手的只是一个无法实现逆向工程的黑盒子。
上一篇:高性能嵌入式工业以太网监控系统设计
下一篇:嵌入式软件电源能耗优化的方案设计
推荐阅读最新更新时间:2024-03-16 13:48