密码学基础(上):对称加密与非对称加密、哈希函数与数字签名
各位同学,咱们今天聊点硬核的。密码学这东西,说白了就是安全启动的「地基」。你想想看,如果连加密都搞不明白,后面那些签名校验、固件验证根本没法谈。我做了这么多年嵌入式安全,见过太多因为密码学基础不牢导致翻车的项目。嗯,咱们今天就把这块啃透。
对称加密:一把钥匙开一把锁
对称加密,顾名思义,加密和解密用的是同一把密钥。就像你家的门锁,用同一把钥匙锁门和开门。我最早接触嵌入式安全时,第一个项目用的就是 AES-128,那时候觉得这玩意儿真简单,后来才发现坑也不少。
核心要点:对称加密速度快,适合大量数据加密。但密钥分发是个大问题——你怎么把密钥安全地交给对方?
常见的对称加密算法有这些:
| 算法 | 密钥长度 | 典型应用场景 |
|---|---|---|
| AES | 128 / 192 / 256 位 | 固件加密、存储加密 |
| DES | 56 位 | 已废弃,别用了 |
| SM4 | 128 位 | 国密标准,国内项目常用 |
| ChaCha20 | 256 位 | 嵌入式低功耗场景 |
我个人习惯在资源受限的 MCU 上用 AES-128,够用且性能好。但要注意,AES 有 ECB、CBC、CTR 等模式。ECB 模式千万别用——我见过有人把固件用 ECB 加密,结果密文里还能看出图片轮廓,那叫一个尴尬。
避坑指南:我曾经在一个 IoT 项目里看到同事直接用 ECB 模式加密传感器数据,结果攻击者通过统计密文块就能推断出传感器状态。记住:永远用 CBC 或 CTR 模式,并且 IV 必须随机。
非对称加密:公钥私钥两把锁
非对称加密就聪明多了。它有一对密钥:公钥公开,私钥保密。公钥加密的数据只能用私钥解密,反过来私钥签名的数据可以用公钥验证。这解决了对称加密的密钥分发难题。
你想想看,如果设备出厂时烧录了服务器的公钥,那服务器用私钥签名的固件,设备就能验证真伪。这就是安全启动的核心逻辑之一。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个 | 2 个(公钥 + 私钥) |
| 速度 | 快(硬件加速常见) | 慢(比对称慢 1000 倍以上) |
| 典型算法 | AES, SM4 | RSA, ECC, SM2 |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
实际项目中,我们通常混合使用:用非对称加密传递对称密钥,再用对称密钥加密实际数据。这叫「混合加密」,既安全又高效。
经验之谈:RSA 密钥长度至少 2048 位,ECC 推荐 256 位(P-256)。别为了省那点 Flash 空间用 1024 位 RSA,我见过有产品因此被破解,损失惨重。
哈希函数:数据的「指纹」
哈希函数能把任意长度的数据,压缩成固定长度的摘要。而且它有个特性:输入稍微改一点,输出就面目全非。这就像给数据按个指纹,独一无二。
常见的哈希算法:
- MD5:128 位,已破解,别用
- SHA-1:160 位,已发现碰撞攻击,别用
- SHA-256:256 位,目前安全,推荐
- SM3:256 位,国密标准
哈希函数在安全启动里干啥用?校验固件完整性。设备启动时计算固件的哈希值,跟出厂时记录的哈希值对比。对得上,说明固件没被篡改。
关键特性:哈希是单向的,从摘要反推原始数据在计算上不可行。所以哈希也叫「单向散列函数」。
数字签名:防伪 + 防篡改
数字签名 = 哈希 + 非对称加密。流程是这样的:
- 发送方对数据计算哈希值
- 用私钥加密这个哈希值,得到签名
- 接收方用公钥解密签名,得到哈希值 A
- 接收方自己计算数据的哈希值 B
- 对比 A 和 B,一致则签名有效
这就保证了两个事情:数据确实来自声称的发送方(防伪造),数据没有被篡改(防篡改)。
注意:签名 ≠ 加密。签名不隐藏数据内容,只保证真实性和完整性。我见过有人把签名当加密用,结果敏感数据明文传输,闹了大笑话。
知识体系总览
下面这张图把今天讲的内容串起来了。你仔细看看,对称加密、非对称加密、哈希、数字签名之间的关系一目了然。
实战中的选择建议
说了这么多理论,咱们落地到实际项目。我一般这样选型:
- 资源极度受限(几十 KB RAM):AES-128 + SHA-256,纯软件实现也能跑
- 有硬件加速器:优先用硬件 AES 和 SHA,速度提升 10 倍以上
- 需要国密合规:SM4 + SM3 + SM2,注意 SM2 签名性能比 RSA 好很多
- 安全启动场景:RSA-2048 或 ECC P-256 签名,SHA-256 做哈希
一个小技巧:我习惯在开发阶段用 OpenSSL 命令行生成测试密钥和签名,验证流程通了再移植到嵌入式平台。这样能省不少调试时间。
好了,密码学基础的上半部分就到这儿。对称加密、非对称加密、哈希、数字签名,这四个概念是安全启动的四大支柱。你把这四个搞明白了,后面讲签名链、信任根、固件升级验证的时候,就会觉得顺理成章。