密码学基础回顾:对称加密与非对称加密、哈希函数与数字签名、公钥基础设施(PKI)概念、硬件安全模块(HSM)简介
各位同学,咱们今天聊点硬核的。做Bootloader安全启动,密码学是绕不开的坎。我刚开始接触这块时,也觉得这些概念又抽象又枯燥。但后来在项目中吃过亏,才明白——这些基础不牢,后面全是坑。
说白了,密码学就是给数据上锁、贴封条、验身份的一套工具。咱们搞嵌入式安全的,不需要成为密码学家,但得知道每种工具怎么用、用在哪儿、有什么坑。来,我带你过一遍。
对称加密与非对称加密
先说说加密。加密分两种:对称和非对称。名字听着玄乎,其实区别很简单——看加密和解密用的是不是同一把钥匙。
对称加密,就是一把钥匙开一把锁。加密和解密都用同一个密钥。典型的有AES、DES、SM4。优点是快,特别快。我做过一个项目,用AES-128加密固件包,几兆的数据眨眼就处理完了。
但问题来了——密钥怎么安全地传给对方?你想想看,如果我把密钥明文发过去,中间人截获了,那加密还有什么意义?这就是对称加密的痛点:密钥分发难。
对称加密常用算法:
- AES(高级加密标准):128/192/256位密钥,嵌入式首选
- DES/3DES:老了,别用了,不安全
- SM4:国密标准,国内项目必须支持
非对称加密就不一样了。它有两把钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。你用公钥加密,只有对应的私钥能解开。反过来,私钥签名,公钥验证。
典型的算法有RSA、ECC、SM2。非对称加密慢,比对称加密慢几百倍。但它的好处是——不需要提前共享密钥。我在做OTA升级时,就用非对称加密来传递会话密钥,然后用对称加密去加密实际数据。这叫混合加密,实际项目中很常见。
我的经验:在Bootloader里,非对称加密主要用于签名验证,对称加密用于固件加密。别拿非对称加密去加密大块数据,性能扛不住。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个 | 2个(公钥+私钥) |
| 速度 | 快 | 慢 |
| 典型算法 | AES, SM4 | RSA, ECC, SM2 |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
哈希函数与数字签名
哈希函数,说白了就是给数据算个指纹。不管你的数据是1KB还是1GB,哈希函数都能算出一个固定长度的摘要。而且,哪怕只改了一个比特,摘要就完全不一样。
常用的有SHA-256、SHA-3、SM3。我建议Bootloader里用SHA-256起步,安全强度够用,硬件支持也普遍。
哈希函数有个重要特性:不可逆。你没法从摘要反推出原始数据。所以它适合做完整性校验——检查数据有没有被篡改。
注意:哈希函数只能保证完整性,不能保证真实性。什么意思?如果有人把固件和哈希值一起换了,你校验通过,但跑的是恶意代码。所以哈希必须配合数字签名使用。
数字签名,就是哈希+非对称加密的组合拳。流程是这样的:
- 对固件算哈希,得到摘要
- 用私钥对摘要加密,得到签名
- 把签名和固件一起发出去
- 接收方用公钥解密签名,得到原始摘要
- 再对固件算哈希,对比两个摘要
如果一致,说明固件没被改,而且确实是私钥持有者签发的。这就是防伪+防篡改。
我曾经在一个项目中,客户说他们的Bootloader已经做了签名验证,但后来发现他们只验证了签名,没验证哈希。结果攻击者把签名和固件一起替换了,照样能通过。嗯,这里要注意——签名验证必须包含哈希比对,缺一不可。
公钥基础设施(PKI)概念
PKI,听着高大上,其实就是一套管理公钥的体系。你想想看,公钥虽然可以公开,但你怎么确定这个公钥真的是设备厂商的?万一被中间人掉包了呢?
PKI的核心是证书。证书就是一张数字身份证,里面包含:
- 持有者的公钥
- 持有者的身份信息
- 证书颁发机构(CA)的签名
- 有效期、序列号等
CA是PKI里的信任锚点。只要CA的根证书是可信的,那么CA签发的所有证书都是可信的。这就形成了一个信任链。
在Bootloader里,我们通常把根证书的公钥烧死在芯片里。然后每次升级时,用这个公钥去验证固件签名证书的有效性。这样就能确保只有经过授权的固件才能运行。
PKI在Bootloader中的典型流程:
- 设备出厂时,预置根证书公钥(不可更改)
- 固件发布时,用CA签发的证书对固件签名
- Bootloader启动时,验证固件签名证书的合法性
- 证书验证通过后,再用证书中的公钥验证固件签名
我个人习惯在项目中用两级证书:根证书和固件签名证书。根证书离线保存,只在产线烧录时使用。固件签名证书可以定期轮换,即使泄露了,也不会影响整个信任体系。
硬件安全模块(HSM)简介
最后聊聊HSM。说白了,HSM就是一个专门干密码学活的硬件。它有自己的处理器、存储、真随机数发生器,还能防物理攻击。
为什么需要HSM?因为软件实现的密码学不安全。密钥存在Flash里,攻击者用JTAG或者读Flash就能偷走。HSM把密钥锁在硬件里,软件只能调用接口,拿不到密钥本身。
HSM能做的事情:
- 密钥生成和存储
- 加密/解密运算
- 签名生成和验证
- 真随机数生成
- 安全启动支持
我在一个车规级项目中用过HSM。当时要求Bootloader必须在100ms内完成安全启动验证。纯软件实现RSA-2048签名验证,要跑300多毫秒。换成HSM硬件加速后,直接降到20毫秒。差距就是这么大。
选型建议:如果项目对安全等级要求高(比如车规、金融支付),别省HSM的钱。如果只是消费级产品,可以考虑用MCU自带的硬件加密引擎,也能提供一定程度的保护。
嗯,密码学基础就聊到这儿。这些概念在后面的章节里会反复用到。特别是数字签名和PKI,是Bootloader安全启动的基石。你把这些搞明白了,后面学起来就轻松多了。