密码学基础(上):对称加密与非对称加密的区别,哈希函数的特性
各位同学,咱们今天聊点硬核的。密码学,说白了就是固件安全的基石。你想想看,没有密码学,你的固件签名就是一张废纸,更新机制就是个筛子。我在嵌入式安全这行摸爬滚打十几年,见过太多因为密码学基础不牢,导致整个安全体系崩塌的案例。
这一章,咱们就聚焦三个核心概念:对称加密、非对称加密,还有哈希函数。别觉得它们枯燥,搞懂了这些,你才能理解后面固件签名验证到底在防什么。
1. 对称加密:一把钥匙开一把锁
对称加密,顾名思义,加密和解密用的是同一把密钥。就像你家的门锁,用这把钥匙锁上,还得用这把钥匙打开。
它的优点是快,非常快。在资源受限的嵌入式设备上,比如一个简单的MCU,对称加密几乎是唯一的选择。我早期做的一个智能电表项目,用的就是AES-128,跑起来毫无压力。
但缺点也很致命——密钥分发。你怎么把密钥安全地交给对方?如果密钥在传输过程中被截获,那加密就形同虚设。这就像你把家门钥匙寄给朋友,结果快递丢了,你家就危险了。
核心要点:对称加密适合大量数据的加密,但密钥管理是最大的痛点。常见算法有AES、DES、SM4(国密)。
2. 非对称加密:公钥私钥,各司其职
非对称加密就聪明多了。它有一对密钥:公钥和私钥。公钥可以公开,私钥必须保密。用公钥加密的数据,只能用私钥解密;反之,用私钥签名的数据,只能用公钥验证。
这解决了密钥分发的难题。你想想看,在固件更新场景中,设备端只需要预置一个公钥,服务器用私钥对固件签名。这样,即使公钥被所有人知道,也无法伪造签名,因为私钥在服务器手里。
不过,非对称加密的代价是性能。它比对称加密慢好几个数量级。所以实际应用中,我们通常用非对称加密来加密一个会话密钥,然后用这个会话密钥去加密后续的通信数据。这叫混合加密。
我的经验:在固件签名验证中,我们只用非对称加密的签名功能,而不是加密功能。签名保证的是完整性和真实性,而不是机密性。这一点很多新手会搞混。
3. 哈希函数:数据的“指纹”
哈希函数,它能把任意长度的数据,压缩成一个固定长度的摘要。这个摘要就像数据的“指纹”,独一无二。
哈希函数有两个核心特性,你必须刻在脑子里:
- 碰撞阻力:很难找到两个不同的输入,产生相同的哈希值。如果发生了碰撞,那这个哈希函数就废了。我记得前几年SHA-1被成功碰撞,整个行业都震动了,大家纷纷迁移到SHA-256。
- 雪崩效应:输入数据哪怕只改变一个比特,输出的哈希值也会发生天翻地覆的变化。这保证了哈希值的随机性和不可预测性。
在固件更新中,哈希函数的作用是什么?我们会对固件镜像计算一个哈希值,然后用私钥对这个哈希值签名。设备端收到固件后,先计算本地哈希,再用公钥验证签名。这样,只要固件被篡改,哈希值就会变,签名验证就会失败。
避坑指南:我曾经遇到过一个项目,工程师为了省事,直接用MD5做固件哈希。结果呢?攻击者轻松构造了一个碰撞固件,绕过了签名验证。记住,MD5和SHA-1已经不安全了,现在至少要用SHA-256。
4. 一张图看懂三者关系
下面这张SVG图,帮你理清对称加密、非对称加密和哈希函数在固件更新中的协作关系。
5. 三种技术的对比
为了让你更直观地理解它们的区别,我整理了一个表格:
| 特性 | 对称加密 | 非对称加密 | 哈希函数 |
|---|---|---|---|
| 密钥数量 | 1个(共享密钥) | 2个(公钥+私钥) | 无密钥 |
| 速度 | 快 | 慢 | 极快 |
| 主要用途 | 数据加密 | 签名/密钥交换 | 完整性校验 |
| 可逆性 | 可逆 | 可逆(有密钥) | 不可逆 |
| 典型算法 | AES, DES, SM4 | RSA, ECC, SM2 | SHA-256, SM3 |
| 固件场景 | 加密固件传输 | 固件签名验证 | 固件完整性校验 |
6. 我的建议
搞嵌入式固件安全,你不需要成为密码学专家,但必须理解这些基础概念。我个人习惯是:
- 能用哈希解决的,绝不用加密。比如固件完整性校验,哈希就够了,别画蛇添足。
- 签名验证必须用非对称加密。这是固件防篡改的基石,别想着用对称加密替代。
- 密钥管理是重中之重。公钥可以公开,但私钥必须锁在保险柜里。我见过太多因为私钥泄露导致整个产品线被攻破的案例。
嗯,这一章的内容就到这里。记住,密码学不是魔法,它是工程。理解了这些基础,你才能在后面对抗那些试图篡改你固件的攻击者。