在数据中心中,云服务器由各种处理设备和外围组件(如加速器和存储设备)组成,这些设备通常都运行着固件。对云平台服务商来说,为保证这些设备的安全可靠,需要一种或多种机制,来保证这些设备在测试,运输,安装和使用期间都能拥有完整性校验的保护机制,禁止未经授权的代码执行并抵御潜在的攻击。
Secure Boot正是为此而生。它是由OCP(Open Compute Project)Security Workgroup制定的标准规范,允许设备在加电/重置之后、正式启动之前,对固件的完整性进行验证,只有验证通过,设备才被允许加载固件,进入正式的启动流程。
RoT和CoT
以SSD为例。要实现Secure Boot功能,SSD需要同时实现RoT(Root of Trust,信任根)和CoT(Chain of Trust,信任链)两个重要功能。RoT必须是不可变的,不被外部访问或修改,它负责对CoT进行完整性校验,而CoT又负责对主Firmware进行完整性校验。Secure Boot的大体流程如下所示:
签名的生成和校验
在存储设备中,数字签名通常用来检测数据的完整性,也就是数据是否有被篡改。数字签名算法包括签名的生成过程和签名的验证过程。每个数字签名都有相应的密钥对(Key Pairs),即我们常说的公钥和私钥,它们归签名的签署者(如OEM厂商)所有,签署者也是唯一被授权使用私钥生成数字签名的实体。
上图是数字签名的生成和验证过程:
- 数字签名生成过程:数据通过特定的哈希函数转换为固定长度的数据摘要,摘要通过私钥和数字签名算法形成数字签名。
- 数字签名验证过程:数据通过特定的哈希函数转换为固定长度的数据摘要,摘要通过公钥、数字签名和数字签名验证算法,验证被签名的数据是否具有完整性。
需要指出的是,私钥是签署者独有的,必须保持机密,不被公开;公钥则不需要保密,只需要保持其完整性即可,任何人均可使用公钥验证签名是否正确。
Secure Boot具体流程
所有支持Secure Boot功能的SSD通常会在其主控芯片内存在一个固定的、不可修改的Boot ROM单元,它是重要的RoT信任根,也是SSD上电/重置后执行的第一个组件,负责初始化Secure Boot功能,并对信任链CoT加以验证。
同时,在主控芯片中还存在另一个重要的RoT信任根——eFuse,负责存储公钥的摘要,也是固定在主控芯片中的根秘钥。
- Boot ROM首先会读取签名固件中的公钥,并把引导程序(Boot Loader)从EEPROM(或Nor Flash)中的已知位置读取到主控芯片内部的SRAM当中。注意:在进行数字签名验证和安全引导的时候,没有任何接口或外部端口可以访问内部SRAM的这个区域。
- Boot ROM在SRAM中计算签名固件中的公钥的哈希值,并与存储在eFuse中的根密钥的哈希值进行比较。二者如果匹配,说明公钥是完整的、可信的。
- Boot ROM使用该公钥对Boot Loader FW进行签名校验,通过进一步的复杂计算,获取到Boot Loader FW的摘要,并将其与用于签名Signature的摘要进行比较, 如果匹配,将进入Boot Loader FW的加载引导流程。
- Boot Loader校验无误后,会作为信任链CoT中的可信组件,对Main Firmware进行签名校验。如果签名的摘要校验无误,将继续进行Main Firmware的加载引导流程。至此,Secure Boot流程完成。
Secure Boot算法
对于可变代码(如Firmware)的摘要生成或公钥的生成,一般要求SHA2-256或更高级别算法;
对于Firmware Image签名的生成,可遵循多种算法,常见规范如下:
- RSA PSS PKCS#1 v2.1, 3072 bit 密钥长度或更高
- ECDSA 384 bit 密钥长度或更高
- Digital Signature Standard (DSS) FIPS 186-4
如果需要对Firmware Image进行加密,加密算法一般遵循AES-256,AES模式可选择AES-GCM、AES-CBC或AES-XTS。
Memblaze致力为用户提供可靠、安全的高性能闪存存储产品。在我们即将发布的PBlaze新品中,将搭载Secure Boot功能,结合AES-XTS-256硬件数据加密技术、固件加密、固件安全下载等机制,进一步提高NVMe SSD的安全性,降低用户数据泄露的可能。
参考文献
- Hardware Secure Boot 1.0 by OCP Security workgroup
- NIST.FIPS.186-4
- NVM-Express-Base-Specification-2.0b-2021.12.18-Ratified.pdf