密码学基础回顾(上):对称加密与非对称加密的区别,哈希函数的特性

做固件安全,说白了就是跟密钥和算法打交道。我见过不少团队,上来就撸代码实现验签,结果连最基本的加密概念都没搞清楚,最后踩坑踩到怀疑人生。这一章咱们把密码学基础捋一遍,重点说清楚三件事:对称加密、非对称加密、哈希函数。这些是固件验签的基石,绕不过去。

对称加密:一把钥匙开一把锁

对称加密,顾名思义,加密和解密用的是同一把密钥。就像你家的门锁,用同一把钥匙锁门、开门。

我刚开始做嵌入式时,觉得对称加密挺简单的。直到有一次,我在一个IoT设备里用AES-128加密固件分区,密钥硬编码在代码里。结果产品上市不到两周,就被黑客用JTAG把固件dump出来,密钥直接暴露。嗯,从那以后我再也不敢把密钥明文放固件里了。

核心特点:

  • 速度快:硬件加速下,AES-128加解密能达到Gbps级别,适合大量数据
  • 密钥管理难:通信双方必须共享同一密钥,分发过程容易被截获
  • 典型算法:AES、DES(已淘汰)、SM4(国密)

在固件验签场景里,对称加密用得不多。为什么?因为你要把密钥分发给所有设备,一旦某个设备被攻破,密钥就泄露了,整个产品线都得遭殃。你想想看,这风险谁扛得住?

非对称加密:公钥私钥,各司其职

非对称加密就不一样了。它有一对密钥:公钥公开,私钥保密。公钥加密的数据只能用私钥解密,反过来,私钥签名的数据只能用公钥验证。

这玩意儿在固件验签里是主角。我参与过一个车载ECU的OTA项目,固件包就是用RSA-2048签名的。设备端只存公钥,私钥放在厂家的HSM(硬件安全模块)里。就算黑客把设备拆了,拿到公钥也没用——他伪造不了签名。

特性 对称加密 非对称加密
密钥数量 1个(共享密钥) 2个(公钥+私钥)
加解密速度 快(硬件加速可达Gbps) 慢(RSA-2048约几千次/秒)
密钥分发 困难,需要安全通道 公钥可公开,私钥自留
典型用途 数据加密传输 数字签名、密钥交换
固件验签适用性 低(密钥泄露风险高) 高(公钥验签,私钥安全)

不过非对称加密也有短板——慢。RSA-2048签名一次,在普通MCU上可能要几百毫秒。所以实际工程里,我们通常不会直接用非对称加密去加密整个固件,而是用它来签名固件的哈希值。这个后面会细讲。

哈希函数:数据的指纹

哈希函数,你可以把它理解成数据的「指纹」。不管输入是一段文字还是一个10MB的固件,哈希函数都会输出一个固定长度的摘要(比如SHA-256输出32字节)。

哈希函数有两个核心特性,做固件安全必须吃透:

1. 单向性

从哈希值反推原始数据,理论上是不可能的。你想想看,SHA-256的输出只有256位,但输入可以是任意长度。信息量压缩了,就不可能无损还原。我在项目中见过有人试图「解密」哈希值,这完全是误解——哈希不是加密,它没有解密过程。

2. 抗碰撞性

找到两个不同的输入,让它们的哈希值相同,这在计算上是不可行的。SHA-256的抗碰撞强度是128位,什么意思?就是你要尝试2^128次才能找到一对碰撞。以现在的算力,这比中彩票还难。

注意:MD5和SHA-1已经被证明存在实际碰撞攻击。我曾经审计过一个老项目,固件验签用的还是MD5,结果用现成的工具几分钟就伪造出了碰撞。赶紧换SHA-256,别犹豫。

固件验签中的哈希应用

哈希函数在固件验签里扮演两个角色:

  • 完整性校验:计算固件的哈希值,跟官方发布的哈希对比,看固件有没有被篡改
  • 签名对象:对固件的哈希值做签名,而不是对固件本身。因为哈希值很短(32字节),签名速度快得多

我个人习惯的做法是:先用SHA-256计算固件的哈希,然后用RSA私钥对这个哈希签名。设备端收到固件后,同样计算哈希,再用公钥验证签名。这样既保证了完整性,又保证了真实性。

知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以看到对称加密、非对称加密、哈希函数在固件验签中的位置和关系。

固件验签密码学基础框架 固件验签密码学基础框架 对称加密 非对称加密 哈希函数 密钥相同,速度快 公钥私钥,速度慢 单向性,抗碰撞 固件验签应用场景 哈希保证完整性 → 非对称加密保证真实性 → 对称加密用于固件传输加密 工程建议 • 固件验签首选非对称加密(RSA-2048 / ECDSA P-256) • 哈希函数必须用 SHA-256 或更高,淘汰 MD5/SHA-1 • 私钥存储在 HSM 或安全元件中,公钥可公开

小技巧:在资源受限的MCU上,如果RSA验签太慢,可以考虑用ECDSA。同样的安全强度下,ECDSA的密钥更短,验签速度也更快。我在一个Cortex-M0的项目里,用ECDSA P-256把验签时间从800ms降到了120ms。

好了,这一章的基础就到这里。对称加密、非对称加密、哈希函数,这三者的区别和用途,是后面所有工程化落地的前提。你把这些概念吃透了,后面讲签名流程、密钥管理、防回滚这些实战内容时,才能跟得上节奏。