可编程数字器件的大规模引入,使得嵌入式系统的实现具有越来越多的高级功能。现场可编程门阵列(FPGA)已经实现了曾经只能通过专用硬件设计才能实现的性能。然而,与定制硬件系统相比,FPGA具有高灵活性和高可配置性等优点,可以满足广泛的应用需求。将一个或多个内核处理器与FPGA模块集成在一起的SoC的问世,证实了逐步采用高度集成的可编程器件的趋势,一个例子是Xilinx的Zynq(图1)。
图1:Xilinx Zynq UltraScale+。(图片来源:AMD Xilinx)
FPGA日益广泛的使用正使设备面临可能的攻击,从而就突出了安全问题——知识产权保护和敏感数据保护。获取到FPGA内容的恶意行为者将可能获得专有信息和算法,并有可能对公司造成经济和形象损失。此外,FPGA配置可能会因非法或欺诈目的而受到更改。
下面,我们分析了FPGA可能暴露的主要漏洞,并介绍了可编程器件制造商所采用的作为防篡改措施的技术。
有多种方式可以破坏FPGA的安全性和数据完整性,包括:
随着时间的推移,FPGA制造商推出了旨在防止或阻止这些攻击的对策,同时保护可编程器件的安全性。
第一种普遍采用的技术是针对比特流加密,然后通过集成在芯片中的适当功能块在硬件级别执行其解码。最广泛使用的加密标准之一是高级加密标准(AES)。AES基于Rijndael算法,使用128、192和256位的对称密钥(使用相同的密钥进行加密和解密)。在编程阶段,算法将生成密钥并将其存储在FPGA的电池备份RAM (BBRAM)内,这是一种随机存取存储器,其内容由缓冲电池保存(其持续时间可达几十年)。在引导阶段,集成的AES引擎将接收比特流,对其进行解密,并将配置数据传递给配置逻辑。因为配置数据在任何I/O端口上都不是明文可见的,所以不可能从外部拦截比特流。
比特流加密的另一种技术是将FPGA配置存储在芯片内部,仅使用内部通信总线在启动时加载它。图2显示了Lattice XP FPGA的编程框图。配置比特流可以从内部闪存加载到SRAM,此操作不仅更安全,而且速度更快,只需几微秒。也可以通过JTAG1532接口(也用于对闪存进行编程)从外部加载比特流,尽管此操作需要更长的时间才能完成(几秒钟)。
图2:LatticeXP编程框图。(图片来源:Lattice Semiconductor)
在一些FPGA型号上,解码密钥还可以在编程阶段存储在一次性可编程存储器中,从而增加对外部攻击的保护程度。
Xilinx在UltraScale系列上采用的密钥混淆技术是另一种安全措施。如图3所示,该方法使用AES-GCM算法,通过将家族密钥(仅Xilinx已知)与用户所选择的密钥相结合来获得混淆密钥。这样获得的密钥将存储在FPGA中。比特流将使用AES-GCM和用户密钥加密并存储在外部闪存中。对于启动期间的比特流解密,将应用相反的过程:将混淆密钥和家族密钥组合以获得所需的用户密钥。
图3:混淆密钥机制。(图片来源:AMD Xilinx)
为了应对旨在注入不正确比特流的攻击,许多FPGA实施了拒绝加载利用不正确密钥编码的比特流并在该配置校验和不正确时将其擦除的机制。
为了增强对SCA的保护,许多FPGA会监控并计算任何错误比特流解码的发生次数。一旦达到某个可编程阈值,就会将存储的密钥擦除,并必须对器件进行重新编程。
虽然FPGA似乎极易受到捕获密钥和解码比特流的攻击,但这类器件的制造商已采取足够的措施让用户能够实施有效的对策。当今市场上可用的不同类型的FPGA,提供了与任何类型的应用兼容的必要安全级别。
(原文刊登于EDN姊妹网站EE Times欧洲版,参考链接:Security and Anti-Tamper Challenges of Programmable Devices,由Franklin Zhao编译。)
本文为《电子技术设计》2023年1月刊杂志文章,版权所有,禁止转载。免费杂志订阅申请点击这里。