密码学基础回顾:对称加密与非对称加密、哈希函数、数字签名原理、公钥基础设施(PKI)概念

做固件签名和密钥烧录,绕不开密码学。很多工程师觉得这东西太理论,直接跳过。我刚开始也这么想,结果第一次做安全启动方案时,连签名验证流程都画不对。后来老老实实补了课,才发现——不懂密码学,密钥烧录就是瞎搞。

这一章,咱们把核心概念过一遍。不扯复杂的数学公式,只讲你写代码、配工具时真正用得上的东西。

对称加密:简单,但密钥怎么分?

对称加密,说白了就是加密和解密用同一把钥匙。你拿钥匙锁门,拿同一把钥匙开门。

常见的算法有 AES、DES、SM4。AES 现在用得最多,128 位密钥是底线,我建议直接用 256 位。

对称加密的核心痛点:密钥分发。你和对方通信,怎么安全地把这把钥匙交给对方?如果密钥在传输过程中被截获,加密就形同虚设。

我在一个 IoT 项目里遇到过这种情况:设备端和服务器用 AES 通信,密钥写死在固件里。结果固件被反编译,密钥直接暴露。嗯,那批设备后来全部召回升级。

特性 对称加密 非对称加密
密钥数量 1 个(共享密钥) 2 个(公钥 + 私钥)
加解密速度 快(硬件加速常见) 慢(比对称慢 100~1000 倍)
密钥分发 困难 公钥可公开,私钥本地保存
典型算法 AES, DES, SM4 RSA, ECC, SM2
典型用途 批量数据加密 密钥交换、数字签名

非对称加密:公钥随便给,私钥藏好

非对称加密,有一对密钥:公钥和私钥。公钥可以公开,私钥必须保密。

你想想看,如果我用私钥加密一段数据,任何人都能用我的公钥解密——这就能证明数据确实是我发的。反过来,别人用我的公钥加密数据,只有我能用私钥解密——这就实现了安全通信。

实际项目中,非对称加密很少用来加密大量数据。为什么?太慢了。RSA 2048 位加密 1KB 数据,比 AES 慢两个数量级。所以常见的做法是:用非对称加密传输对称密钥,再用对称密钥加密实际数据。这叫「混合加密」,HTTPS 就是这么干的。

我的建议:在嵌入式设备上,如果 CPU 没有硬件加速,尽量别用 RSA 做大量数据加密。ECC(椭圆曲线)在同等安全强度下密钥更短、计算更快,更适合资源受限的场景。

哈希函数:指纹,不是加密

哈希函数,很多人误以为它是加密。其实不是。哈希是单向的——你从输入算出哈希值很容易,但从哈希值反推输入,几乎不可能。

哈希函数有几个关键特性:

  • 固定输出长度:不管输入是 1 字节还是 1GB,输出长度固定(SHA-256 永远是 256 位)
  • 雪崩效应:输入改一个 bit,输出完全不一样
  • 抗碰撞:很难找到两个不同输入,算出相同的哈希值

在固件签名里,哈希函数的作用是什么?给固件算一个「指纹」。你签名时签的不是整个固件,而是固件的哈希值。这样既省时间,又保证完整性。

我曾经踩过一个坑:用 MD5 做固件完整性校验。后来发现 MD5 已经被破解,可以人为构造碰撞。从那以后,我所有项目都强制要求 SHA-256 起步。

注意:MD5 和 SHA-1 已经不安全,不要再用于任何安全场景。SHA-256 是目前的最低标准。如果对安全性要求极高,可以考虑 SHA-384 或 SHA-512。

数字签名:证明这固件是你写的

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

  1. 发送方对固件计算哈希值
  2. 用发送方的私钥对哈希值加密,得到签名
  3. 发送方把固件 + 签名一起发给接收方
  4. 接收方用发送方的公钥解密签名,得到哈希值 A
  5. 接收方自己计算固件的哈希值 B
  6. 比较 A 和 B,如果一致,说明固件没被篡改,且确实是发送方签的

这就是数字签名的核心逻辑:防篡改 + 防抵赖。你想想看,如果固件被改了,哈希值对不上,签名验证就失败。如果签名不是用你的私钥生成的,公钥解密出来的哈希值也是乱的。

在密钥烧录场景里,我们通常把公钥烧进设备,私钥留在产线服务器或 HSM(硬件安全模块)里。设备启动时,用烧录的公钥验证固件签名——这就是安全启动的根基。

公钥基础设施(PKI):谁来证明这把公钥是真的?

好,现在问题来了:你拿到一把公钥,怎么确定它真的是对方发的?万一中间人把公钥换了呢?

这就是 PKI 要解决的问题。PKI 的核心是证书——证书就是一张「数字身份证」,由可信的第三方(CA,证书颁发机构)签发。证书里包含:

  • 持有者的公钥
  • 持有者的身份信息(公司名、域名等)
  • CA 的数字签名
  • 有效期、序列号等

验证流程是这样的:

  1. 你信任 CA(比如 VeriSign、Let's Encrypt)
  2. 对方给你出示证书,证书上有 CA 的签名
  3. 你用 CA 的公钥验证证书签名,确认证书是真的
  4. 证书里的公钥,就是对方的合法公钥

在嵌入式领域,我们不一定用公网 CA。很多公司自建 CA,或者用自签名的证书链。比如在产线上,我们可能用一台专门的签名服务器做 CA,给每个设备签发设备证书。设备出厂时,证书和私钥一起烧进去。

一句话总结 PKI:PKI 就是一套「谁信谁」的信任体系。你信任根 CA,根 CA 签发了中间 CA,中间 CA 签发了终端证书——这就形成了一条证书链。只要链上的每个签名都验证通过,终端证书就是可信的。

知识体系总览

下面这张图,把本章的核心概念串起来了。你可以把它当作一个快速参考:

密码学基础 — 知识体系总览 对称加密 AES / SM4 / DES 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 数字签名 非对称加密 + 哈希函数 = 防篡改 + 防抵赖 公钥基础设施 (PKI) CA + 证书链 + 信任体系 应用场景:密钥烧录 / 固件签名 / 安全启动 / 安全通信 说 明 框 对称加密速度快,但密钥分发困难 非对称加密解决密钥分发,但速度慢 哈希函数提供完整性校验,不可逆 数字签名 = 非对称 + 哈希,PKI 提供信任链

小结:这些概念怎么串起来?

讲到这里,你应该能感觉到:这些概念不是孤立的。在密钥烧录和固件签名的实战中,它们是这样配合的:

  • 哈希函数:给固件算指纹,保证完整性
  • 非对称加密:用私钥签名,用公钥验签
  • 数字签名:把哈希值用私钥加密,附在固件后面
  • PKI:确保你手里的公钥是真的,不是伪造的
  • 对称加密:在安全通道建立后,用来加密实际传输的数据