嵌入式安全第一关:Secure Boot是怎么保护你的设备的?

你有没有想过一个问题:如果攻击者直接拿编程器夹住你的Flash芯片,把固件全部读出来,你的加密算法就算再强,又有什么用?

这不是假设。我们团队之前做过一个测试------市面上售价百元以内的几款物联网终端设备,超过六成没有做任何物理层面的安全防护。一把夹子、一条杜邦线、一个半小时,固件就能完整dump出来。

很多人把嵌入式安全简单等同于"在代码里用AES加密数据",但在这个连Flash都可以热风枪吹下来放在编程器上读的物理世界里,代码加密的前提是------别人读不到你的代码。

所以要理解嵌入式安全,首先得理解一个概念:信任根。

先看一段典型的MCU启动流程:

c 复制代码
void boot_sequence(void) {
    uint32_t *app_entry = (uint32_t *)APP_START_ADDR;

    // 1. 读取复位向量
    if (*app_entry != 0xFFFFFFFF) {
        // 2. 计算当前固件哈希
        uint8_t hash[32];
        sha256_calculate(APP_START_ADDR, APP_SIZE, hash);

        // 3. 与存储在OTP区域的签名对比
        if (memcmp(hash, (void *)OTP_HASH_ADDR, 32) == 0) {
            // 4. 签名验证通过,正常启动
            jump_to_app(app_entry);
        } else {
            // 固件被篡改,进入安全模式
            enter_safe_mode();
        }
    }
}

这段代码呈现的是一个典型的Secure Boot流程,但关键不在于代码怎么写,而在于"OTP区域的签名"是怎么来的。

OTP,全称One Time Programmable,是信任链的第一环。

芯片出厂时,厂商在OTP区域烧录一个公钥哈希或者设备证书。这个区域只能写一次,且物理上无法被外部接口读取。信任从这里开始------如果连OTP的内容都可以被篡改,那么整个安全体系就崩塌了。

真正的问题是:OTP里的根密钥怎么保证安全?

一个有意思的设计是,很多MCU厂商在芯片内部集成了一个硬件不可克隆函数,英文叫Physically Unclonable Function,简称PUF。PUF利用芯片制造过程中硅片掺杂浓度的微小差异来生成一个唯一的、不可复制的"指纹"。这个指纹被用来派生加密密钥,密钥从不出芯片,只在需要时由PUF实时生成。

绕了一圈,本质逻辑其实是:与其拼命保护一把密钥,不如让这把密钥根本就不存在。不存在的东西,自然偷不走。

再往上一层看,即使Secure Boot和无密钥存储都做好了,还有另一个常被忽视的环节------固件更新通道。

c 复制代码
/* 不安全的固件更新 */
if (receive_packet(&pkt) == SUCCESS) {
    write_flash(UPDATE_ADDR, pkt.data, pkt.len);
    reboot();
}

/* 稍微可靠的版本 */
if (receive_packet(&pkt) == SUCCESS) {
    if (verify_signature(pkt.data, pkt.len, pkt.sig) == VALID) {
        if (decrypt_in_place(pkt.data, pkt.len, session_key) == OK) {
            write_flash(UPDATE_ADDR, pkt.data, pkt.len);
            reboot();
        }
    }
}

两种实现的差别不只是多几行if判断。前一种在OTA升级时,任何人只要在无线信号范围内发送一个伪造的固件包,就能让所有设备变砖------更糟糕的是,如果攻击者植入一个恶意固件,设备就成了别人手里的僵尸。

后一种实现多做了两件事:签名验证保证固件来源可信,会话密钥解密保证传输过程中不会被窃听。这里使用session_key而不是固定密钥的原因是------如果设备所有者的通信都用同一把对称密钥加密,密钥在设备出厂后就无法更换,一旦泄漏就全盘皆输。

从信任根出发,到Secure Boot验证,再到安全固件更新,这三层构成了一条完整的信任链。但有个容易被忽略的细节:信任链的强度取决于最弱的一环。如果生产环节中固件烧录器可以直接跳过签名验证,那前面所有工作都白做了。

生产安全本身就是一个不小的课题。

相关推荐
RFID科技的魅力5 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
Lxx_Zw6 小时前
机器周期与共地:时钟基准和电压参考基准
stm32·单片机·嵌入式硬件
2601_967212727 小时前
高防护轨道式插座安全结构与工程适配技术说明
大数据·经验分享·安全
treesforest7 小时前
游戏账号安全风险分层方案:IP信号分层与人机复核实践
tcp/ip·安全·游戏·1024程序员节
救救孩子把7 小时前
RAG 还是 Fine-Tuning?从语义切分、QLoRA 到安全防护的企业级 LLM 优化实战
安全·llm·rag·fine-tuning·qlora
每天题库8 小时前
汽车维修工等级考试题库 理论实操核心考点一次梳理清
学习·安全·考试·题库·考证
我叫洋洋8 小时前
用 Qoder(AI 编程助手)把 Cadence 16.6 从零配到能画板
人工智能·单片机·嵌入式硬件·电路·1024程序员节
QZ166560951598 小时前
数据库监测的主动防御:实时感知,看见即掌控
网络·安全·网络安全
深圳老胡9 小时前
STM32 开发中 Trae 内置模型怎么选:Seed、MiniMax、GLM、DeepSeek、Kimi、Qwen 全对比
笔记·stm32·单片机·嵌入式硬件·代码规范·1024程序员节
传感器与混合集成电路10 小时前
多计算节点怎么融合?全国产通用融合计算机三子卡架构与任务配置方法
嵌入式硬件·1024程序员节