2、硬件安全芯片基础:安全芯片的架构与核心安全功能

硬件安全芯片(Secure Element,SE)是信息安全体系中的“信任根”(Root of Trust),其本质是一个具备独立计算能力、安全存储能力和物理防护能力的专用SoC。与通用MCU或应用处理器不同,安全芯片的设计目标并非追求极致算力,而是在受限的功耗与面积预算内,实现高强度的数据隔离、密码运算和抗物理攻击能力。理解安全芯片的架构组成、物理安全特性以及核心安全功能,是进行CC EAL(Common Criteria Evaluation Assurance Level)评估的前提。本章将从芯片内部模块划分出发,逐步深入到物理防护机制与典型安全功能的实现原理,帮助学员建立对安全芯片的系统性认知。

安全芯片内部架构与安全功能链路 安全芯片(Secure Element) CPU 核心 ARM SC300 / RISC-V MPU / TrustZone 存储器 ROM / Flash / RAM 安全分区 / 加密存储 密码引擎 AES / RSA / ECC SM2 / SM3 / SM4 TRNG 物理噪声源 熵源 / 在线自检 物理防护 主动屏蔽层 电压/温度/频率检测 安全总线 AHB / APB 总线加密 / 访问控制 外部接口 I2C / SPI / SWP / NFC 安全功能 安全启动 / 密钥存储 / 真随机数 外部攻击面 侧信道 / 故障注入 / 物理探测 内部模块通过安全总线互连,外部接口受访问控制策略约束 安全启动链(Secure Boot Chain) ROM 引导 Bootloader OS / App 逐级验证签名,任何一级失败即进入安全失败状态

2.1 安全芯片的硬件架构:模块划分与设计原则

核心原理:从通用SoC到安全SoC的差异

安全芯片的架构设计遵循“最小化攻击面”与“安全隔离”两大核心原则。与通用处理器追求高性能不同,安全芯片通常采用低功耗ARM Cortex-M系列(如SC300)或RISC-V安全核,主频一般在几十MHz到两百MHz之间。其内部结构可划分为五大关键模块:CPU核心、存储器子系统、密码引擎、真随机数发生器(TRNG)以及物理防护单元。这些模块通过内部安全总线(如AHB/APB)互连,并配备独立的访问控制单元(Memory Protection Unit, MPU)或TrustZone技术,确保任何外部实体都无法直接访问敏感资源。

存储器设计是安全芯片架构的重中之重。典型的安全芯片包含三种存储介质:ROM用于存放不可更改的启动代码(Root of Trust),Flash或EEPROM用于存储应用代码和密钥数据,RAM用于运行时数据暂存。其中,密钥等敏感数据通常存储在Flash的专用安全分区中,该分区受硬件加密引擎保护,即使通过物理探针读取Flash内容,也只能获得密文。此外,部分高端安全芯片还集成了易失性密钥存储(如电池供电的SRAM),用于在芯片断电后立即清除密钥,防止冷启动攻击。

架构评估要点:在CC EAL评估中,审查员会重点检查CPU是否具备特权/用户模式隔离、存储器分区是否满足“最小权限”原则、总线仲裁器是否有效防止DMA攻击等。例如,EAL5+级别的芯片必须保证任何软件漏洞都无法导致安全边界被跨越。

判断方法:如何快速评估芯片架构安全性

  1. 检查CPU安全特性:确认是否支持MPU、TrustZone或物理内存隔离(PMU)。若芯片仅提供普通MCU内核且无任何隔离机制,则不适合作为高安全等级评估对象。
  2. 分析存储器映射:查看芯片手册中的存储器映射表,确认安全分区地址范围是否固定、是否支持硬件写保护(如OTP寄存器)。
  3. 验证总线访问控制:确认所有Master设备(CPU、DMA、密码引擎)是否都经过总线仲裁器,且仲裁规则是否可配置。
  4. 确认调试接口状态:JTAG/SWD接口在量产芯片中必须被永久禁用或需要严格认证后才能激活。

案例拆解:某金融支付芯片的架构分析

以一款用于银行卡的EAL6级安全芯片为例,其架构采用双CPU核设计:一个应用处理器(AP)负责运行Java Card虚拟机,另一个安全监控核(SMC)独立运行,实时监测AP的行为和电源波形。存储器方面,该芯片将Flash划分为4个独立分区:代码区、数据区、密钥区(硬件加密)和一次性可编程区(OTP)。在评估过程中,测试团队尝试通过冷启动攻击(将芯片降温至-40℃后快速上电)读取RAM中的残留密钥,但由于芯片设计了RAM数据自毁电路(检测到温度异常立即清零),攻击未能成功。这一案例说明,架构层面的冗余设计和主动防御机制是提升评估等级的关键。

常见误区与复盘

误区1:认为主频越高芯片越安全。实际上,高主频会增加电磁辐射,反而加剧侧信道泄露风险。
误区2:忽略DMA(直接内存访问)通道的安全配置。DMA若不受MPU约束,可成为绕过CPU权限检查的“后门”。
复盘建议:在架构设计阶段就引入威胁建模(如Microsoft TMT),针对每个内部模块间的数据流进行攻击路径分析。

2.2 物理安全特性:防篡改与防侧信道

核心原理:物理攻击的威胁模型

物理安全特性是安全芯片区别于普通安全软件的核心能力。攻击者可能使用聚焦离子束(FIB)探针直接读取内部信号线,或通过功耗分析(SPA/DPA)、电磁辐射分析(EMA)窃取密钥,甚至利用激光或电压毛刺诱导芯片产生错误运算结果。因此,安全芯片必须从设计层面构建纵深防御体系。

防篡改(Tamper Resistance)机制包括:主动屏蔽层(Top Metal Mesh),即在芯片顶层金属布设密集的蛇形走线网络,任何试图切割或钻孔的行为都会导致网络断路,触发安全响应;环境传感器,包括电压检测器(检测电源毛刺)、温度传感器(检测异常高温/低温)、频率检测器(检测时钟毛刺)和光传感器(检测芯片开盖);安全响应单元,一旦检测到攻击,立即触发密钥自毁、芯片锁定或进入死循环状态。

防侧信道(Side-Channel Resistance)则主要通过三种技术实现:掩码技术(Masking),将敏感中间值拆分为多个随机共享分量,使功耗与数据相关性被随机化;隐藏技术(Hiding),通过引入随机延时、双轨逻辑(WDDL)或噪声发生器,使功耗曲线难以对齐;算法级加固,如使用常数时间算法(Constant-Time)避免条件分支导致的功耗差异。

攻击类型 攻击手段 防护机制 评估验证方法
侵入式攻击 FIB探针、芯片开盖 主动屏蔽层、光传感器 EAL5+要求进行物理探测测试
侧信道攻击 功耗分析、电磁分析 掩码、隐藏、噪声注入 TVLA(测试向量泄露评估)
故障注入 电压毛刺、激光照射 电压/频率检测器、冗余计算 故障注入测试(FI)

操作流程:物理安全特性的验证步骤

  1. 目视检查:使用显微镜检查芯片表面是否有异常焊点或开盖痕迹。
  2. X-Ray检查:确认内部屏蔽层走线是否完整,是否存在FIB修改痕迹。
  3. 环境应力测试:在-40℃至+85℃范围内循环测试,观察芯片是否触发安全响应。
  4. 侧信道泄露评估:采集10万条以上功耗曲线,使用TVLA统计方法判断是否存在数据依赖性泄露。

实战场景:侧信道攻击的完整测试闭环

在某次EAL5+评估中,测试团队对一款车规级安全芯片进行DPA攻击测试。初始阶段,团队使用1000条功耗曲线尝试恢复AES-128密钥,但未能成功。进一步分析发现,芯片采用了基于随机延时插入的隐藏技术,导致曲线对齐困难。团队随后改用互信息分析(MIA)方法,不依赖精确对齐,最终在5万条曲线下成功恢复了部分密钥字节。这一结果促使芯片厂商在下一代产品中增加了更高级的掩码方案。该案例表明,评估实验室需要同时掌握多种侧信道分析技术,且芯片厂商应预留足够的侧信道安全裕量(通常要求攻击复杂度达到2^60以上)。

经验提醒:防侧信道设计并非“越复杂越好”。过度复杂的掩码电路会增加面积和功耗,且可能引入新的组合逻辑泄露。建议在芯片设计阶段就使用EDA工具进行功耗仿真,提前发现泄露点。

2.3 常见安全功能:安全启动、密钥存储与真随机数生成

核心原理:三大基础安全功能的实现机制

安全启动(Secure Boot)是芯片建立信任链的起点。其流程为:芯片上电后,ROM中的固化代码(Root of Trust)首先验证Bootloader的签名,Bootloader再验证操作系统或应用代码的签名。每一级验证都使用存储在OTP或一次性熔丝中的根公钥。任何一级验证失败,芯片将拒绝启动并进入安全失败状态(如锁定所有调试接口)。

密钥存储是安全芯片的核心价值所在。密钥在芯片生命周期内可能经历生成、存储、使用、更新和销毁五个阶段。安全芯片通常提供硬件密钥树(Key Hierarchy)机制:根密钥(Root Key)存储在OTP中,由根密钥派生设备唯一密钥(Device Unique Key),再进一步派生应用密钥。所有密钥在Flash中均以密文形式存储,且解密操作仅在密码引擎内部完成,CPU无法直接读取明文密钥。

真随机数发生器(TRNG)是密码系统安全性的基石。安全芯片的TRNG通常基于热噪声、抖动或亚稳态电路实现。其输出必须通过NIST SP 800-90B或国密GM/T 0008标准的熵源检测。一个合格的TRNG应包含:物理噪声源、数字化采样电路、在线自检模块(检测固定值、重复模式)以及健康状态寄存器。

操作流程:安全启动的验证与配置

// 安全启动验证流程伪代码
void secure_boot() {
    // 1. 读取OTP中的根公钥哈希
    root_pubkey_hash = read_otp(OTP_ROOT_KEY_HASH);
    
    // 2. 验证Bootloader签名
    bootloader_sig = read_flash(FLASH_BOOTLOADER_SIG);
    bootloader_hash = sha256(read_flash(FLASH_BOOTLOADER));
    if (!verify_rsa(root_pubkey_hash, bootloader_sig, bootloader_hash)) {
        enter_fail_state(); // 进入安全失败状态
    }
    
    // 3. 跳转执行Bootloader
    jump_to(bootloader_entry);
}

案例拆解:TRNG熵源失效的排查过程

某物联网安全芯片在量产测试中发现,部分芯片的TRNG输出存在周期性重复模式。初步排查排除了设计缺陷,怀疑是晶圆制造工艺偏差导致噪声源增益不足。测试团队使用频谱分析仪检查TRNG模拟前端输出,发现噪声功率谱密度在特定频段出现凹陷。进一步分析确认,是芯片封装过程中的应力导致环形振荡器频率漂移。解决方案是在芯片内部增加一个校准电路,通过调整偏置电流将噪声源恢复到最佳工作点。该案例提醒我们,TRNG的物理实现必须考虑工艺角(Process Corner)和温度漂移的影响,且在线自检功能必须能够捕获此类退化。

常见误区与总结

误区1:将软件随机数生成器(PRNG)误认为TRNG。PRNG的种子若来自TRNG,只能称为DRBG(确定性随机位发生器),不能替代TRNG的物理熵源角色。
误区2:安全启动只验证一次。实际上,安全启动链应覆盖从ROM到应用运行的全过程,且应支持运行时完整性检查(如使用ARM TrustZone的运行时隔离)。
误区3:密钥存储只关注Flash加密,忽略密钥在CPU寄存器中的暴露。建议使用硬件密码引擎直接处理密钥,避免密钥进入CPU通用寄存器。