密码学基础回顾:对称加密与非对称加密、哈希函数、数字签名原理、PKI概念
各位同学,咱们今天聊点实在的。做固件安全,绕不开密码学。说实话,我刚入行那会儿,也觉得这些理论离实际很远。直到有一次,我负责的一个IoT设备因为签名校验没做好,被黑客注入了恶意固件……嗯,从那以后,我再也不敢轻视这些基础概念了。
这一节,咱们就把密码学里跟固件签名、烧录最相关的几个核心知识点捋一遍。别怕,我不跟你扯复杂的数学公式,咱们就讲“怎么用”、“为什么这么用”。
1. 对称加密 vs 非对称加密
先问个问题:你给设备烧录固件,数据在传输过程中被人截获了怎么办?
最简单的办法,就是把数据加密。加密分两种:对称加密和非对称加密。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个(加密和解密用同一个) | 2个(公钥加密,私钥解密) |
| 速度 | 快(适合大数据量) | 慢(适合小数据量) |
| 典型算法 | AES-128/256 | RSA、ECC |
| 应用场景 | 固件本体加密 | 密钥交换、数字签名 |
我个人习惯,在固件烧录场景里,对称加密用来加密固件本身,非对称加密用来保护那个对称密钥。说白了,就是“用非对称加密来安全地传递对称密钥”。
2. 哈希函数:SHA256 / SHA384
哈希函数是什么?你可以把它想象成一个“数字指纹”。不管你的固件有多大,经过哈希函数计算后,都会得到一个固定长度的摘要。
比如:
固件文件(1MB) → SHA256 → 64个十六进制字符(256位)
固件文件(1MB) → SHA384 → 96个十六进制字符(384位)
哈希函数有几个关键特性:
- 单向性:从哈希值反推原始数据,理论上不可能。我试过暴力破解,算到天荒地老也算不出来。
- 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值。
- 雪崩效应:输入改一个bit,输出结果完全不一样。
在固件签名中,我们通常不会直接对固件签名,而是先对固件做哈希,再对哈希值签名。为什么?因为签名算法(比如RSA)处理大文件很慢,而哈希值只有几十个字节,快得多。
3. 数字签名原理:RSA 与 ECDSA
数字签名,说白了就是“我证明这个固件是我发的,而且没被人改过”。
流程是这样的:
- 开发者用私钥对固件的哈希值进行签名,生成签名文件。
- 设备端用公钥验证签名。验证通过,说明固件是合法的。
目前主流的两大签名算法:
| 算法 | 密钥长度 | 签名长度 | 计算开销 |
|---|---|---|---|
| RSA-2048 | 2048位 | 256字节 | 中等 |
| RSA-4096 | 4096位 | 512字节 | 较高 |
| ECDSA P-256 | 256位 | 64字节 | 较低 |
| ECDSA P-384 | 384位 | 96字节 | 中等 |
我曾经在一个项目中,因为选错了签名算法,导致设备启动时间多了2秒。当时用的是RSA-4096,MCU验签一次要1.5秒。后来换成ECDSA P-256,验签时间降到了200毫秒。所以,选算法一定要考虑硬件性能。
4. 公钥基础设施(PKI)概念
PKI,听起来很高大上,其实就是一个“信任链”体系。
你想想看:设备上存了一个公钥,用来验证固件签名。但这个公钥本身怎么保证是可信的?万一被人换掉了呢?
PKI就是解决这个问题的。它通过证书链来建立信任:
- 根证书:最顶层的信任锚点,自签名。
- 中间证书:由根证书签发,用于签发设备证书。
- 设备证书:包含设备的公钥,由中间证书签发。
在固件签名场景中,我们通常的做法是:
- 在工厂烧录时,把根证书或中间证书的公钥烧进设备的OTP(一次性可编程存储器)区域。
- 固件发布时,用私钥签名,同时附上证书链。
- 设备验证时,先验证证书链的合法性,再用证书里的公钥验证固件签名。
知识体系总览
下面这张图,是我自己整理的密码学基础在固件签名中的完整链路。你看一遍,应该就能明白各个模块是怎么配合的了。
这张图里,左侧是开发者的签名流程,右侧是设备的验证流程。中间通过PKI证书链来保证公钥的可信性。你看,整个链路其实不复杂,但每一步都环环相扣。
好了,密码学基础就回顾到这里。这些概念在后续的固件签名实战中会反复用到。特别是哈希和签名算法,我建议你亲手在开发板上跑一遍,感受一下不同算法的性能差异。只有亲手踩过坑,才能真正理解为什么选这个算法而不选那个。