密码学基础(上):对称加密与非对称加密、哈希函数、数字签名原理
各位同学,欢迎来到《安全启动》的第二讲。今天咱们聊聊密码学基础。说实话,密码学是安全启动的基石,没有它,后面所有的高级特性都是空中楼阁。我当年刚入行时,总觉得密码学是数学家的事,直到在项目里被坑过一次,才老老实实回来补课。
这一章我们聚焦四个核心概念:对称加密、非对称加密、哈希函数、数字签名。它们就像工具箱里的四把扳手,各有各的用途。你想想看,安全启动的整个链条,从镜像签名到固件验证,每一步都离不开它们。
1. 对称加密:一把钥匙开一把锁
对称加密,说白了就是加密和解密用同一把钥匙。你想想看,就像你家大门钥匙——锁门用它,开门也用它。最经典的算法是 AES(高级加密标准),还有咱们国产的 SM4。
我在项目中遇到过一个问题:用 AES-128 加密固件,结果解密后前 16 个字节全是乱的。查了半天,原来是 IV(初始化向量)没对齐。嗯,这里要注意——AES 的 CBC 模式要求 IV 必须随机且不可预测,否则攻击者可以搞重放攻击。
- 加密速度极快,适合大数据量(比如固件镜像)
- 密钥分发是最大痛点——你怎么把密钥安全地交给对方?
- 常见模式:ECB(不推荐)、CBC(推荐)、GCM(带认证,更安全)
2. 非对称加密:公钥私钥,各司其职
非对称加密就聪明多了。它有一对钥匙:公钥公开给全世界,私钥自己藏好。你用公钥加密,只有私钥能解密;反过来,你用私钥签名,公钥可以验证。
常见的算法有 RSA(基于大数分解)和 ECC(椭圆曲线,更高效)。咱们国产的 SM2 也是基于椭圆曲线的。我个人习惯在嵌入式设备上用 ECC,因为密钥短、算得快——256 位的 ECC 安全性相当于 3072 位的 RSA。
你可能会问:「为什么不用非对称加密直接加密整个固件?」原因很简单——太慢了。RSA 加密 1MB 的数据,在嵌入式芯片上可能要跑几秒钟,而 AES 只需要几毫秒。
3. 哈希函数:数据的指纹
哈希函数,你可以把它想象成数据的「指纹」。不管输入多大,输出固定长度(比如 SHA-256 输出 32 字节)。而且,哪怕只改一个比特,哈希值也会天翻地覆。
我记得有一次调试安全启动,固件明明没变,但哈希校验总失败。折腾了两小时,发现是编译时时间戳被写进了固件。嗯,这就是哈希的雪崩效应——一点点变化,结果完全不同。
- 抗原像性:给定哈希值,无法反推出原始数据
- 抗第二原像性:给定数据 A,无法找到另一个数据 B 使得 hash(A) = hash(B)
- 抗碰撞性:无法找到任意两个不同的数据,使它们的哈希值相同
在安全启动中,哈希函数用来校验固件完整性。我们计算固件的哈希值,然后跟签名里的哈希值对比。如果一致,说明固件没被篡改。
4. 数字签名:哈希 + 非对称加密的完美组合
数字签名,说白了就是「哈希函数 + 非对称加密」的合体。流程是这样的:
- 发送方计算数据的哈希值
- 用私钥加密这个哈希值,得到签名
- 接收方用公钥解密签名,得到哈希值
- 接收方自己计算数据的哈希值,对比两者是否一致
这样做的好处是什么?既保证了完整性(哈希),又保证了真实性(私钥签名)。攻击者就算篡改了数据,也没法伪造签名——因为他没有私钥。
- 固件发布时,厂商用私钥对固件哈希签名
- 设备启动时,用内置的公钥验证签名
- 验证通过,才执行固件
我曾经在一个 IoT 项目里看到,有人直接把公钥硬编码在固件里。结果呢?攻击者反编译固件,替换了公钥,然后用自己的私钥签名恶意固件。所以,公钥的存储必须安全——通常放在一次性可编程(OTP)存储器或安全元件里。
5. 实战对比:什么时候用什么?
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 加密固件镜像 | AES-256-GCM | 速度快,自带认证,防篡改 |
| 分发对称密钥 | RSA-2048 或 ECC-256 | 非对称加密,安全传输密钥 |
| 校验固件完整性 | SHA-256 或 SM3 | 固定长度输出,抗碰撞 |
| 固件签名与验证 | ECDSA 或 SM2 | 哈希 + 非对称,完整+真实 |
好了,这一章的内容就到这里。密码学基础是安全启动的根基,理解透了,后面讲信任链、安全存储、固件升级时,你就能游刃有余。记住:对称加密管速度,非对称加密管安全,哈希函数管完整性,数字签名管真实性。四者配合,才能构建一个牢不可破的安全启动方案。
可可精品资料库