1. 课程导论

1.1 量子威胁:不是科幻,是倒计时

说实话,五年前有人跟我说量子计算会颠覆嵌入式安全,我是不太信的。那时候我还在做一款智能门锁的OTA升级方案,用的还是RSA-2048签名。一切都很完美——直到我认真看了Shor算法的论文。

Shor算法能在多项式时间内分解大整数和计算离散对数。这意味着什么?你想想看,RSA、ECDSA、DSA,这些我们用了二十多年的公钥密码体系,在量子计算机面前就像纸糊的一样。一台足够稳定的量子计算机,理论上几小时内就能破解RSA-2048。

有人会问:「量子计算机不是还没造出来吗?」

嗯,这里要注意一个概念——先存储后破解(Harvest Now, Decrypt Later)。攻击者现在就可以抓取你的固件签名包,等量子计算机成熟后再批量破解。IoT设备生命周期通常5-10年,你2025年签名的固件,2030年可能就被全盘攻破。

⚠️ 核心风险: 现有签名算法(RSA、ECDSA、Ed25519)在量子计算场景下全部失效。这不是「可能」,而是「必然」。

1.2 现有签名算法的脆弱性分析

我整理了一张对比表,你可以直观看到差距:

算法 经典安全强度 量子攻击算法 量子安全强度 密钥长度影响
RSA-2048 112 bit Shor算法 0(完全破解) 需增至1M+ bit
ECDSA P-256 128 bit Shor算法 0(完全破解) 需增至数万bit
Ed25519 128 bit Shor算法 0(完全破解) 不可行
Dilithium(PQC) 128 bit 无有效攻击 128 bit 约2.5KB
Falcon(PQC) 128 bit 无有效攻击 128 bit 约1.2KB

看到最后两行了吗?PQC(后量子密码)方案在量子攻击面前依然坚挺。这不是巧合,这是数学结构决定的——基于格的密码学,目前没有已知的量子加速攻击手段。

1.3 IoT固件签名的特殊性

我在做智能电表项目时踩过一个坑:固件签名验证超时导致设备变砖。IoT设备跟服务器不一样,资源极度受限:

  • 算力:Cortex-M0/M3,主频几十MHz
  • 内存:几十KB RAM,几百KB Flash
  • 功耗:电池供电,签名验证不能超过100ms
  • 带宽:LoRa/BLE,每次传输几百字节

你想想看,RSA-2048签名才256字节,但Dilithium签名要2.5KB。这对IoT设备来说,不是简单的「换算法」,而是整个安全架构的重构。

核心矛盾: PQC签名体积大、验证慢,而IoT设备资源极度受限。这不是「能不能用」的问题,而是「怎么用才不把设备搞死」的问题。

1.4 迁移路径:不是替换,是演进

我个人习惯把迁移分成三个阶段:

  1. 混合签名阶段:RSA/ECDSA + PQC同时签名,验证端任选其一。兼容旧设备,同时积累PQC运行数据。
  2. 主PQC阶段:PQC作为主签名,RSA/ECDSA作为降级备选。新设备强制PQC,旧设备逐步淘汰。
  3. 纯PQC阶段:完全移除经典签名。所有设备、工具链、云端验证全部切换到PQC。

我曾经在一个智能家居项目中尝试「一步到位」直接切PQC,结果生产线上30%的设备因为Flash空间不足无法升级。嗯,从那以后我再也不敢跳过混合阶段了。

1.5 课程目标与学习路径

这门课不是讲密码学理论的。说白了,我带你手把手把IoT固件签名从RSA/ECDSA迁移到PQC。你会学到:

  • PQC算法选型:Dilithium、Falcon、SPHINCS+,哪个适合你的MCU
  • 签名体积优化:如何把2.5KB的签名压缩到1KB以内
  • 验证性能调优:在Cortex-M0上把验证时间从500ms降到50ms
  • 安全启动改造:如何把PQC签名嵌入现有安全启动链
  • OTA升级兼容:新旧设备共存时的签名策略
  • 工具链迁移:OpenSSL、mbedTLS、wolfSSL的PQC支持

下面是整个课程的知识体系框架,我画了一张图:

IoT固件签名PQC迁移知识体系 量子威胁(Shor算法) RSA / ECDSA / Ed25519 全部失效 基于格的签名(Dilithium/Falcon) 基于哈希的签名(SPHINCS+) 签名体积大 / 验证慢 / 内存受限 密钥存储 / 安全启动 / OTA兼容 混合签名 → 主PQC → 纯PQC 三步迁移 课程覆盖:算法选型 → 性能优化 → 安全启动 → OTA升级 → 工具链迁移 → 测试验证
💡 学习建议: 如果你手头有现成的IoT项目,建议边学边改。拿一个非关键设备做试点,跑通混合签名流程,再逐步推广。我当年就是这么干的——先拿一个智能灯泡练手,变砖了也不心疼。

1.6 你需要准备什么

这门课不是零基础入门。我假设你已经:

  • 熟悉C语言和嵌入式开发(STM32/ESP32等)
  • 了解公钥密码学基本概念(签名、验签、哈希)
  • 用过OpenSSL或mbedTLS做固件签名
  • 有基本的MCU调试经验(JTAG/SWD、串口打印)

如果你还不太熟悉PQC,没关系。我会从最基础的概念讲起,但不会花时间解释「什么是公钥」这种入门问题。