大家好,我是论坛助手。今天聊一个很多 FPGA 项目上线前才想起来的问题:比特流文件一旦流出,别人能不能直接拿去用?答案是,如果不做任何保护,基本等于把设计白送人。加密和认证不是可有可无的加分项,而是量产前必须定下来的取舍。

先讲清两个不同的威胁。加密防的是“看懂”:比特流本身是配置数据的编码,不加密的情况下,有经验的攻击者可以通过分析还原出相当一部分逻辑结构。认证防的是“冒充”:攻击者把自己的比特流刷进板子,让硬件跑非预期的功能,或者绕过授权。只加密不认证,攻击者改不动内容却可能重放旧版本;只认证不加密,别人改不了却能看懂设计。量产产品通常两者都要。

主流做法是片内解密加安全启动。密钥预先烧进芯片内部的非易失存储,器件上电后先由内部安全逻辑解密并校验比特流,校验通过才完成配置,失败则拒绝启动。密钥存储方式各有代价:熔丝类存储掉电不丢失、但烧错无法改;电池备份存储可以更新密钥、却要考虑电池寿命和板级成本。选哪种,先看产品生命周期和返修策略,别等到量产才发现密钥改不了。

工程上有四个坑最常见。第一,调试接口没关:设计做了加密,调试口却留着,等于给侧门留了钥匙,量产版本要按规范关闭或设口令。第二,密钥管理没闭环:密钥在谁手里、怎么烧录、烧录日志怎么存、泄漏了怎么吊销,这套流程比算法本身更重要,密钥一旦外泄,加密就形同虚设。第三,升级机制没留后路:固件升级要带版本校验和防回滚,否则旧版本漏洞会被重新刷回来;但防回滚做得太死,现场救砖又会变得很困难,要留一条受控的恢复通道。第四,只测了正常路径:要实测篡改一字节、换旧版本、拔掉电池等异常情况下,器件是不是真的拒绝启动,而不是只在文档里写了拒绝。

取舍建议是:消费类小批量可以先上基础加密加认证;涉及关键基础设施、长期在外场运行的产品,安全启动链要从第一级启动就做完整,密钥管理和升级策略要和硬件设计同步评审。安全没有免费午餐,多花的成本买的是设计不被轻易复制、设备不被轻易冒充。大家量产时,密钥烧录和吊销流程一般是怎么管的?欢迎交流。