密码学基础回顾:对称加密与非对称加密、哈希函数与数字签名、公钥基础设施(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起步,安全强度够用,硬件支持也普遍。

哈希函数有个重要特性:不可逆。你没法从摘要反推出原始数据。所以它适合做完整性校验——检查数据有没有被篡改。

注意:哈希函数只能保证完整性,不能保证真实性。什么意思?如果有人把固件和哈希值一起换了,你校验通过,但跑的是恶意代码。所以哈希必须配合数字签名使用。

数字签名,就是哈希+非对称加密的组合拳。流程是这样的:

  1. 对固件算哈希,得到摘要
  2. 用私钥对摘要加密,得到签名
  3. 把签名和固件一起发出去
  4. 接收方用公钥解密签名,得到原始摘要
  5. 再对固件算哈希,对比两个摘要

如果一致,说明固件没被改,而且确实是私钥持有者签发的。这就是防伪+防篡改。

我曾经在一个项目中,客户说他们的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安全启动的基石。你把这些搞明白了,后面学起来就轻松多了。