一些微控制器配有片载EEPROM,这样既提供了非易失性数据存储器,还能节省电路板空间。然而,随着数据安全变得愈发重要,许多现代嵌入式系统需要一种实用的方法,利用非易失性存储器来安全地存储数据,同时还要能抵御外部黑客的攻击。
本文将介绍如何利用单芯片安全EEPROM来抵御黑客攻击,安全地存储非易失性数据,而不过多地涉及详细的加密功能。相反,本文将介绍一款来自知名供应商的合适的安全EEPROM示例,并描述该EEPROM的工作原理和应用方式。
为什么要用EEPROM?
许多嵌入式系统都得益于非易失性数据存储器,而EEPROM便是典型的代表之一。与掉电时失去状态的RAM相比,EEPROM可在系统掉电时依靠固件控制来执行读写操作并保持其状态。
虽然微控制器内的EEPROM总是会有助于存储那些掉电时须保留的程序数据,但这种存储器通常存在与RAM相同的安全漏洞。在一些现代的8位、16位和32位微控制器中,有一些安全方法可以避免在固件控制下读取数据存储器区域,或阻止调试器等外部接口读取数据。在过去,这种安全性可能称得上足够充分,但如今,在许多情况下,黑客可能拥有足够的资金、时间、动机和资源来绕过这种看似充分的安全性,获得对关键系统的访问权限。
如今,随着现代嵌入式系统的发展,许多应用都需要更强大数据保护能力。在一些物联网节点、安防系统、车到车通信、现代医疗设备和自主驾驶车辆中尤其如此。仅仅是预防系统克隆也可能需要数据安全性。在一些应用中,如果EEPROM数据因为受到恶意黑客的成功攻击而造成泄露,可能会导致财产损失或更糟糕的情况发生。
在这类情况下,就需要强有力的EEPROM去防御拥有大量资源的黑客。这时可使用具有高安全性的EEPROM,它能轻松地对密码、克隆哈希、指纹数据、传感器校准信息以及生物识别数据等敏感数据进行加密。
Microchip Technology已凭借一系列CryptoAuthentication器件解决了这一设计问题。如果这些器件听起来很熟悉的话,那是因为Microchip是通过收购Atmel延续了该产品系列。ATAES132A 32KB安全EEPROM就是来自该系列的前述器件之一(图1)。
图1:ATAES132A 32KB串行EEPROM专门设计有安全功能,可用于保护数据和内部寄存器。(图片来源:Digi-KeyElectronics)
ATAES132A可以像任何标准32KB串行EEPROM一样使用。该器件采用标准SPI和I2C引脚分配,因此无需任何硬件修改便能替换现有设计中的标准串行EEPROM。这样一来,现有设计只需修改应用固件,便可轻松升级额外的安全性。
此外,该器件还具有显著的物理保护功能、加密功能和其他融入设计的安全功能;启用这些功能后,将可以保护EEPROM数据和内部寄存器免受最顽固的黑客以外的所有黑客攻击。数据可以通过使用军用级AES加密技术(最多16个128位密钥)进行保护。
多方面的物理保护
首先,ATAES132A 具有许多机械安全机制,可防止器件受到物理上的反向工程。该器件对环境温度的某些变化很敏感,以应对例如试图“深度冻结”器件以维护存储器内容等手段。它还能检测试图暴露芯片的“去盖”尝试——金属屏蔽可以遮盖芯片,如果将其移除,芯片将可以检测其是否曝露于光线中,而这种曝光可能引发破坏存储器内容的机制。
最后,存储器内容得到加密。该器件还可能包括只有Microchip工程师才知道的未公开安全机制,因为Microchip会对这些安全机制的细节保密,这就为安全存储器提供了广泛的物理安全性,无需开发人员构建复杂的外壳来提供EEPROM屏障。
上电时,可将ATAES132A配置为使用SPI或I2C接口对接至大多数微控制器。当采用I2C模式时,不使用片选引脚,并且必须将该引脚连接到电源或接地。当配置用于SPI模式时,按照常规会使用片选引脚。
安全EEPROM的AES数字加密
通过将AES-CCM与128位密钥一起使用,可在ATAES132A上实现加密。简而言之,针对将要加密的数据引入一系列复杂的数学函数处理,使得这些数据与固件开发人员所设定的128位数字进行组合。AES加解密操作过程中执行的复杂数学运算均由ATAES132A完成,而且除了设置一些变量和选择128位密钥外,此过程对固件开发人员而言是透明的,从而大大简化了产品开发。
详解ATAES132A存储器映射
该器件可以简单地用作标准非加密串行EEPROM。但如果开发人员使用高级安全功能,则器件的结构和使用方式会有很大差别。要了解ATAES132A,最快捷的方法是检查存储器映射,如表1所示,该映射比标准EEPROM的映射更加深入。
表1:ATAES132A存储器映射比标准串行EEPROM映射更深入。(数据来源:Microchip Technology)
此存储器映射中的大多数位置都是使用标准I2C或SPI命令读取或写入的。
EEPROM和存储区安全配置寄存器
这款32KB数据EEPROM存储器被分为16个2KB存储区。每个存储区都可以单独配置安全性(或不配置安全性)。16个存储区分别在存储区安全配置寄存器区域设置安全性设置。以下是可以为16个2KB存储区分别单独设置的基本安全性设置:
• 启用/禁用加密以读取数据
• 启用/禁用加密以写入数据
• 启用/禁用身份验证以读取数据
• 启用/禁用身份验证以写入数据
• 将存储区永久设置为只读
在设置应用的安全性时,这些设置项能够提供极大的灵活性。一个存储区可以设置为不使用加密、不对读/写访问进行身份验证,从而允许像任何标准EEPROM一样进行读写。另一个存储区则可能要求进行完全加密和身份验证,从而为敏感数据提供高安全性。
器件配置寄存器
器件的一般特性可在器件配置寄存器区域设置。此区域还包含关于器件的一些只读信息,包括用于标识器件的唯一32位器件序列号。其他寄存器允许将存储区或其他寄存器设为只读,也称为锁定存储器。一旦锁定某个寄存器或存储区,将是永久性锁定,永远无法解锁。
此区域还有I2CAddr寄存器,用于配置器件是在I2C模式还是SPI模式下使用。器件上电时会写入1个字节的I2CAddr寄存器。I2CAddr的0位决定串行接口模式。如果固件写入0,则将器件配置为SPI模式。如果写入1,则选择了I2C模式。如果选择了I2C模式,7位器件地址为50h。
命令和响应存储缓冲区
虽然可以使用标准SPI或I2C寻址来访问器件中的存储器位置,但器件也接受类似于微控制器的命令。命令及其操作数(称为“命令块”)可能是一个或多个字节,并且始终直接写入到位于地址FE00h的命令和响应存储缓冲区。命令块由一个单字节指令、一个或多个字节的操作数和一个2字节校验和组成。
可用命令包括数据验证、来自EEPROM存储区的块读取、递增计数器,以及直接读取任何需要验证的受保护存储器或寄存器。命令响应可从同一位置FE00h读回。FE00h的所有写入均是发送到命令存储缓冲区的命令,来自FE00h的所有读取均来自响应存储缓冲区。
位于FFE0h的I/O地址复位寄存器是一个只写寄存器,用于复位命令和响应存储缓冲区。向FFE0h写入任何值都需要执行两项操作:将命令存储缓冲区清除,以便可以接受新的命令块;将响应存储缓冲区复位至零,以便可以从头开始读取内容。
复位响应存储缓冲区可允许固件重新读取整个响应。这在以下代码中可能非常有用:代码中发生中断时主机微控制器正在读取响应存储缓冲区,而且在从中断恢复时需要从头开始重新读取数据。
此外,还有一些命令可针对EEPROM的读写操作执行AES加密和解密。这些计算极其复杂,本文将不予讨论。不过,Microchip提供的微控制器驱动程序和固件可以轻松执行所有这些功能,因此程序员只需了解很少的AES加密知识即可。
存储区计数寄存器
该寄存器区域包含16个与各存储区关联的只读计数器。各存储区均使用其128位存储区密钥完成加密或解密。每次使用存储区密钥时,关联的32位存储区计数器可能递增也可能不会递增,具体取决于关联的存储区计数器配置寄存器中的设置。出于安全目的,计数器永远不会递减或复位。
固件可以直接写入存储区计数器,以将其递增到初始值,但绝不可递增到低于现有计数器内容的值。制造期间可以写入并锁定存储区计数器,以限制计数数量。当计数器达到最大值2,097,151时,可以永久禁用关联的密钥,以防止使用该密钥执行进一步的加密或解密操作。这对于有限使用密钥可能非常有用,例如,允许重新闪存微控制器固件有限的次数。
为实现额外的安全性,每个32位存储区计数器都是重复的,这样做是为了在存储区计数器递增期间发生电源故障的情况下,可以检测存储区计数器是否损坏。应用上电时,固件应读取所有存储区计数器的两个计数器值。如果在某个耐用型应用中这两个值不同,则证明存在未经授权的掉电事件,而这可能表明有人在未经授权的情况下试图在应用运行时禁用其安全功能。
状态寄存器
ATAES132A状态寄存器为只读寄存器,用于指示包括错误的校验和命令错误在内的错误代码,还可以指示ATAES132A是处于I2C模式还是SPI模式,以及命令的进度和响应的有效性。该寄存器应在所有读取、写入、命令和响应前后进行读取。错误可能指示干扰主机微控制器和ATAES132A之间的I2C或SPI连接的外部企图。出现错误时,采取哪种通知方式取决于主机固件,例如提示操作员或发出警报。
在制造过程中设置ATAES132A
为帮助开发,Microchip提供了DM320109 Xplained-Pro CryptoAuthentication入门套件(图2)。ATAES132A可以连接到Microchip ATSAMD21J18A Arm Cortex-M0+ 微控制器。
图2:Microchip的DM320109 Xplained CryptoAuthentication入门及开发套件提供了一种简单的方式来评估和开发ATAES132A代码。该套件配有大量代码示例,可以与大多数支持Windows、Linux或MacOS的PC连接。(图片来源:MicrochipTechnology)
Microchip的ATSAMD21J18A微控制器配有USB接口,可与PC开发环境连接。该控制器既支持I2C接口,也支持SPI接口,两种接口均可用于连接ATAES132A。使用随附的USB电缆连接到目标PC后,可使用该套件来配置和监控ATAES132A的所有功能。
提供的第二根USB电缆可用于监控并记录ATAES132A和ATSAMD21J18A之间的数据包。此电缆一端连接Xplained电路板,另一端连接PC上的可用USB端口。然后,开发人员可以监控微控制器和EEPROM之间的信号,观察两个器件之间移动的加密数据。
Xplained套件附带了ATAES132A的所有固件库和示例代码。在充分了解本文描述的ATAES132A存储器映射和寄存器之后,开发人员即便对器件加密知之甚少,也能轻松地自定义示例代码,以符合其目标应用。
AES 128位加密是一个复杂的主题。尽管如此,开发人员仍可以在专为此目的而设计的EEPROM中保护敏感数据。而这有赖于机械保护、强加密、特殊分区和存储器映射,以及只有公司和/或最终用户知道的自定义或机密功能。
全部0条评论
快来发表一下你的评论吧 !