密码学基础:对称加密与非对称加密、哈希函数、数字签名原理

说实话,很多做IoT的工程师一听到「密码学」三个字就头大。我当年也一样,总觉得这是数学博士该操心的事。直到有一次,我负责的一个智能门锁项目因为加密选型失误,被安全团队直接打回重做……嗯,从那以后我才真正意识到:不懂密码学,做IoT安全就是纸上谈兵。

这一章,咱们不聊复杂的数学公式。我会用实际项目中踩过的坑,把对称加密、非对称加密、哈希函数和数字签名这几个核心概念讲清楚。你想想看,设备证书注入体系里,每一步都离不开这些基础工具。

核心观点:密码学不是选「最强」的算法,而是选「最合适」的算法。IoT设备的算力、存储、功耗都有限,选型时得掂量清楚。

3.1 对称加密:一把钥匙开一把锁

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

我习惯把对称加密比作「快递柜」:你把东西放进柜子,用密码锁上;收件人用同一个密码打开柜子。整个过程只有一个密码,谁拿到谁就能开。

3.1.1 常用算法

算法 密钥长度 特点 IoT适用场景
AES 128/192/256 bit 硬件加速支持好,速度快 数据加密传输、固件加密
ChaCha20 256 bit 软件实现效率高,无硬件加速也快 低端MCU、无AES硬件的设备
SM4 128 bit 国密标准,国内项目必用 国内IoT设备合规需求
我的经验:在资源受限的MCU上,我优先选ChaCha20。它不需要硬件加速,纯软件跑起来比AES快不少。曾经在一个Cortex-M0+的芯片上,AES-128-CBC加密1KB数据要2.3ms,ChaCha20只要0.9ms。

3.1.2 工作模式

对称加密还有个坑——工作模式选不对,加密等于白加密。我见过有人用ECB模式加密设备固件,结果密文里还能看出固件的结构轮廓……

  • ECB(电子密码本模式):相同明文块生成相同密文块。别用,真的别用。
  • CBC(密码分组链接模式):每个明文块与前一个密文块异或后再加密。需要初始向量IV。
  • GCM(伽罗瓦/计数器模式):同时提供加密和完整性校验。IoT里我推荐这个。
避坑指南:我曾经在一个项目中用了CBC模式,但忘了每次加密都要生成随机IV。结果设备重启后IV固定,攻击者通过重放攻击直接绕过了认证。记住:IV必须随机,且每次加密都不同。

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

非对称加密的思路就巧妙多了——它用一对密钥:公钥公开,私钥保密。公钥加密的数据只有私钥能解;私钥签名的数据,公钥能验。

你想想看,在设备证书注入场景里,这简直就是天作之合。生产线上给设备注入证书时,我们只需要把CA的公钥烧进去,私钥留在服务器端。设备用公钥验证服务器下发的证书签名,服务器用私钥签发证书。

3.2.1 主流算法对比

算法 密钥长度 签名速度 验证速度 IoT适用性
RSA 2048/4096 bit 慢 快 有硬件加速的芯片可用
ECDSA 256/384 bit 快 快 非常适合IoT,密钥短
Ed25519 256 bit 极快 极快 新一代IoT首选
关键点:同等安全强度下,ECC(椭圆曲线)的密钥长度只有RSA的1/10左右。256位ECC ≈ 3072位RSA。对于存储空间只有几KB的IoT设备,这个差距是致命的。

3.2.2 实际应用中的坑

我记得有一次,设备端用RSA-2048验证签名,每次验证要花800ms。用户开锁要等将近1秒,产品经理直接炸了。后来换成ECDSA P-256,验证时间降到50ms以内。

所以我的建议是:新项目直接上ECC,别犹豫。除非你的芯片有RSA硬件加速器,且没有ECC支持,否则别碰RSA。

3.3 哈希函数:数据的指纹

哈希函数,你可以把它理解成「数据的指纹」。不管输入多大,输出固定长度;而且输入稍微变一点,输出就天翻地覆。

在证书注入体系里,哈希函数有三个关键用途:

  1. 固件完整性校验:计算固件的哈希值,和官方公布的对一下,就知道固件有没有被篡改。
  2. 证书指纹:证书本身可能很长,但它的哈希值只有几十字节,方便比对。
  3. 数字签名的前置步骤:先对消息做哈希,再对哈希值签名,效率高得多。

3.3.1 常用哈希算法

算法 输出长度 安全性 IoT推荐度
SHA-256 256 bit 安全 ★★★★★
SHA-384 384 bit 更安全 ★★★★
SHA-512 512 bit 最安全 ★★★(资源消耗大)
SM3 256 bit 国密标准 ★★★★(国内项目)
我的习惯:IoT设备里我默认用SHA-256。安全够用,硬件支持广泛,输出长度适中。除非有国密合规要求,否则SHA-256就是最优解。

3.4 数字签名:防伪、防篡改、防抵赖

数字签名,就是把哈希函数和非对称加密结合起来。它的核心流程是这样的:

  1. 发送方对消息做哈希,得到摘要。
  2. 发送方用私钥对摘要加密,生成签名。
  3. 接收方用公钥解密签名,得到摘要A。
  4. 接收方对收到的消息做哈希,得到摘要B。
  5. 比较摘要A和摘要B,一致则签名有效。

你想想看,这个机制能保证三件事:

  • 身份认证:只有持有私钥的人才能生成有效签名。
  • 数据完整性:消息被篡改后,哈希值对不上。
  • 不可抵赖:签名者无法否认自己签过名。
证书注入中的典型场景:CA服务器用私钥签发设备证书,设备端用预置的CA公钥验证证书签名。只要验证通过,设备就信任这张证书是CA颁发的,不是伪造的。

3.5 知识体系总览

下面这张图,我把本章的核心知识点串起来了。你可以把它当作一张「密码学工具地图」,后面讲到证书注入流程时,随时回来对照。

密码学基础:知识体系总览 密码学基础 · 知识体系总览 对称加密 同一密钥加密解密 AES / ChaCha20 / SM4 ECB ❌ CBC ✅ GCM ✅ 适用:数据加密传输 非对称加密 公钥加密 · 私钥解密 RSA / ECDSA / Ed25519 密钥短 · 适合IoT 适用:证书签名验证 哈希函数 数据指纹 · 不可逆 SHA-256 / SM3 固定输出 · 防篡改 适用:完整性校验 数字签名 哈希 + 非对称加密 身份认证 数据完整性 不可抵赖 数字签名 = 哈希函数 + 非对称加密,是证书信任链的基石 证书注入体系中的密码学应用 CA生成密钥对 哈希固件/证书 私钥签名 设备验证签名 信任建立

3.6 选型建议:IoT设备怎么选?

讲完理论,咱们落地到实际选型。我整理了一张速查表,你以后做项目可以直接参考:

场景 推荐算法 理由
设备与服务器通信加密 AES-128-GCM 或 ChaCha20-Poly1305 同时提供加密和完整性校验
证书签名与验证 ECDSA P-256 或 Ed25519 密钥短,验证快
固件完整性校验 SHA-256 安全够用,硬件支持好
设备身份认证 ECDSA + SHA-256 数字签名标准组合
国密合规项目 SM2 + SM3 + SM4 满足国内密码法要求
重要提醒:千万不要自己实现密码算法。我见过有人为了省几KB的Flash,手写了一个AES……结果侧信道攻击直接泄露了密钥。用现成的库,比如mbedTLS、OpenSSL、WolfSSL,它们经过了大量安全审计。

好了,这一章的内容就到这里。密码学基础是后面所有章节的「地基」,尤其是证书签发和验证流程,每一步都离不开这些工具。你先把这几个概念吃透,后面讲X.509证书结构、PKI体系的时候,就会顺畅很多。