3、密码学基础(上):对称加密(AES)、非对称加密(RSA/ECC)、哈希函数(SHA-256)原理

做边缘网关身份认证,绕不开密码学。说白了,密码学就是整个安全体系的「地基」。地基不稳,上面盖再多东西都是白搭。

我个人习惯把密码学工具分成三类:对称加密、非对称加密和哈希函数。这三兄弟各司其职,在网关认证流程里缺一不可。今天咱们先把原理讲透,下节课再聊怎么在边缘设备上落地。

核心观点:边缘网关资源受限,选对密码算法比单纯堆砌安全措施更重要。选错了,要么跑不动,要么有漏洞。

3.1 对称加密:AES 是怎么工作的?

对称加密,就是加密和解密用同一把钥匙。你想想看,就像你用一把锁锁门,也用同一把钥匙开门。优点是快,缺点是钥匙怎么安全地交给对方是个大问题。

在边缘网关场景里,AES(Advanced Encryption Standard)是绝对的主流。我做过一个项目,网关和云端之间传输固件升级包,用的就是 AES-256-GCM 模式。为什么选它?因为 GCM 模式自带认证标签,能同时保证机密性和完整性,省掉一个额外的 HMAC 计算。

AES 的核心操作

AES 不是简单地把明文和密钥异或一下完事。它内部有一套复杂的「置换-代换」网络。我尽量用大白话说:

  • 字节代换(SubBytes): 把每个字节通过一个固定的 S 盒替换成另一个字节。这个 S 盒是精心设计的,能抵抗各种数学攻击。
  • 行移位(ShiftRows): 把状态矩阵的每一行向左循环移位。目的是让列之间产生扩散。
  • 列混合(MixColumns): 对每一列进行数学变换。这一步是 AES 安全性的关键,把单个字节的变化扩散到整列。
  • 轮密钥加(AddRoundKey): 把当前状态和本轮的子密钥异或。子密钥是从主密钥通过密钥扩展算法生成的。

嗯,这里要注意:AES-128 做 10 轮,AES-192 做 12 轮,AES-256 做 14 轮。轮数越多,安全余量越大,但计算开销也越大。在边缘网关上,我一般推荐 AES-128,除非有合规要求必须用 256。

实战建议: 在嵌入式设备上,尽量使用硬件 AES 加速器。如果 CPU 没有 AES 指令集(比如一些老旧的 Cortex-M3),纯软件实现 AES 会非常慢,这时候可以考虑用 ChaCha20 替代。

AES 工作模式对比

光有 AES 核心算法还不够,还得选工作模式。不同的模式适用于不同的场景。我整理了一个表格,方便你对比:

模式 是否需要 IV 并行性 错误传播 典型场景
ECB 否 高 无 绝对不要用(相同明文块产生相同密文块)
CBC 是 低(加密不可并行) 一个错误影响两个块 文件加密、旧系统兼容
CTR 是 高 无 流式数据、高速传输
GCM 是 高 无(带认证标签) 边缘网关首选(加密+认证一体)

避坑指南: 我曾经在一个项目中看到有人用 ECB 模式加密网关的配置数据。结果因为配置项大多是固定的,密文里出现了明显的重复模式,攻击者一眼就能看出哪些配置项是相同的。从那以后,我见到 ECB 就直接打回。

3.2 非对称加密:RSA 和 ECC 的取舍

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

在边缘网关里,非对称加密主要用于两个地方:身份认证(数字签名)和密钥协商(交换对称密钥)。

RSA:老牌劲旅

RSA 的安全性基于大整数分解的困难性。给你两个大素数 p 和 q,乘起来得到 n 很容易;但给你 n,要分解出 p 和 q 就难了。

RSA 的优点是成熟、稳定,几乎所有密码库都支持。缺点是密钥越长,加解密越慢。1024 位的 RSA 现在已经不安全了,至少要用 2048 位。2048 位的 RSA 签名在边缘设备上大概需要几十毫秒,对于实时性要求高的场景可能扛不住。

ECC:后起之秀

ECC(椭圆曲线密码学)的安全性基于椭圆曲线离散对数问题。同样的安全强度下,ECC 的密钥长度比 RSA 短得多。举个例子:

  • RSA 2048 位 ≈ ECC 224 位
  • RSA 3072 位 ≈ ECC 256 位
  • RSA 7680 位 ≈ ECC 384 位

密钥短意味着计算快、存储小、带宽省。这对边缘网关来说太重要了。我个人习惯在新项目里优先用 ECC,特别是 ECDSA 签名和 ECDH 密钥交换。

关键对比: 在 Cortex-M4 上,ECC 256 位的签名速度比 RSA 2048 位快 5-10 倍,而密钥只占 1/8 的空间。你说选哪个?

RSA vs ECC 选型指南

维度 RSA ECC
安全基础 大整数分解 椭圆曲线离散对数
密钥长度(等效安全) 2048 位 256 位
签名速度 慢 快
验证速度 快 慢(但仍在可接受范围)
密钥生成 慢 快
兼容性 极好(所有平台都支持) 好(现代平台都支持)
推荐场景 兼容旧系统、CA 证书 边缘设备、IoT、移动端

我的经验: 如果网关需要和云端做双向认证,我建议用 ECC 做设备端密钥,云端保留 RSA 证书。这样设备端计算量小,云端验证也快。这叫「混合架构」,很多商业方案都这么干。

3.3 哈希函数:SHA-256 的不可逆性

哈希函数不是加密。它没有密钥,也不可逆。你给它任意长度的输入,它给你一个固定长度的输出(摘要)。而且,哪怕输入只改一个比特,输出也会面目全非。

在边缘网关里,哈希函数主要用来:

  • 完整性校验: 检查固件有没有被篡改
  • 密码存储: 不存明文密码,只存哈希值
  • 数字签名: 先对消息哈希,再对哈希值签名
  • 消息认证码(HMAC): 结合密钥做消息认证

SHA-256 的内部结构

SHA-256 属于 SHA-2 家族,输出 256 位(32 字节)的摘要。它的内部结构是 Merkle-Damgård 架构:

  1. 填充: 把消息填充到 512 位的整数倍,填充规则包括末尾加 1 和长度信息。
  2. 分块: 把填充后的消息分成 512 位(64 字节)的块。
  3. 迭代压缩: 每个块通过一个压缩函数处理,压缩函数内部有 64 轮循环,每轮用不同的常数和逻辑函数。
  4. 输出: 最后一个块处理完,8 个 32 位的状态寄存器拼接成 256 位的摘要。

你可能会问:「为什么 SHA-256 这么安全?」原因在于它的压缩函数设计——逻辑函数(Ch、Maj、Σ 等)是非线性的,而且每轮都引入了不同的常数,使得从摘要反推输入在计算上不可行。

避坑指南: 我曾经见过有人用 MD5 做固件完整性校验。MD5 已经被破解了,可以人为构造碰撞。攻击者可以替换固件,同时伪造一个相同的 MD5 值。现在至少要用 SHA-256,如果合规要求高,可以考虑 SHA-3。

3.4 知识体系总览

为了让你对这三类密码学工具有个整体认识,我画了一张图。你可以看到它们在边缘网关身份认证中的位置和关系:

边缘网关密码学基础 — 知识体系总览 对称加密 AES-128/256 模式:GCM / CTR / CBC 特点:速度快,密钥分发难 用途:数据加密传输 推荐:AES-128-GCM 非对称加密 RSA 2048 / ECC 256 ECDSA / ECDH 特点:慢,密钥管理方便 用途:身份认证、密钥协商 推荐:ECC 优先 哈希函数 SHA-256 / SHA-3 HMAC 特点:不可逆,固定输出 用途:完整性、密码存储 推荐:SHA-256 边缘网关身份认证流程 TLS 握手 → 证书验证 → 密钥协商 → 会话加密 选型原则 资源受限 → 优先 ECC + AES-GCM + SHA-256 兼容性要求高 → RSA + AES-CBC + SHA-256

3.5 实战中的组合拳

单独看每个算法都很简单,但真正做项目时,你得把它们组合起来。我举个例子:

假设网关要和云端建立安全连接。典型的流程是:

  1. 身份认证: 网关用 ECDSA 签名一个挑战值,云端用网关的公钥验证签名。这证明了网关确实是它声称的那个设备。
  2. 密钥协商: 双方用 ECDH 交换临时密钥,生成一个共享的对称密钥。
  3. 会话加密: 用 AES-128-GCM 加密后续的所有通信数据,同时用 GCM 的认证标签保证完整性。
  4. 完整性校验: 在传输固件或配置时,先用 SHA-256 计算哈希值,再对哈希值签名。接收方验证签名后,再计算本地哈希值对比。

你看,对称加密、非对称加密、哈希函数,一个都没少。它们各司其职,谁也替代不了谁。

总结一句话: 对称加密管速度,非对称加密管身份,哈希函数管完整性。三剑合璧,才能撑起边缘网关的安全防线。