安全信息处理 【技术领域】
本发明涉及一种安全应用程序,且更明确来说涉及一种可使用单个处理器连同非安全应用程序一起执行的安全应用程序。
背景技术
为提供安全处理环境,某些系统采用两个单独的处理器:一个处理器执行安全代码,且另一处理器执行非安全的代码。当使用单个处理器时,程序执行有时依赖于经高速缓存的存储器层级和存储器管理单元(MMU)以识别存储器的哪些部分是安全的,且哪些部分是非安全的。此保护了存储器免于被中央处理单元(CPU)存取,但不限制由其它总线主控器(例如,直接存储器存取(DMA)控制器和协处理器)存取。因此,运行在所述CPU上的非安全的应用程序可能对DMA控制器或协处理器进行编程以执行存储器存取,其损害系统的机密性、完整性和可靠性(CIA)。较小的单处理器系统(例如,许多嵌入式系统)可能甚至不提供与高速缓冲存储器和MMU一起操作的安全益处。
【发明内容】
根据本发明的实施例,提供一种方法。所述方法包括:在存储器装置处从请求的装置接收存取与所述存储器装置相关联的存储器域的请求;如果所述存储器域包括安全域的任何部分,且所述请求的装置尚未断言安全传送指示,则由所述存储器装置拒绝所述请求;以及如果所述存储器域包括所述安全域的某一部分且所述请求的装置已断言所述安全传送指示,或如果所述存储器域仅包括非安全域,则准予所述请求。
根据本发明的另一实施例,提供一种方法。所述方法包括:从总线主控器将请求发送到存储器装置以存取与所述存储器装置相关联的存储器域;以及如果所述存储器域包括安全域的任何部分,且所述总线主控器尚未断言安全传送指示,则在所述总线主控器处从所述存储器装置接收与所述请求相关联的错误通信。
根据本发明的另一实施例,提供一种设备。所述设备包括:衬底;存储器单元阵列,其由所述衬底支持;以及寄存器,其由所述衬底支持,用以界定将包含在安全域中的所述阵列的子组,其中在与安全传送指示结合地接收到存取所述安全域的请求后准予对所述安全域的存取。
根据本发明的另一实施例,提供一种系统。所述系统包括:无线收发器;处理器,其用以将数据发送到所述无线收发器;以及非易失性存储器装置,其用以存储所述数据,其中所述非易失性存储器装置包括存储器单元阵列和用以界定将包含在安全域中的所述阵列的子组的寄存器,且其中在从所述处理器与安全传送指示结合地接收到存取所述安全域的请求后向所述处理器准予对所述安全域的存取。
根据本发明的另一实施例,提供一种计算机可读媒体。所述计算机可读媒体其中存储有用于致使计算机实施一方法的指令,所述方法包括:从总线主控器将请求发送到存储器装置以存取与所述存储器装置相关联的存储器域;以及如果所述存储器域包括安全域的任何部分,且所述总线主控器尚未断言安全传送指示,则在所述总线主控器处从所述存储器装置接收与所述请求相关联的错误通信。
【附图说明】
图1说明根据实例性实施例的存储器图。
图2是根据实例性实施例的安全存取设备和系统的框图。
图3说明根据实例性实施例具有安全延伸部的寄存器堆。
图4是根据实例性实施例的各种分布式安全存取方法的流程图。
图5是根据实例性实施例的指令执行的流程图。
图6是根据实例性实施例包含计算机可读媒体的制造物品的框图。
【具体实施方式】
介绍
为了在不使用多个处理器或甚至不使用高速缓冲存储器或MMU的情况下提供安全执行,已发明本文中所揭示的硬件和软件机制。以此方式,可使用单个处理器与非安全(不受信任)的应用程序并排地执行安全(受信任)的应用程序。
大多数实施例操作以将处理器操作分割为两个领域:安全领域和非安全领域。当此发生时,属于安全领域的代码和数据对于非安全领域不可见。类似地,在非安全领域中执行的代码不操作以破坏安全领域中的代码、数据或执行。硬件机制经揭示以将执行从安全领域传递到非安全领域,且反之亦然。
地址检查和安全硬件可建置在感知安全领域的每一存储器的硬件中。通过使用此类型的分布式安全系统,可将与安全操作相关联地额外开销维持在相对低的水平,使得甚至当处理资源和可用存储器不足时,微控制器也可结合众多总线主控器和受控器成功地操作。
为实现此类型的操作,系统总线可经设计以包含安全传送(ST)线和安全违规(SV)线。连接到总线硬件的所有总线主控器可被制造成驱动系统总线的ST线。不感知安全领域的总线主控器可被编程或制造成将ST线驱动到逻辑值“0”或某一其它默认值。感知安全领域的CPU和其它总线主控器经设计以将ST线驱动到视总线主控器当前所处的安全状态而定的值。举例来说,如果CPU在非安全领域中操作,则CPU可将ST线驱动到逻辑默认值(例如,逻辑“0”)。如果CPU在安全领域中操作,则其可将ST线驱动到不同值(例如,逻辑“1”)。
如果安全感知存储器接收到违反所存取地址的安全要求的存取(例如,在非安全模式中操作的CPU试图存取存储器的安全区域),则所述存取将被中止,且可使用系统总线的SV线通知当前总线主控器。可使用用于处置从安全状态到非安全状态的状态改变(且反之亦然)的类似机制,除了CPU之外用安全感知总线主控器来扩展系统。
定义
为了本文档的目的,术语“总线主控器”意指耦合到通信总线的能够起始经由所述总线的信息传送的模块。
“总线受控器”是不能起始经由通信总线的信息传送但可响应于已由总线主控器起始的传送的模块。
“熔丝”是非易失性存储器元件,且可使用一次性可编程技术或多次可编程技术(例如,电可擦除可编程只读存储器(EEPROM))来实施。
“非易失性”存储器装置包含当不再施加功率时保持其内容的任何存储器装置,使得可在稍后时间存取所保持的内容。非易失性存储器装置尤其包含EEPROM、快闪存储器和磁致伸缩式随机存取存储器(RAM)。
设备和系统
为介绍起见,读者应注意,根据各种实施例,启用安全领域和非安全领域操作两者提供了用于设备和系统的额外操作状态的可能性。
举例来说,考虑到处理器存储器的某些区段可经保留以用于在安全领域中执行的代码。在此情况下,可仅当处理器在安全领域中操作时存取这些区段(例如,读取/写入/从其执行)。可从安全领域和非安全领域两者存取处理器存储器的剩余区段。
另外,可能通过使用存储器保护单元(MPU),某些资源(例如存储器)可能经受特权级许可检查。在此情况下,用于各种实施例的安全概念可与特权概念正交。也就是说,特权概念涉及操作由处理器处置的特权,控制从处理器到存储器的存取。其它总线主控器通常自由存取所有存储器,不受特权影响。另一方面,安全概念限制从所有主控器到所有受控器的存取,以及当在安全领域中操作时是否可调试处理器操作。
因此,安全和非安全存储器空间两者可被划分为使用有特权执行模式以用于存取的一个子空间,和可用用户特权存取的另一子空间。在此情况下,所得系统可在四个不同状态下操作:(1)非安全、没有特权;(2)非安全,有特权;(3)安全,没有特权;和(4)安全,有特权。
图1说明根据实例性实施例的存储器图110,其中展示各种存储器的安全和非安全区段。在此实例中,随机存取存储器(RAM)和快闪存储器被划分为非安全区域120和安全区域130两者。与总线桥和外部总线接口(EBI)相关联的其它存储器仅包含非安全区域120。
由于存储器(例如,快闪存储器或RAM)可含有安全区段和非安全区段,所以实施一机制以针对每一存取检查将要存取的地址是否位于安全存储器区段中。如果是,则进行检查以确定所述存取是否正由在安全领域中操作的总线主控器执行。如果否,则中止数据的传送,且将SV错误信号返回到请求的总线主控器。总线主控器可以不同方式处置错误,例如,通过起始异常例程。如果安全检查通过,或将要存取的地址位于存储器的非安全区段中,则启用数据的传送。
每一总线主控器可提供关于其当前安全水平的信息以及总线传送请求。每一安全启用的总线受控器可使用此安全水平信息,以及将存取地址映射到安全或非安全的地址空间中。地址比较器电路可位于每一安全启用的总线受控器内以执行此映射。
可用的安全资源的量可为可配置的,以提供适合不同应用程序的灵活性。举例来说,可使安全寄存器(仅可从安全领域内对其进行写入)可用以指定安全存储器中的每一者中的安全区段的开始地址和大小。
图2是根据实例性实施例的安全存取设备226和系统210的框图。设备226可包括存储器,例如图1的快闪存储器和/或RAM存储器。举例来说,参看图2的设备226和RAM存储器230。系统210可包括基于微处理器的系统,其中总线244(包含数据总线)连接若干总线主控器,例如CPU 212、微处理器218、DMA模块220和收发器模块222。系统210还可包含总线受控器,例如一个或一个以上安全存取设备226、RAM存储器230、EBI模块234和总线桥238。出于简明的目的,可假定EBI模块234和总线桥238不是安全启用的,但各种实施例不受如此限制。
本文中所描述的经简化的数据总线模块可包含以下信号,所述信号可包括逻辑电平信号,如下:
·Valid-指示总线是否具有有效传送
·Write-指示传送是读取还是写入
·Wdata-将从主控器写入到一个或一个以上受控器的数据
·Rdata-将要从受控器读取到主控器的数据
·Stall-受控器未准备好当前传送;冻结总线上的所有值
·Secure Transfer(ST)-从主控器到一个或一个以上受控器的指示主控器处于安全状态中的信号。不是安全启用的受控器忽视此信号。不是安全启用的主控器应驱动此信号以指示主控器未处于安全状态中(例如,如针对DMA模块220和收发器模块222所示,信号ST被驱动到逻辑“0”电平以指示非安全状态)。
·SecurityViolation(SV)-从受控器到主控器的指示当前传送已违反了针对其试图进行存取的地址的安全限制的信号。不是安全启用的受控器不应断言此信号(例如,对于EBI模块234和总线桥238,信号SV被驱动到逻辑“0”电平,使得不断言信号SV)。
在许多实施例中,配置安全启用的受控器的不同参数是有用的,所述参数例如为每一受控器的存储器中的安全域224的位置和大小。举例来说,在存储器内的第一地址处开始存储器的安全域224可为有益的。如果在整个系统中采用此政策,则可能仅安全域224的大小将被指定为变量。此大小可为应用程序特定的,因为不同的应用程序具有不同的需要。因此,大小的可编程性可为有用的。
如果将权从安全领域内确定或改变安全域224的大小,则可能通过每个安全启用的受控器使用一个寄存器,将一组安全系统寄存器228定位在CPU内可能为有用的。如果是这种情况,则可将寄存器内容路由到每一受控器以用于在地址比较逻辑CMP中使用。为减少与这些寄存器相关联的逻辑以及其相关联的地址比较器,域大小的分辨率可能被限于一千字节的倍数,使得每一安全启用的存储器中的安全域224的大小被设计为某一整数数目N千字节。在某些实施例中,还可以分布式方式实施这些寄存器228,例如将一个或一个以上此类寄存器228放置在每一安全感知总线受控器中。
应注意,尽管在图2中设备226被展示为快闪存储器,但各种实施例不受如此限制。举例来说,图2红所示的总线受控器或总线主控器中的任一者(例如,受控器装置226、230、234和238;以及主控器装置212、218、220和222)可包含衬底232来支持具有安全域224和非安全域240两者的存储器阵列236。设备226可进一步包含一个或一个以上寄存器238、地址比较器逻辑CMP和一个或一个以上安全域熔丝SD。因此,设备226可包括存储器芯片、存储器控制器或甚至更大的装置,例如具有嵌入式快闪存储器的微控制器,且因此可实现许多实施例。
举例来说,用以实施分布式安全存储器存取的设备226可包括衬底232,其中存储器单元阵列236和一个或一个以上寄存器228由衬底232支持。寄存器228可用于界定将包含在安全域224中的阵列236的子组,其中当与安全传送指示结合地接收到存取安全域224的请求后(例如,与确定所指明的安全寄存器状态位也已被设置组合地断言信号ST 248,如下文所描述),准予对安全域224的存取。
在某些实施例中,设备226可包括一个或一个以上安全域熔丝SD,其具有启用和停用对阵列236的安全存取的状态。因此,设备226可包含启用/停用安全状态功能性的熔丝。在某些实施例中,设备226可包括安全域熔丝SD,其具有启用和停用针对对阵列236的存取的安全许可检查的状态,和确定耦合到设备226的系统210是在安全领域中还是在非安全领域中启动的状态。
安全域熔丝SD可用于限制对存储器的安全域的存取,且还限制对安全系统寄存器(例如,寄存器228,例如SS_ADR*、SS_RAR、SS_RSR等下文所论述的寄存器)和系统210中存在的任何其它安全资源的存取两者。设备226可进一步包括安全调试熔丝BUG,其具有启用和停用与存储在安全域224中的信息相关联的追踪、单步或断点活动中的一者或一者以上的状态。
如先前所述,设备226可包含一个或一个以上安全系统寄存器228以界定阵列236内的安全域224的大小或位置中的至少一者。可在启动时间加载寄存器228以界定安全域224开始地址和/或大小,使得可对其进行存取。设备226中的阵列236可由RAM、快闪存储器、EEPROM、磁致伸缩式存储器、其它非易失性存储器或其组合组成。
可实现许多其它实施例。举例来说,用以实施对多种设备226(例如,快闪存储器、RAM 230、EBI模块234和总线桥238)的分布式安全存储器存取的系统210可包括无线收发器222、用以将数据254发送到无线收发器222的一个或一个以上处理器212、218,和用以存储数据254的一个或一个以上非易失性存储器装置(例如,包括快闪存储器的设备226)。在某些实施例中,系统210可包括蜂窝式电话、台式计算机、膝上型计算机、个人数字助理(PDA),或任何其它处理器驱动的计算装置中的任一者或一者以上。
在某些实施例中,如将在下文更详细地描述,系统210可包括用以界定安全域224的执行状态和配置的安全系统寄存器228。除非由处理器212、218指示安全状态,否则不可对安全系统寄存器228进行写入。不管系统处于安全或非安全状态,均可对安全系统寄存器228进行读取。此允许将寄存器228用于将信息和状态从安全状态传递到非安全状态。
在某些实施例中,系统210中的处理器212可包括寄存器堆229和一组安全系统寄存器228以从非易失性存储器装置(例如,设备226)接收界定阵列236中的安全域224的大小或位置中的至少一者的信息。因此,在处理器212中可能存在能够进行安全存取模式操作的某些寄存器228;可通过在安全模式中执行指令而加载这些寄存器228,或作为处理器212的启动或加电序列的一部分自动由硬件加载。在某些实施例中,寄存器228可形成寄存器堆229的一部分或延伸部。
可以许多方式实施先前所描述的任何组件,包含经由软件进行模拟。因此,系统210、总线244、处理器212、218、DMA模块220、收发器模块222、安全域224、设备226、寄存器堆229、RAM 230、EBI模块234、总线桥238、寄存器228、衬底232、阵列236、非安全域240、信号248、252、安全调试熔丝BUG、地址比较器逻辑CMP和安全域熔丝SD在本文中均可表征为“模块”。
这些模块可如设备226和系统210的架构所需并适合于各种实施例的特定实施方案而包括硬件电路、单处理器或多处理器电路、存储器电路、软件程序模块和对象、固件和其组合。模块可包含在系统操作模拟封装中,所述系统操作模拟封装例如为软件电信号模拟封装、功率使用和分布模拟封装、功率/热耗散模拟封装、信号发射-接收模拟封装、电路仿真器,或用于模拟各种潜在实施例的操作的软件和硬件的任何组合。此些模拟可用于例如表征或测试各种实施例。
还应理解,各种实施例的设备和系统可用于除具有单核处理器或多核处理器的台式或膝上型计算机之外的应用中。因此,本发明的各种实施例不受如此限制。希望对设备226和系统210的说明提供对各种实施例的结构的整体理解,且不希望其用作对可能利用本文中所描述的结构的设备和系统的所有元件和特征的完整描述。
可包含各种实施例的新颖设备和系统的应用包含用于高速计算机、通信和信号处理电路、调制解调器、单处理器或多处理器模块、单个或多个嵌入式处理器和专用模块(包含多层、多芯片模块)中的电子电路。此类设备和系统可进一步被包含为多种电子系统内的子组件,所述电子系统尤其例如为数据桥、交换机和集线器;电视和蜂窝式电话;个人计算机和工作站;收音机和视频播放器;和交通工具。
寄存器操作
图3说明根据实例性实施例具有安全延伸部的寄存器堆310。寄存器堆310可类似于或等同于与图2的处理器212相关联的寄存器堆229。通过介绍的方式,应注意,在安全领域中操作的总线主控器可存取存储器中的安全域和非安全域两者。类似地,非安全堆栈指针通过只读安全系统寄存器而在安全领域中可用,以促进参数传递。
返回参看图3,应注意,为简明起见,展示类似于AtmelAVR3232位精简指令集(RISC)微处理器核心架构中所使用的寄存器堆的寄存器堆310,但各种实施例不受如此限制。此处,安全存取的使用和断言/指示安全状态的能力将另一寄存器堆上下文(安全上下文368)添加到非安全上下文,例如应用程序上下文320、监督器上下文326、中断上下文INTO 332、INT1 338、INT2 344和INT3 350、异常上下文356和非可屏蔽中断(NMI)上下文362。
为了不添加可能混淆对各种实施例如何操作的阐释的不必要细节,图3中展示AVR32架构和其它架构共用的寄存器标示中的一些,但本文中未明确论述。可在加利福尼亚州圣何塞市的艾特梅尔公司公开的AtmelAVR32架构文献修正32000B-11/07,2007和相关的修订以及所属领域的技术人员众所周知的许多其它文献中找到对这些寄存器和其操作的详细论述。
为了将安全领域与非安全领域分开,安全领域具有其自身附有阴影的堆栈指针SP_SEC。当系统进入安全领域时,此堆栈指针SP_SEC被自动激活。在非安全领域中操作也是如此,寄存器堆中可用于安全领域中的其它寄存器取决于在进入安全操作领域中之前处理器的操作模式。这些模式包含监督器模式、应用程序模式和中断模式。感兴趣的读者可参看上述的AtmelAVR32架构文献以找到关于寄存器堆阴影和影子寄存器在各种模式中的可用性的更多细节。
还可存在许多安全系统寄存器370。这些寄存器370可类似于或等同于图2的寄存器228。权可从安全领域对寄存器370进行写入,且可在安全领域和非安全领域中对其进行读取。当对这些寄存器的写入的尝试是从安全领域的外部进行时,发生特权违规异常。这些寄存器可包括任何数目个位,包含32位,且可包含(例如):
·SS_STATUS-可由安全领域应用程序界定此状态寄存器的语义,且可在复位时清除此寄存器。此寄存器可用于将状态信息从安全领域传递到非安全领域(例如,是否允许/不允许线程重新调度等)。其还可用于内务处理目的以作为安全领域操作的一部分。
·SS_ADRF,SS_ADRR-这些寄存器可用于界定各种存储器中的安全域的开始地址和大小。每一安全域可经设计以包括以一千字节步长递增的大小,因此在某些实施例中,这些寄存器中的十个最低有效位(LSB)被设置为零。可在复位期间用预定值加载这些寄存器,使得在复位发生后所保护域的大小是正确的。可实施逻辑以在复位操作期间用在非易失性存储器(快闪存储器或快闪熔丝)中找到的值来预加载这些寄存器。
·SS_ADR0,SS_ADR1-这些寄存器可经保留以通过界定额外安全域的开始地址和大小而保护额外的存储器区(补充由SS_ADRF、SS_ADRR寄存器指定的存储器区)。举例来说,存储器中的安全域可开始于为存储器保留的地址空间的开始处,但此对于不同的存储器可不同。还可在复位期间用预定值来加载这些寄存器,使得在复位后所保护域的大小和开始地址是正确的。而且,可实施逻辑以在复位期间用在非易失性存储器(快闪存储器或快闪熔丝)中找到的值来预加载这些寄存器。
·SS_SP_SYS,SS_SP_APP-这些寄存器可包括只读寄存器,且可从寄存器堆310的其它上下文直接重新映射。这些寄存器可用于在堆栈上传递的返回值。
SS_RAR,SS_RSR-这些寄存器可分别包括当执行安全监督器调用(SSCALL)时与SSCALL指令相关联的返回地址寄存器和返回状态寄存器。可在复位时清除这些寄存器。
如果需要的话,可保留单个熔丝以作为启用或停用安全领域操作的机制。此熔丝可被称为安全状态启用(SSE)熔丝。SSE熔丝可用于不需要安全功能性的系统中,或用以确保与现有代码的向后兼容性。如果SSE熔丝未被编程,则系统将在安全状态指示位SR[SS]被清除的情况下启动(如AVR32装置的先前版本中),且将停用安全领域功能性。在某些实施例中,SSE熔丝类似于或等同于图2的安全域熔丝SD。
现在返回图3,应注意,系统可经设置以从地址0x8000_0000启动。可在复位后立即由硬件自动设置或清除安全状态指示位SR[SS],其取决于SSE熔丝的状态。如果使用AVR32架构,则系统可被设置以在监督器模式中启动。
为了在安全领域与非安全领域之间来回传递,可使用两个指令:SSCALL可经设置以跳到固定地址,例如0x8000_0004。这是安全守门人应用程序(gatekeeper application)的地址。守门人程序包括控制安全领域中的所有行为的安全软件。守门人程序检查所执行的任何SSCALL指令的有效性,检查潜在的堆栈溢出/下溢,调度安全线程,在中断和异常的情况下预占安全线程,等等。
SSCALL指令操作以激活专用的安全堆栈指针SP_SEC,其是指向安全存储器空间中的安全领域堆栈指针。此时,状态寄存器中的通用中断屏蔽位(SR[GM])可经设置以屏蔽所有中断请求。如果需要的话,可在稍后时间重新启用中断。而且,安全状态寄存器位SR[SS]可经设置以指示系统处于安全状态中。在大多数实施例中,此位不可由除SSCALL(在安全领域中执行指令或处理数据的调用)和RETSS(从安全领域到非安全领域的返回)之外的任何指令操纵。
如所属领域的技术人员众所周知,AVR32架构具有有特权和没有特权的操作模式。因此,如果将本文中所描述的安全存取机制应用于AVR32架构,如图3中所示,则SSCALL操作以将CPU置于有特权模式中。
AVR32架构具有若干有特权模式,被称作监督器、INT0、INT1、INT2、INT3、异常和NMI,且由状态寄存器SR中的模式位识别当前模式。在安全领域中,不管模式位设置如何,始终使用堆栈指针SP_SEC。返回地址和返回状态寄存器内容被存储在安全系统寄存器SS_RAR和SS_RSR中。如果需要嵌套的SSCALL,则稍后可将这些寄存器堆叠在安全堆栈上。
应注意,寄存器SS_RAR将含有SSCALL的地址,不含有SSCALL之后的指令的地址,如可预期的。这是因为当安全领域中的执行结束时,RETSS指令用于返回到非安全领域中的SSCALL之后的指令。RETSS指令将返回到SS_RAR中的地址并从寄存器SS_RSR恢复状态寄存器。因此,如果希望返回到SSCALL之后的指令,则在执行RETSS指令之前,将寄存器SS_RAR的内容递增二(假定是32位AVR32架构)。
可通过寄存器堆、通过由指针寻址的存储器或堆栈在安全领域与非安全领域之间传递参数和结果。安全领域和非安全领域可共享寄存器堆中的大多数寄存器,其促进参数和结果传递。针对SSCALL和RETSS指令两者,守门人应用程序和编译器惯例可影响在安全领域与非安全领域之间传递数据的方式。安全只读系统寄存器SS_SP_APP和SS_SP_SYS反映SP_APP和SP_SYS堆栈指针,且可用于存取相应堆栈上的值。
在返回到非安全领域之前,守门人程序可操作以确保仅特定信息可用于非安全领域中。此可涉及抹擦在返回到非安全领域中的操作之前由安全领域使用的寄存器堆高速暂存寄存器和非安全高速暂存存储器。
中断处理
可中断安全领域中的处理。为处置安全领域中的中断请求(IRQ)和异常,SSCALL指令的执行可操作以自动设置SR[GM]位以屏蔽任何中断。在安全领域中,SR[GM]位还可操作以屏蔽NMI。
虽然安全代码应经编写以使得从不发生异常,但可使当在安全领域内操作时实际上发生的任何异常分支到(例如)固定地址0x8000_0008处的安全异常处置程序。由安全异常处置程序决定如何处置所出现的任何安全异常。安全模式中的最后执行的指令的地址和其状态寄存器值可在跳到安全异常处置程序之前自动保存在SS_RAR和SS_RSR寄存器中。SR[GM]位可经自动设置以在跳到安全异常处置程序之前屏蔽任何中断。如果需要的话,应保留SS_RAR和SS_RSR寄存器的先前内容。由于可使每一安全模式异常跳到相同的处置程序,所以可能不存在识别接收到哪个异常的便利方式。
如果由网关清除SR[GM]位,则当在安全领域中操作时可接收到NMI。如果随后在安全模式中执行时接收到NMI,则安全代码将跳到可能处于固定地址0x8000_000C处的安全NMI处置程序。安全模式中的最后执行的指令的地址和其状态寄存器值可在跳到安全NMI处置程序之前自动保存在SS_RAR和SS_RSR寄存器中。SR[GM]位可经自动设置以在跳到安全NMI处置程序之前屏蔽任何额外中断。而且,在清除SR[GM]之前,如果需要的话,应保留SS_RAR和SS_RSR寄存器的先前内容。
如果由网关清除SR[GM]位,则当在安全领域中时可接收到中断。SR[I0M]到SR[I3M]位仍可用于屏蔽个别中断级。如果在安全模式中接收到中断,则可使安全代码跳到可能处于固定地址0x8000_0014处的安全中断处置程序。安全模式中的最后执行的指令的地址和其状态寄存器值可在跳到安全中断处置程序之前保存在SS_RAR和SS_RSR寄存器中。SR[GM]位可经自动设置以在跳到安全中断处置程序之前屏蔽任何中断。在清除SR[GM]屏蔽位之前,如果需要的话,可保留SS_RAR和SS_RSR寄存器的先前内容。
安全中断处置程序应最终返回到非安全领域以便处置中断请求。在返回之前,安全中断处置程序应执行任何所需的看护,例如清理寄存器堆310,且确保安全数据不可用于非安全领域。在已服务于中断之后用于返回到安全领域的正确返回的数据也可被保存,可能保存在安全堆栈上。这可包括曾中断的安全领域指令的地址以及其状态寄存器值。
在返回到非安全领域之前,安全中断处置程序应检查SS_RSR寄存器是否含有当SSCALL指令曾进入安全领域时其所具有的状态寄存器值。而且,SS_RAR寄存器应指向原始SSCALL指令,而不是SSCALL之后的指令。RETSS指令可用于返回到为进入安全领域中所原始调用的SSCALL指令。当此SSCALL指令进入管线时,管线应感知到中断正待决,且将处理中断,而不是执行SSCALL指令。当中断处理已完成时,从中断例程返回的RETE指令可用于致使重新执行SSCALL指令,从而将控制返回到安全领域中的网关。网关可接着重新开始被中断安全代码的执行。
可能的情况是中断安全领域处理操作以重新调度非安全线程。在此情况下,当中断处置程序已完成其处理时,将不返回到SSCALL。在此些例子中,应以适当地处置重新调度的方式来实施守门人应用程序。
举例来说,其可为可使网关是线程感知的情况。另一可能的机制是安全中断处置程序在安全系统寄存器SS_STATUS中设置应用程序界定的位。此值可由操作系统(OS)调度器用来抑制已中断了安全领域应用程序执行的中断进行重新调度。如果OS选择忽视SS_STATUS位,则网关可检测此情形,且终止应用程序,或网关可忽略重新调度的操作,且在执行下一个SSCALL后重新开始被中断的安全代码。此一连串的操作会导致从原始线程完成SSCALL的执行,且将其值返回到另一线程。因此,虽然可能中断在非安全领域中运行的线程,但可保留安全领域操作完整性。
调试操作
熔丝可经保留以当在安全领域中操作时启用或停用芯片上调试(OCD)和其它调试功能性。此熔丝可被称作安全状态调试启用(SSDE)熔丝,且在某些实施例中,可类似于或等同于图2中的熔丝BUG。
在某些实施例中,如果观测到执行代码在安全领域中的行为,则可损害执行代码的安全性。在此情况下,当在安全领域中执行时应停用例如单步、断点和程序/数据追踪等调试功能性。然而,当原始开发安全代码时此类功能性可为有用的。因此,熔丝可良好适合于实施SSDE功能性。
如果清除了SSDE熔丝,则当在安全领域中时,可抑制追踪、断点和单步功能性。在非安全领域中,SSDE熔丝不具有影响,且OCD系统正常运作。因此,SSDE位当被设置时允许在开发活动期间正常调试安全领域代码。
如果SSDE位被设置,则不应追踪在SSCALL与RETSS指令之间执行的指令。应在执行指令之前取得断点。因此,如果SSDE位被设置,则应取得SSCALL指令上的断点,但应忽视RETSS指令上的断点。以此方式,当在安全领域中操作时不取得断点。
如果SSDE位被设置,则可使例如单步和断点等调试异常跳到处置程序地址,例如0x8000_0010,而不是标准的调试处置程序地址。可与在非安全领域中出现的相同追踪消息一起更新RAR_DBG和RSR_DBG寄存器。在此情况下不更新SS_RAR和SS_RSR寄存器。
联合测试行动小组(JTAG)芯片擦除命令可操作以擦除所有安全存储器内容,包含熔丝。也就是说,在此类型的操作期间,所有易失性存储器均被清除以防止安全分支。硬件作为总线主控器操作且作为JTAG芯片擦除的一部分执行易失性存储器清除操作,操作应操作以当在JTAG芯片擦除模式中时控制ST总线线路,使得可存取易失性存储器中的安全存储器范围以用于清除所存储的内容。鼓励那些寻求关于JTAG操作的进一步信息的读者参看2001年出版的标题为“标准测试存取端口和边界扫描架构(StandardTest Access Port and Boundary-Scan Architecture)”的电气与电子工程师协会(IEEE)标准1149.1-2001以及随后的版本。
受控器操作
对于每一总线受控器,可保留嵌入式存储器的若干区段以用于安全领域中。从非安全领域对这些区段的任何试图的存取随后会导致安全违规(由SV信号的断言注解)和中止的存取。可用安全域的大小来编程安全系统寄存器SS_ADRF和SS_ADRR。当以一千字节的倍数来确定域的大小时,在每一存储器存取处执行的地址检查可更快且更简单。
当在紧接在复位发生后的系统启动时间根据本文中所概述的原理来进行操作时,存储器中所有具有安全域的位置可默认地被视为安全。这是有用的,因为在已由启动处置程序对SS_ADRR、SS_ADRF、SS_ADR0和SS_ADR1寄存器进行写入之前可能不精确地知晓安全域的大小。一旦已用有效内容更新这些安全系统寄存器,则应在适当位置处施加一机制以向安全受控器指示此更新已发生。举例来说,SS_ADR*寄存器中的最低有效位可用于指示内容的有效性。在此情况下,可建立:写入位0,其中逻辑“1”指示已用有效值更新了地址寄存器的内容。直到此已发生,整个存储器才应被视为安全域,且不应许可非安全存取。或者,硬件状态机可在系统复位之后且在允许任何指令执行或调试动作之前用存储在安全非易失性存储器中的值来预加载SS_ADR*安全系统寄存器。
许多兼容AVR32的装置具有提供非易失性熔丝的芯片上快闪存储器。这些熔丝中的两者可经保留以用于SSE和SSDE位。一旦这些熔丝已被编程,其便可经设计以使得仅全JTAG芯片擦除操作可将其清除。JTAG芯片擦除操作还将擦除装置的安全内容。
快闪控制器也可经设计以含有地址检查机制以抑制擦除/编程安全存储器空间中的页。在此情况下,擦除这些页的唯一方式是使用全芯片擦除,其清除易失性和非易失性存储器两者。
网关操作
网关软件可对系统操作安全性具有主要效应。网关中的安全缺陷可甚至损害整个系统的安全性。在许多情况下,网关的设计很大程度上由安全领域应用程序和其应用程序接口的设计者决定。不具有OS的简单系统可能仅具有简单的网关。
在运行OS的非安全系统中,如果当在安全领域中操作时启用中断,则网关可能变得更复杂。如上文所演示,可通过添加对多个安全线程、嵌套的SSCALL等的支持而使网关任意地复杂。
如果允许网关当不可在给定时间服务于SSCALL时拒绝SSCALL并返回特定的错误状态,则可简化网关设计。执行SSCALL的代码可经设计以仅在某一选定时期后重试SSCALL,或OS调度器可调度另一线程。
网关应经设计以使得没有安全内容可用于非安全领域。可通过在执行RETSS指令之前抹擦安全寄存器堆和存储器内容而辅助此目标。网关还应操作以确保使所有存储器存取均是针对可感测的地址。从非安全领域接收到的所有指针应受到健全检查,以避免(例如)在非安全堆栈上传递参考安全地址空间的返回值。而且,网关应保持对其自身的堆栈和存储器消耗的追踪,以避免嵌套的SSCALL,其导致例如安全存储器溢出/下溢,从而导致安全分支。
方法
某些实施例可包含许多方法。举例来说,图4是根据实例性实施例的各种分布式安全存取方法411的流程图。可结合例如图2和图3中所示的硬件的使用来执行这些方法411和图5中所示的那些方法511。因此,当分别结合图4和图5的方法411、511在以下论述中提到处理器时,读者可参看图2的处理器212。类似地,当分别结合图4和图5的方法411、511参考存储器装置时,读者可参看图2的设备226和/或RAM存储器230。最后,当分别结合图4和图5的方法411、511参考寄存器时,读者可参看图3的寄存器堆310。且通过参看图2和图3中所说明的具有类似名称的硬件和信号可进一步理解可分别结合图4和图5的方法411、511使用的其它装置和信号。
因此,在某些实施例中,实施分布式安全存储器存取的方法411可开始于方框421,且继续进行到方框425,其中检测启动状态的存在。如果在方框425处检测到启动状态,则方法411可继续进行到方框429,其中在启动状态期间加载耦合到存储器装置的处理器中的至少一个寄存器以界定存储器装置中的安全域的大小和/或位置。大小和/或位置的默认值可用于某些实施例中。举例来说,安全域的仅开始、中间或结束位置可用于界定安全域的大小和/或位置。
启动状态可用于启动作为系统(例如,耦合到存储器装置的处理器)的一部分的存储器装置。安全域的大小可为例如许多字节,或一定范围的地址。安全域的位置可为固定的或可编程的。如先前所述,可以一千字节的倍数来界定安全域的大小,从而可能减少用于实施相关联的存储器装置安全域寄存器和比较器的逻辑的数量。
在许多实施例中,在启动状态中加载的寄存器处于处理器内,而不是处于存储器内。然而,存储器可经由专用总线连接到这些寄存器。在启动状态操作期间,可从处理器中的非易失性存储器读取SSE熔丝,且用于设置状态寄存器中的SS位的初始值。如果SSE熔丝被设置,则SR[SS]位被设置,否则,清除SR[SS]位。这确定处理器是否在安全状态中启动。
在许多实施例中,如果在方框425处未检测到启动状态,或已在方框429处加载了寄存器,则方法411继续进行到方框433,其中在存储器装置处从请求的装置接收存取与存储器装置相关联的存储器域的请求。
方法411可继续以在方框437处包含在存储器装置中将与请求相关联的存取地址和与安全域相关联的一定范围安全域地址进行比较。以此方式,存储器装置可操作以将存取地址与安全域中的地址进行比较,以确定将准予还是拒绝存取。
方法411可继续以在方框441处包含确定与请求相关联的存储器域是否包括安全域的任何部分。如果否,则方法411可继续进行到方框457,其中准予请求。
如果与请求相关联的域是安全域的一部分,如方框441处所确定,则方法411可包含在方框445处感测耦合到存储器装置的安全传送总线线路的状态,且接着继续在方框449处确定是否已断言安全传送指示。如果尚未断言安全传送指示,则方法411可继续进行到方框453以包含当存储器域包括安全域的一部分,且请求的装置尚未断言安全传送指示时,由存储器装置拒绝所述请求。拒绝请求可包括通过改变耦合到存储器装置的安全违规总线线路的状态而指示安全违规。举例来说,存储器装置可断言安全违规总线信号。安全存取违规又可触发总线错误异常,使得向负责的应用程序警告存取已失败。
如先前所述,存取特定存储器域的特权可与安全传送指示的状态无关。也就是说,安全域或非安全域每一者均可与有特权或没有特权的存取结合使用,因为存储器存取的特权的使用可与将要存取的域类型正交。
如果已断言安全传送指示,如方框449处所确定,则方法411可继续进行到方框457以包含当存储器域包括安全域的至少一部分且请求的装置已断言安全传送信号(或如果与请求相关联的存储器域仅包括非安全域,如相对于上文的方框441所述)时,准予请求。
此些实施例中的存储器装置可包括存储器集成电路、存储器控制器或形成较大处理器装置的一部分的存储器(例如,AtmelAVR32处理器中的快闪存储器)。当SR[SS]位被设置时,可指示安全状态。当数据传送将在安全状态内发生时,可设置安全传送指示(例如,ST信号)。如果将要在安全状态中执行除数据传送指令之外的指令(例如,ADD指令),则可通过设置SR[SS]位,同时保持传送指示为空,来指示安全状态。
举例来说,图5是根据实例性实施例的指令执行的流程图。因此,实施分布式存储器存取安全的方法511可在方框521处开始于系统加电,且继续进行到方框525,其中从非易失性存储器装置将安全域的大小和/或位置读取到总线主控器中。以此方式,在系统启动操作期间,总线主控器可从存储器装置读取界定对安全域的存取的信息。举例来说,作为总线主控器的CPU可在启动时间从快闪存储器读取界定安全域的大小和位置的信息,且随后将所述信息存储在位于CPU内的SS_ADR*寄存器内。随后可在专用总线上将这些安全寄存器的内容路由到相关联的安全存储器。还可用SSE熔丝的值来预加载SR[SS]位,从而确定系统是在安全状态中还是在非安全状态中启动。因此,方框525处的活动可包含从存储器(例如,快闪存储器)初始化安全系统寄存器。
方法511可继续进行到方框529以获取指令。在解码和执行此指令之前,在方框533中,CPU硬件可确定中断INT是否正待决。为简明起见,方框533使用术语INT来共同涵盖经由INT0、INT1、INT2、INT3、NMI中断输入和异常而发起的中断,包含使用AVR32架构所处理的那些中断。当然,各种实施例不受如此限制。其它类型的处理器架构可用于实施本文中所描述的中断处理。如果INT正待决,则控制传递到方框543,从而执行可能不同的动作,其视系统是处于安全状态还是非安全状态中而定。
如果在方框543处确定在安全域中接收到INT请求,则方法511可继续进行到方框545以执行安全领域中断处置。可与非安全领域中的中断处置不同地执行安全领域中断处置。在安全领域中,NMI和EX事件具有不同于其在非安全领域中的地址的专用处置程序地址。INT0-INT3具有不同于非安全领域的共同处置程序地址,其中INT0-INT3可被自动向量化。
方框545处的活动可包含将被中断指令的程序计数器存储在SS_RAR寄存器中,且将其状态寄存器值存储在SS_RSR寄存器中。其后,SR[GM]位可经设置以屏蔽任何其它待决中断。执行接着分支到安全中断、异常或NMI处置程序。此处置程序视其设计而定可在安全领域中执行适当动作,或跳到非安全领域且在那里执行适当的动作。
如果安全处置程序经设计以执行非安全领域中的处置程序代码,则应将所需的状态信息保存在安全数据结构(例如,安全系统堆栈)中。应注意,方框533中的INT请求促使将盖写原始的SS_RSR和SS_RAR,因此在那种情况下执行的程序应已经设计以在启用安全领域中的中断之前保存原始值。接着应在执行RETSS指令之前将原始值恢复到SS_RAR和SS_RSR寄存器。这将导致跳回到非安全领域,从而获取曾起始安全领域中的执行的SSCALL指令。此时,执行在方框529处继续,其中方框533确定INT正在非安全领域中待决,使得执行随后传递通过方框543并继续进行到方框547。当中断处置完成时,执行将从方框529传递通过方框533且继续进行到方框535,重新执行曾起始安全领域中的执行的SSCALL指令。存储在安全数据结构中的状态信息(当在非安全领域中执行安全处置程序代码时)将允许在安全领域代码中的被中断指令处重新开始。
如果在方框543处确定在非安全领域中接收到INT请求,则方法511可继续进行到方框547以执行非安全领域中断处置。非安全领域中断处置在处理器架构之间变化,且在此描述中不作进一步详细描述。
如果在方框533处确定没有INT正待决,则执行指令的解码,且方法511可继续进行到方框535。如果在方框535处确定经解码的指令为SSCALL指令,则方法511可包含在方框549处将操作改变为安全领域中的执行,使得将当前程序计数器存储在SS_RAR寄存器中,且将状态寄存器存储在SS_RSR寄存器中。其后,将安全堆栈指针SP_SEC映射到寄存器堆中,从而取代先前的堆栈指针。寄存器堆中的SS位经设置,且执行跳到安全网关进入地址,例如在0x80000004处,且随后可在方框529处获取另一指令。
如果在方框535处确定SSCALL指令的执行并非正待决,则方框537处的活动包含检查经解码的指令是否为RETSS指令。如果是,则方法511可包含在方框553处将操作改变到非安全领域,使得由原始的堆栈指针(例如,SP_APP或SP_SYS,视将要使用的特权模式而定)来取代非安全堆栈指针。其后,用SS_RSR寄存器中的值来取代状态寄存器,且执行跳到由SS_RAR寄存器指定的地址。随后可在方框529处获取另一指令。
如果在方框537处确定经解码的指令不是RETSS指令,则方法可继续进行到方框539,其中以由执行架构指定的方式处理经解码的指令。
因此,根据各种实施例的许多方法可包含处理中断。此些方法可包含:(例如)当存储器装置指示安全状态时检测NMI,如果屏蔽NMI的安全中断屏蔽为空则跳到安全NMI处置程序,从安全NMI处置程序跳到非安全NMI处置程序以处置NMI,以及在由非安全NMI处置程序进行的处理完成后返回到安全NMI处置程序。
另一方法可包含:(例如)当存储器装置指示安全状态时检测中断,如果屏蔽中断的安全中断屏蔽为空则跳到安全中断处置程序,从安全中断处置程序跳到非安全中断处置程序以处置中断,以及在由非安全中断处置程序进行的处理完成后返回到安全中断处置程序。
又一方法可包含:当存储器装置指示安全状态时检测异常,以及响应于所述检测而跳到安全异常处置程序。可设想出许多其它方法。
不必以所描述的次序或以任何特定次序来执行本文中所描述的方法。另外,可以重复、串行或并行的方式执行关于本文中所识别的方法而描述的各种活动。图4和图5中所示的方法的个别活动还可以各种方式彼此组合和/或彼此替代。可以一个或一个以上载波的形式发送和接收包含参数、命令、操作数和其它数据的信息。
制造物品
所属领域的技术人员将理解可从基于计算机的系统中的计算机可读媒体起动软件程序以执行软件程序中所界定的功能的方式。可采用各种编程语言来创建经设计以实施和执行本文中所揭示的方法的一个或一个以上软件程序。可使用例如Java或C++等面向对象的语言以面向对象的格式来构建程序。或者,可使用例如汇编或C等过程语言以面向过程的格式来构建程序。软件组件可使用所属领域的技术人员众所周知的许多机制(例如,应用程序接口或进程间通信技术,包含远程过程调用)来进行通信。各种实施例的教示不限于任何特定编程语言或环境。
因此,可实现其它实施例。举例来说,图6是制造物品600的框图,其包含根据实例性实施例的计算机可读媒体(CRM)602。物品600可包括计算机、集成电路、存储器系统、磁盘或光盘、某一其它存储装置,和/或任何类型的电子装置或系统。因此,物品600可包含耦合到计算机可读媒体602的计算机610(具有一个或一个以上处理器),所述计算机可读媒体602例如为存储器(例如,固定的和可移除的存储媒体,包含具有电气、光学或电磁导体的有形存储器),其具有相关联的信息606(例如,计算机程序指令和/或数据),所述信息606在由计算机610执行时致使计算机610执行一种方法,所述方法包括:从总线主控器将请求发送到存储器装置以存取与存储器装置相关联的存储器域,以及如果存储器域包括安全域的任何部分,且总线主控器尚未断言安全传送指示,则在总线主控器处从存储器装置接收与请求相关联的错误通信。此类媒体602和信息606的实例包含具有微码的裸片。
进一步的活动可包含:如果检测到多个可屏蔽中断中的任一者且存储器装置指示安全状态,则跳到共享的安全中断处置程序,且当检测到多个可屏蔽中断中的任一者且存储器装置指示非安全状态时,跳到对应于所述多个可屏蔽中断中的个别者的非安全中断处置程序。额外的活动可包含:当存储器装置指示安全状态时,启用对与安全堆栈指针相关联的安全堆栈的读取和写入,且当不指示安全状态时,停用对安全堆栈的读取和写入,以及当处理安全子例程调用时,将安全子例程调用的地址放置在处理器的安全返回地址寄存器中。其它活动可包含形成上文所描述的图4和图5中所说明的方法的一部分的那些活动中的任一者。
结论
实施本文中所揭示的设备、系统和方法可操作以增强执行安全性,其可通过允许对选定存储器地址的受限和安全的存取,由利用相对简单的单处理器系统的那些设备、系统和方法来实现。所描述的机制在许多嵌入式控制应用(例如,工业电机控制)中或汽车应用中是有用的。当使用时,仅当适当时可由被授权的应用程序来更新指定的存储器地址。以此方式,可避免黑客入侵行为和造成失控代码(runaway code)的错误的写入操作。
形成本发明一部分的附图以说明的方式而不是以限制的方式展示了其中可实践标的物的特定实施例。以充分详细的方式描述了所说明的实施例以使得所属领域的技术人员能够实践本文中所揭示的教示。可利用其它实施例并从其导出其它实施例,使得可在不脱离本发明的范围的情况下做出结构和逻辑替代物和改变。因此,不应以限制的含义来理解此实施方式,且仅由所附权利要求书以及授予此权利要求书权利的完整范围的等效物来界定各种实施例的范围。
在本文中可仅出于便利目的通过术语“本发明”来个别地或共同地参看发明性标的物的此些实施例,且不希望在实际上揭示多于一个发明或发明性概念的情况下,随意地将本申请案的范围限于任一单个发明或发明性概念。因此,虽然在本文中说明和描述了特定实施例,但经计算以实现相同目的的任何布置可替代所展示的特定实施例。希望本发明涵盖各种实施例的任何和所有改编或变化。在检阅上文描述后,所属领域的技术人员将明白上文实施例和本文中未具体描述的其它实施例的组合。
本发明的摘要经提供以符合37C.F.R.§1.72(b),其要求摘要将允许读者快速探明技术揭示内容的性质。在理解其将不用于解释或限制权利要求书的范围或含义的情况下将其提交。另外,在前述实施方式中可看到,在少数实施例中出于将本发明连成整体的目的将各种特征分组在一起。本发明的方法不应被解释为需要比每一权利要求项中所明确陈述的特征多的特征。而是,可在不多于单个所揭示实施例的所有特征中找到发明性标的物。因此,所附权利要求书在此并入实施方式中,其中每一权利要求项自身代表单独的实施例。