2. TinyML设备存储基础
TinyML设备的安全存储设计,首先取决于对底层存储介质的深刻理解。与通用嵌入式系统不同,TinyML设备往往面临极端的功耗预算(µA级待机电流)、有限的内存资源(KB级RAM)以及严苛的物理环境(高温、振动、湿度)。密钥、模型参数、校准数据等敏感信息存储在何种介质上,直接决定了攻击者获取这些资产的物理难度与成本。本章将系统剖析Flash、EEPROM、SD卡及外部存储介质的电气特性、读写机制、寿命模型与安全边界,并给出针对TinyML场景的选型判断框架。
上图展示了TinyML设备中四类典型存储介质的定位与安全风险分布。在实际项目中,这些介质往往不是互斥选择,而是以分层组合的方式共存于同一块PCB上。例如,一颗Cortex-M4内核的MCU内部集成Flash用于存放固件与模型参数,外部挂载一颗SPI EEPROM用于存储动态更新的密钥与校准数据,同时预留SD卡接口用于离线日志导出。理解每种介质的物理特性与安全边界,是设计分区存储方案的前提。
核心原理:存储介质的电气特性与安全边界
存储介质的安全属性由其物理结构决定。Flash存储器基于浮栅晶体管(Floating Gate Transistor)实现电荷保持,写入时需要施加高压脉冲(约10~20V)通过隧穿效应注入电荷,擦除操作则需将整个扇区(Sector)或块(Block)统一置位。这种"擦除-写入"机制导致Flash具有三个关键安全特征:擦写粒度大(NOR Flash通常为4KB扇区,NAND Flash为128KB块)、擦写次数有限(典型寿命为10,000~100,000次)、存在读干扰(Read Disturb)现象——频繁读取同一页可能导致相邻单元电荷泄漏。从攻击者视角看,Flash的物理结构允许通过聚焦离子束(FIB)或化学腐蚀去除封装层后,使用微探针直接读取浮栅电荷状态,从而恢复已擦除的数据残留。
EEPROM(Electrically Erasable Programmable Read-Only Memory)采用类似的浮栅技术,但每个存储单元独立编址,支持字节级擦写。这一特性使其成为存储频繁更新的小数据量(如密钥轮换、设备序列号、传感器校准系数)的理想选择。然而,EEPROM的单元面积较大,单位容量成本远高于Flash,且写入速度较慢(典型为5~10ms/字节)。安全方面,EEPROM通常通过I2C或SPI总线与MCU通信,攻击者可以使用逻辑分析仪在总线空闲时窃听数据流,若密钥以明文形式在总线上传输,则极易被截获。
SD卡与eMMC本质上是NAND Flash加控制器的封装体,内部实现了坏块管理、磨损均衡与ECC纠错。这种"黑盒"特性带来双重安全影响:一方面,控制器固件可能包含未公开的后门或漏洞;另一方面,SD卡可被物理移除并插入读卡器进行离线分析,攻击者可以绕过设备端的访问控制直接读取原始NAND数据。对于TinyML设备而言,SD卡更适合存放非敏感的日志、训练数据集副本或OTA升级包,而非密钥材料。
外部安全芯片(如Microchip ATECC608A、NXP SE050)则从架构上改变了信任模型。这类芯片内部集成了硬件加密引擎、真随机数发生器(TRNG)和防篡改检测电路,密钥一旦写入便无法从外部读取,只能通过芯片内部的加密运算间接使用。其安全边界建立在物理防篡改与协议加密之上,即使攻击者完全控制MCU与安全芯片之间的I2C总线,也无法提取密钥明文。
判断方法:TinyML场景下的存储介质选型流程
在具体项目中选择存储介质,需要综合评估数据属性、访问频率、安全等级与成本约束。以下是一个经过多个量产项目验证的四步选型流程:
- 数据分类与安全分级:将需要存储的数据分为三类——机密数据(密钥、签名私钥、设备唯一ID)、敏感数据(模型参数、校准系数、用户特征模板)、普通数据(日志、版本号、配置项)。机密数据必须存储在具备硬件隔离能力的介质中;敏感数据可存储在Flash或EEPROM中,但需配合加密存储;普通数据则无特殊安全要求。
- 访问频率与寿命估算:计算每种数据在设备生命周期内的预期写入次数。例如,OTA固件更新可能每年仅执行2~3次,适合存放在Flash中;而传感器校准参数可能每次开机都会更新,若设备每天重启10次,三年累计约10,950次写入,此时EEPROM的100K次寿命仍有余量,但Flash的10K次寿命则可能耗尽。
- 物理环境与攻击面评估:考虑设备是否暴露在物理可接触的环境中。智能电表、工业传感器等设备可能被安装在公共区域,攻击者有机会进行物理拆解;而车载TinyML模块则面临振动与温度冲击,需选择工业级(-40°C~85°C)的存储器件。若设备外壳可轻易打开,应避免使用可拆卸的SD卡存储任何敏感数据。
- 功耗与启动时间约束:Flash的读取功耗约为1~3mA@3.3V,EEPROM的写入功耗略高但持续时间短,SD卡的初始化功耗可达100mA以上。对于电池供电的TinyML设备,若每次开机都需要从SD卡加载模型,则需评估峰值电流是否超出电池放电能力。
| 存储介质 | 典型容量 | 擦写粒度 | 擦写寿命 | 读功耗 | 写功耗 | 安全等级 | 典型TinyML用途 |
|---|---|---|---|---|---|---|---|
| NOR Flash(内部) | 256KB~4MB | 4KB扇区 | 10K~100K次 | 1~2mA | 5~10mA | 中(可读保护) | 固件、模型参数 |
| NAND Flash(外部) | 8MB~64MB | 128KB块 | 10K~100K次 | 2~5mA | 10~20mA | 低(无内置保护) | 大数据量模型、日志 |
| EEPROM(外部) | 1KB~256KB | 1字节 | 100K~1M次 | 0.5~1mA | 1~3mA | 低(总线明文) | 密钥、校准参数 |
| SD卡 | 512MB~32GB | 512B扇区 | 10K~100K次 | 30~80mA | 50~150mA | 极低(可拆卸) | 日志导出、数据集 |
| 安全芯片(ATECC608A) | 16KB~64KB | — | 500K次 | 1~2mA | 2~4mA | 高(硬件防篡改) | 密钥存储、签名验证 |
案例拆解:智能门锁TinyML模型的存储分区设计
某智能门锁项目采用STM32L4系列MCU(内置1MB Flash,128KB RAM),需要部署一个基于MobileNetV2的人脸识别模型(约2.3MB),同时存储设备密钥、用户指纹模板和操作日志。初始方案将所有数据统一存放在外部SPI NOR Flash中,但安全测试发现两个严重问题:第一,通过ST-Link调试接口可以读取Flash全部内容,模型参数与密钥明文直接暴露;第二,频繁的日志写入导致Flash在预期5年寿命内提前达到擦写上限。
经过分析,项目组决定采用分层存储架构:
- 模型参数(2.3MB)压缩后存储在内部Flash的专用分区中,启用MCU的RDP(Read Protection)级别2,禁止调试接口访问。模型本身经过权重量化(INT8)和剪枝处理,体积降至1.1MB,同时使用AES-128-GCM加密存储,密钥由安全芯片保管。
- 设备密钥与指纹模板(共4KB)迁移至ATECC608A安全芯片中。指纹模板在注册时通过安全芯片的SHA-256哈希后存储,验证时仅在芯片内部完成比对,MCU只接收布尔结果。
- 操作日志(每天约200字节)写入外部I2C EEPROM(24LC256),利用其字节级擦写特性,避免Flash的扇区擦除浪费。EEPROM中仅存放日志的HMAC-SHA256摘要,原始日志通过BLE定期上传至手机App后清除。
改造后的实测数据:攻击者即使拆下Flash芯片并使用编程器读取,也只能获得加密后的模型密文;通过I2C总线嗅探,无法获取任何密钥明文;EEPROM的写入寿命满足10年使用需求。代价是BOM成本增加了约0.8美元(ATECC608A单价),但换来了安全等级从"裸奔"提升至CC EAL4+认证水平。
风险提示:在TinyML设备中,模型参数本身也是重要的知识产权。即使不涉及用户隐私,模型被完整提取后可能导致攻击者进行模型窃取攻击(Model Stealing)。建议对所有部署到边缘设备的模型参数进行加密存储,并在MCU启动时通过安全引导(Secure Boot)验证模型完整性。
常见误区与总结复盘
在多个TinyML项目的存储设计评审中,以下误区反复出现,值得特别警惕:
- 误区一:认为Flash的读保护是万能的。STM32的RDP级别1可以通过攻击Bootloader或利用硬件漏洞绕过,级别2虽然不可逆但会永久禁用调试功能,影响后期维护。对于高安全场景,应假设Flash内容可被读取,因此必须对敏感数据加密存储。
- 误区二:忽略EEPROM的写周期限制。虽然EEPROM寿命比Flash长,但若在中断服务程序中频繁写入(如每次ADC采样都记录),仍可能在数月内耗尽寿命。正确的做法是使用RAM缓存批量写入,或采用环形缓冲区策略。
- 误区三:将SD卡视为"无限"存储。SD卡的文件系统(FAT32)在意外掉电时容易损坏,且磨损均衡算法对随机小写入的优化效果有限。若必须使用SD卡,建议采用顺序写入日志的方式,并定期执行文件系统检查。
- 误区四:忽视存储介质的温度特性。NAND Flash在高温(>85°C)下数据保持时间急剧缩短,可能从10年降至数月。对于工业级TinyML设备,应选择符合AEC-Q100标准的存储器件,并在固件中实现温度补偿的刷新机制。
总结而言,TinyML设备的存储设计应遵循"最小权限、分层隔离、加密兜底"的原则。最小权限意味着每种数据只存放在满足其安全等级的最低成本介质中;分层隔离要求密钥、模型、日志分别存储在不同的物理器件上,避免单点攻破导致全盘泄露;加密兜底则假设所有外部存储介质均可被物理获取,因此敏感数据必须经过加密处理。下一章将深入探讨Flash分区的具体设计方法,包括如何利用MCU的MPU(内存保护单元)实现运行时隔离。
经验提示:在项目早期进行存储介质选型时,建议制作一张"数据-介质-安全措施"映射表,明确每类数据的存储位置、加密算法、密钥管理方式以及访问控制策略。这张表不仅是设计文档的核心部分,也是后续安全审计和认证的重要依据。