密码学基础(上):对称加密与非对称加密的区别,哈希函数的特性

各位同学,咱们今天聊聊密码学基础。说实话,很多搞固件开发的朋友一听到「密码学」三个字就头大,觉得那是数学家的活儿。其实不然。你只要搞懂三个核心概念——对称加密、非对称加密、哈希函数——就能应付 90% 的固件签名场景。

我刚开始做嵌入式安全那会儿,也踩过不少坑。有一次把 AES 密钥硬编码在固件里,结果被客户的安全审计抓个正着……嗯,从那以后我再也不敢小看密码学基础了。

1. 对称加密:一把钥匙开一把锁

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

常见的对称加密算法有:

  • AES(Advanced Encryption Standard)—— 目前最主流,密钥长度 128/192/256 位
  • DES(Data Encryption Standard)—— 太老了,密钥只有 56 位,别用了
  • SM4 —— 国标算法,国内项目常见

核心特点:

  • 加密速度快,适合大数据量
  • 密钥管理是短板 —— 密钥怎么安全地传给对方?
  • 密钥分发问题:如果密钥在传输中被截获,整个加密就废了

我在一个 IoT 项目里遇到过这种情况:设备和服务端用 AES 通信,密钥是出厂时预置的。结果有一批设备的密钥被逆向工程读出来了……你想想看,所有设备都得召回升级。这就是对称加密的痛点。

2. 非对称加密:公钥私钥,各司其职

非对称加密就聪明多了。它有一对密钥:公钥可以公开,私钥自己藏好。公钥加密的数据只能用私钥解密,反过来私钥签名的数据可以用公钥验证。

常见算法:

  • RSA —— 经典,但密钥越长越慢(2048 位起步)
  • ECC(椭圆曲线)—— 更短的密钥达到同等安全强度,适合嵌入式
  • SM2 —— 国标椭圆曲线算法
特性 对称加密 非对称加密
密钥数量 1 个 2 个(公钥 + 私钥)
加密速度 快(硬件加速常见) 慢(比对称慢 100-1000 倍)
密钥分发 困难 公钥随便发
典型用途 数据加密 密钥交换、数字签名
嵌入式适用性 非常适合 需要权衡性能

我的建议:实际项目中,通常用非对称加密来传递对称密钥,然后用对称加密来加密实际数据。这叫「混合加密」,既安全又高效。

3. 哈希函数:数据的「指纹」

哈希函数不是加密,它没有密钥。它的作用是把任意长度的数据,压缩成固定长度的摘要(digest)。

特性就三条:

  1. 单向性:从哈希值推不出原始数据。你想想看,如果能反推,那密码存储就全完蛋了。
  2. 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值。
  3. 雪崩效应:输入改一个比特,输出完全变样。

常见算法:

  • SHA-256 —— 目前最安全,输出 256 位,固件签名标配
  • SHA-1 —— 有碰撞攻击风险,别用了
  • MD5 —— 已经不安全,128 位太短
  • SM3 —— 国标哈希算法,输出 256 位

避坑指南:我曾经在一个项目中看到有人用 MD5 做固件完整性校验。结果被攻击者伪造了固件,因为 MD5 的碰撞攻击已经非常成熟。记住:固件签名场景,至少用 SHA-256。

4. 三者关系:一张图看懂

下面这张图展示了对称加密、非对称加密和哈希函数在固件签名流程中的位置。你看,它们各司其职,缺一不可。

固件签名中的密码学组件 对称加密 AES / SM4 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 对称加密 → 加密固件数据(速度快) 非对称加密 → 签名/验签(保证身份) 固件签名流程:哈希 → 非对称加密(私钥签名) 先算哈希,再用私钥加密哈希值,得到签名 验签流程:哈希 → 非对称解密(公钥验证) 重新算哈希,用公钥解密签名,对比两个哈希值 哈希函数保证完整性,非对称加密保证真实性,对称加密保证机密性 三者结合,才是完整的固件安全方案

5. 实际项目中的选择建议

我个人习惯这样选型:

  • 固件签名:用 ECC(比如 NIST P-256)或 SM2,配合 SHA-256 或 SM3
  • 固件加密传输:用 AES-128-GCM,密钥通过 ECC 密钥交换协商
  • 固件完整性校验:只用哈希,比如启动时校验 bootloader 的 SHA-256 值

小技巧:在资源受限的 MCU 上,ECC 比 RSA 快得多。我做过对比:同样的安全强度,ECC 签名速度是 RSA 的 3-5 倍,而且密钥小一半。所以嵌入式场景,优先考虑 ECC。

6. 本章小结

记住三句话:

  1. 对称加密快,但密钥分发麻烦
  2. 非对称加密解决了密钥分发问题,但慢
  3. 哈希函数不是加密,它是数据的「指纹」,用来防篡改