(文章来源:电子工程世界)
在现代汽车嵌入式系统中,高度安全的数据存储是必不可少的,尤其是在面对日益高明的网络攻击时。对电子嵌入式系统的安全和安全保障需求从未有今天这样强烈。随着汽车的自动化程度不断提高,我们需要提高其安全保障水平,防止它们被黑客攻破。对于采用大量机器人与物联网(IoT)设备,需要处理敏感数据的工厂来说,同样如此。
对所有此类嵌入式系统来说,非易失性闪存存储器必不可少。闪存可用作代码存储、文件系统存储或直接运行代码的微控制器单元(MCU)存储器。如果要实现系统安全性,必须首先确保系统使用的闪存存储器是安全的。本文探讨闪存存储器的安全需求,帮助开发人员为汽车、工业和通信应用构建安全有保障的嵌入式系统。
如果我们仔细观察现代汽车的电子系统,我们会发现闪存在整车上都得到广泛使用。随着系统的复杂性增加,我们需要更大容量的代码存储和数据存储。车内的所有子系统,包括高级驾驶辅助系统(ADAS)、仪表系统(即将与信息娱乐合并)、传动和车身系统,都需要嵌入式系统才能实时运行。所有这些嵌入式系统都需要某种类型的闪存存储器,用作代码存储和数据存储。图1所示的是一个使用多个NOR闪存器件的ADAS子系统。
在当今的ADAS应用中,复杂的算法和人工智能流程依赖在闪存存储器中存储的代码和数据来运行。存储必须提供故障安全和安全保障,因为系统故障或恶意攻击可能导致严重的人身伤害乃至身故。
在工业和网络应用中,也存在对存储解决方案的类似安全与安全保障需求。在互联互通程度不断提高的大背景下,黑客能突破任何与互联网相连的薄弱实体,窃取敏感信息,或者将被攻破的设备当作跳板,在整个网络中的其他地方发起攻击。因此,构建有安全保障的系统,避免发生这种类型的攻击,变得至关重要。
多年来,闪存存储器厂商一直提供纯粹的数据存储。对于这些应用,耐久度和保持能力是衡量闪存存储器质量的两大指标。安全保障并非是对这类型闪存器件的要求,这就意味着存储在闪存上的数据要么完全不受保护,要么使用未经认证的命令进行保护。
例如,一些闪存器件通过正常命令集提供基本的保护功能,例如针对编程或擦除 *** 作对扇区提供非易失性或易失性保护、针对编程或读取 *** 作的密码保护等。这些功能虽是好功能,但不足以抵御手段高明的攻击。如果黑客能够访问闪存器件的总线接口,他们就能轻易地提取或修改设备上的数据。为了保障安全,闪存器件必须保护存储的代码和数据免受多种手段的攻击。下面总结了闪存存储设备需要加以防范的几种攻击。
MIM攻击中的黑客常模仿通信信道的发送方,发送命令或消息给另一侧,以窃取或修改数据。因此,有必要认证主机和闪存设备间的每一条消息。认证可通过在主机和闪存上使用公共密钥,生成伴随实际消息的消息认证码(MAC)来实现。接收方可以在对消息采取行动之前先验证MAC。
为了防止在密钥受损时系统被永久破坏,通常需要使用临时密钥。临时密钥会在一定时间或在一定次数后失效。这样做的目的是尽可能避免密钥被破坏性物理分析(DPA)或其它迭代攻击等方法进行解密。另一种中间人攻击则是在一定时间以后重放截获的合法消息。为了防范重放攻击,主机和闪存设备必须使用累加计数器生成MAC。由于当前的累加计数器值与上一消息的值不同。重放相同的消息就不能通过MAC验证,
一些黑客可以使用先进的技术读取闪存芯片中的全部内容,通过非法克隆牟利。为了防范此类攻击,每个闪存芯片都必须拥有任何人都不能读取的唯一设备秘密(UDS)。UDS值具有唯一性,是每个芯片内的真实随机值。一个芯片和另一个芯片中的UDS之间毫无关联。
UDS可用于推导复合设备标识符(CDI),而这个标识符是生成可信计算工作组织(TCG)设备标识符组合引擎(DICE)规格定义的设备ID证书的基础。一般来说,设备也在CDI的基础上,为所有用主机导出的密钥生成别名私钥公钥对。这样就无需暴露设备ID的私钥。有了UDS和DICE流程后,由于UDS在物理上不可克隆,因此黑客就无法克隆设备。
被动侦听是另外一种已知的攻击方式。攻击者通过在总线上窃听,可从通过总线传输的数据中搜集敏感信息或机密情报。为保护重要数据,用户可选择在通过总线将数据发送到闪存设备,并存储数据前为数据加密。当主机从设备检索数据时,也应对数据进行加密处理,让潜在的黑客永远无机可乘。也许有人会说,加密方法不需要有安全保障的闪存存储解决方案,因为主机可以直接加密数据并将其存储到闪存中。只有主机才能解密数据。
然而,这样做也有一定的缺点。其中之一是主机不能轻易地弃用加密密钥。例如,假设使用KeyA加密数据并将其存储在闪存中,后来用户发现KeyA已被攻破,就需要在系统上使用不同的密钥,即KeyB。
这时,主机陷入两难境地:它不能直接弃用KeyA,因为它需要保留该密钥,才能解密从设备读取的数据。然而,如果KeyA被攻破,用户可能不想永久保留它。如果要使用新的数据加密密钥,用户不得不采取更复杂的措施。先擦除闪存上的原始加密数据,再用新加密的数据为闪存编程。这种 *** 作在现场并非易事,且存在一定风险。
另一方面,如果有安全保障的闪存能够提供加密和解密功能,它就能在其有安全保障的存储中安全地存放明文数据,并在将数据发回给主机之前进行加密处理。如果当前的加密密钥被攻破,主机可以简单地与设备交换新的密钥。存储中的数据保持完整且有安全保障,与存储加密数据相比,是一种简单得多的方法。
(责任编辑:fqj)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)