用芯片 UID 做一机一密:功能激活与外部数据保护
嵌入式产品量产之后,会反复面对几类风险:电路与固件被整体复制后低价售卖;按台授权的增值功能,激活凭证一旦被复制传播即失去约束;存放于外部存储介质的敏感数据,拆下芯片后可直接读取;开源硬件配套闭源固件的产品,固件本身缺少防止未授权复制的机制。
这些问题的共同点在于:固件没有与具体设备绑定。每颗 MCU 出厂时都烧录了不可更改的唯一编号(UID),将其与一段不随固件分发的随机数据(盐)组合,可以为每台设备派生一把唯一密钥(key)。以此为基础,可以实现资源加密、功能激活与外部数据保护,且无需额外安全芯片,通用 MCU 即可完成。
一机一密:密钥在设备端派生,盐不可获取
密钥不写入固件,而是由设备在运行期通过 key = hash(芯片 UID + Flash ID + 盐) 现场计算。hash 为单向运算,可正向计算、不可逆向推导;UID 每台设备各不相同,因此派生出的 key 天然具有唯一性。
盐存储在开启读保护(Read Protection)的芯片内部,不随固件对外分发。读保护是芯片提供的一种访问控制机制,开启后外部调试工具无法读取片内程序与数据。最终用户仅持有工厂生成的 key,可以完成加解密,但无法反推盐的值,也无法为其他设备派生 key。
每次加解密需搭配一次性随机数(nonce)。同一把 key 下 nonce 不得重复使用,否则攻击者可通过对比两段密文还原明文。
设备端:明文进入加密模块,现场派生 key 后加密,返回密文与 nonce;解密复用同一把 key。
用户端:仅持有 key 与 nonce,在本地完成加解密,全程接触不到盐。
功能激活:一机一码,换机失效
基于每台设备唯一的 key,增值功能可实施一机一码授权:工厂按设备 ID 签发激活凭证,凭证仅能被本机 UID 派生出的 key 解密,迁移到其他设备即失效。对资源文件同理:工厂烧录阶段读取设备 ID,对资源加密后生成专属固件,复制到其他板卡后无法解密。
因此,即使固件被整体复制,被复制的也只是代码本身;增值功能与专属资源均绑定设备身份,不会随代码迁移。
左侧为工厂生产流程:读取 UID 派生 key、加密资源、刷入专属固件;右侧为设备运行流程:安全启动、开启读保护、派生相同 key 解密资源。两侧 key 一致时资源才能解密。
外部数据保护:片外介质只存密文
运行记录与传感器数据若直接存放于外部 Flash,拆下芯片即可读取;在通信线上挂接逻辑分析仪同样可以还原完整数据。对于一次性温度记录等对数据真实性敏感的产品,记录一旦被篡改,报告即失真。
对此,数据在写入片外介质前先加密,读取时解密并校验。无论拆片读取还是抓取总线,攻击者得到的都是密文,篡改后无法得到有效数据。
传感器产生的数据先经设备加密模块转为密文,再由存储模块写入片外介质,落盘内容始终为密文。
算法选型可参考 ChaCha20 加密 FlashStore 存储数据。注意 ChaCha20 仅提供机密性,不提供完整性校验;如需防篡改,应叠加 Poly1305 或 HMAC。
方案的局限
上述设计均以"固件不可读出"为前提,该前提可以被多种方式打破:物理开盖配合探针、电源故障注入可暴露调试接口;从 RAM 启动或利用固件漏洞执行任意代码,可完整读出 Flash 内容。AI 辅助逆向进一步降低了破解门槛。
固件泄露后的攻击路径主要有两条:
- 保留解密流程,绕过校验:修改校验分支,或将动态读取 UID 改为写死固定值。写死值必然对应某一台真实设备,可据此追溯出货渠道,相当于留下身份印记。
- 替换为明文资源:将解密后的资源重新打包为明文写入固件,加载流程不再走解密,UID 也无需写入,不留下任何痕迹。
此外,批量山寨可以购买一台正品作为"种子"进行整体复制,溯源只能追溯到该台设备本身。
更常见且容易被忽视的问题,是密钥存放在上位机软件中。PC 端程序可通过 dnSpy 等反编译工具获取密钥,AI 辅助下甚至无需通读代码即可定位。基本原则是:凡是运行在用户本机的软件,都不应包含密钥。密钥应存放在不可读的芯片内,或将关键运算迁移至云端、密钥不出服务器。
一个实际案例:上位机将设备 UUID 上报云端,云端下发加密固件,随后在上位机内解密,再将明文固件传输给设备。该链路中,固件仅在云端到上位机之间为密文,上位机到设备之间为明文,整体保密性完全依赖上位机中的密钥。反编译上位机即可获取密钥并解出任意固件。正确做法是将解密放在设备端:云端使用该设备的密钥加密,固件到达设备内部后再解密,上位机仅搬运密文,不持有任何密钥。
优先开启读保护
在所有防护措施中,读保护是成本最低、应当最先实施的一项。软件级防护容易被绕过;硬件级读保护(如主流芯片的 RDP2、eFuse 熔断机制)配置不可逆,可封死调试接口,成本几乎为零,应默认开启。
但需要明确其边界:不可逆仅指配置不可恢复,不等于无法拆解。已有芯片厂商公告过利用电磁故障注入绕过安全启动与 Flash 加密的漏洞,主流芯片的读保护也存在非侵入式提取手段。独立安全芯片、TrustZone 等方案可将密钥与关键运算移出攻击面,但同样只是提高破解成本,并非绝对安全。
结论
安全性无法做到绝对,防护投入应与其风险等级匹配。对多数产品而言,真正难以复制的是功能完成度、硬件设计细节、校准与工艺积累,以及可靠性、供应链、交付、售后等环节。这些能力不在固件中,复制电路板或采购元器件都无法获得。
代码与电路可以被完整复制,但把产品做到什么程度,是抄不走的。