第1章:密码学基础回顾
各位同学,欢迎来到《IoT芯片安全启动与加密引擎开发实战》的第一章。
说实话,做IoT安全这些年,我见过太多「芯片功能没问题,但安全一捅就破」的案例。有一次,一个客户拿着他们新做的物联网模组来找我,说启动流程已经加了签名验证。我拿逻辑分析仪一抓,好家伙,密钥直接硬编码在Flash里,连加密都没做。嗯,这就是典型的「会用算法,但不懂怎么用」。
所以,咱们第一章先把密码学基础夯实。别嫌基础,这些算法在芯片底层怎么跑、有什么坑,才是咱们这门课的核心。
1.1 对称加密:AES
对称加密,说白了就是加密和解密用同一把钥匙。你想想看,就像你家大门,锁门和开门用的是同一把钥匙。
在IoT芯片里,AES(Advanced Encryption Standard)是绝对的主流。我个人习惯把AES分成三块来理解:算法本身、工作模式、以及硬件实现时的坑。
AES算法核心
AES处理的是128位的数据块,密钥长度可以是128、192或256位。咱们做IoT,128位密钥基本够用,除非你搞的是国家级安全项目。
算法流程其实不复杂:
// AES-128 加密伪代码
State = Plaintext
AddRoundKey(State, RoundKey[0])
for round = 1 to 10:
SubBytes(State) // S盒替换
ShiftRows(State) // 行移位
MixColumns(State) // 列混淆(最后一轮没有这步)
AddRoundKey(State, RoundKey[round])
Ciphertext = State
这里有个关键点:S盒。在硬件实现时,S盒通常用查找表(LUT)实现。我曾经在一个低功耗芯片项目里,为了省面积,把S盒用组合逻辑重新实现了,结果时序跑不过。后来还是老老实实用了LUT,面积大了点,但时序裕量足足的。
AES工作模式
光有AES核心算法还不够,你得选工作模式。在IoT芯片里,常见的有:
| 模式 | 特点 | IoT场景 |
|---|---|---|
| ECB | 简单,但相同明文得到相同密文 | ❌ 别用,有安全风险 |
| CBC | 需要IV,密文有扩散性 | ✅ 适合固件加密 |
| CTR | 可并行,支持随机访问 | ✅ 适合Flash加密 |
| GCM | 带认证加密,同时保证机密性和完整性 | ✅ 安全通信首选 |
1.2 非对称加密:RSA与ECC
非对称加密,就是加密和解密用不同的钥匙。公钥加密,私钥解密。这在IoT里主要用来做密钥协商和数字签名。
RSA:老牌劲旅
RSA基于大整数分解难题。简单说,两个大素数相乘容易,但反过来分解很难。
在IoT芯片里,RSA的主要问题是计算量大。2048位的RSA签名,在低端MCU上可能要跑几百毫秒。我建议:
- 如果芯片有硬件加速器,用RSA没问题
- 如果纯软件实现,优先考虑ECC
- 密钥长度至少2048位,1024位已经不安全了
ECC:后起之秀
ECC(椭圆曲线密码学)用更短的密钥提供同等安全强度。256位的ECC ≈ 3072位的RSA。
为什么ECC在IoT里这么火?说白了,就是省资源。密钥短、计算快、功耗低。我做过一个对比:
| 算法 | 密钥长度 | 签名大小 | 相对计算量 |
|---|---|---|---|
| RSA-2048 | 2048位 | 256字节 | 高 |
| ECC-256 | 256位 | 64字节 | 低 |
嗯,这里要注意:ECC的曲线选择很重要。我个人习惯用NIST P-256或Curve25519。Curve25519在硬件实现上更友好,不容易有侧信道攻击的风险。
1.3 哈希函数:SHA-256
哈希函数,就是把任意长度的数据,压缩成固定长度的摘要。而且,这个操作是单向的——从摘要反推原始数据,理论上不可能。
SHA-256输出256位(32字节)的摘要。在IoT里,它的主要用途:
- 固件完整性校验:计算固件哈希,和签名里的哈希比对
- 密钥派生:用HKDF(基于HMAC的密钥派生函数)生成会话密钥
- 随机数生成:作为熵源的一部分
SHA-256的硬件实现,核心是压缩函数。它把消息分成512位的块,每块经过64轮迭代。我建议在芯片设计时,把SHA-256做成独立的硬件模块,这样CPU可以一边做其他事,一边让硬件算哈希。
1.4 消息认证码:HMAC
HMAC(Hash-based Message Authentication Code),就是带密钥的哈希。它解决了「我怎么知道这个消息是你发的,而且没被篡改过?」这个问题。
HMAC的构造其实很巧妙:
HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
其中:
K' = 如果K长度大于块大小,先哈希;否则直接使用
opad = 0x5c重复块大小次
ipad = 0x36重复块大小次
为什么搞这么复杂?说白了,就是为了防止长度扩展攻击。直接H(K || m)的话,攻击者可以在不知道K的情况下,伪造出H(K || m || padding || extra)的合法MAC。
在IoT芯片里,HMAC主要用在:
- 安全启动:验证固件签名前,先验证MAC
- 会话密钥生成:作为PRF(伪随机函数)
- 消息认证:通信协议中的完整性保护
知识体系总览
下面这张图,是我梳理的本章知识体系。你可以把它当作一个「密码学算法选型地图」:
这张图把咱们今天讲的内容串起来了。从底层的密码学算法,到上层的IoT安全应用,每一步都有讲究。
好了,第一章就到这里。这些基础概念,后面每一章都会用到。尤其是AES和SHA-256的硬件实现,咱们在讲安全启动和加密引擎时会反复提到。
记住:算法是死的,但怎么用是活的。同样的AES,用对了地方是铜墙铁壁,用错了就是纸糊的。
公众号:蓝海资料掘金营,微信deep3321