1、密码学基础:对称加密与非对称加密的区别、哈希函数的作用、加盐哈希的概念

好,咱们正式开始。第一章不讲代码,不讲硬件,先把密码学里最核心的三个概念掰扯清楚。

你想想看,在受限设备上做密码实现,最怕什么?怕选错算法,怕用错场景。我见过太多项目,芯片选型时没考虑加密开销,结果跑起来卡成幻灯片。所以这一章,咱们把地基打牢。

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

对称加密,说白了就是加密和解密用同一把密钥。你拿它锁门,也拿它开门。

最常见的算法有 AES、DES、SM4。在嵌入式世界里,AES 是绝对的主流。为什么?因为它硬件加速支持好,很多 MCU 自带 AES 引擎,跑起来几乎不占 CPU。

核心特点:

  • 加密速度快,适合大数据量
  • 密钥分发困难——你得想办法把密钥安全地交给对方
  • 密钥长度通常 128/192/256 位

我在项目中遇到过一件事:有个同事用 AES-256 加密传感器数据,结果发现 MCU 算力不够,每秒钟只能处理 200 字节。后来换成硬件 AES 引擎,速度直接飙到 2MB/s。嗯,选对实现方式很重要。

1.2 非对称加密:公钥加密,私钥解密

非对称加密就有点意思了。它有两把钥匙:公钥公开,私钥自己藏好。你用我的公钥加密,只有我能用私钥解开。

常见的算法有 RSA、ECC、SM2。在受限设备上,ECC(椭圆曲线密码)比 RSA 更受欢迎——同样的安全强度,ECC 的密钥更短,计算量更小。

特性 对称加密 非对称加密
密钥数量 1 个 2 个(公钥 + 私钥)
速度 快(硬件加速可达 GB/s) 慢(通常慢 100-1000 倍)
典型用途 批量数据加密 密钥交换、数字签名
嵌入式开销 低 高(尤其 RSA)

我个人习惯的做法是:用非对称加密来传递对称密钥,然后用对称加密来加密实际数据。这叫「混合加密」,既安全又高效。

避坑指南:我曾经见过一个产品,直接用 RSA 加密每一条传感器数据。结果电池两天就耗光了。非对称加密不是这么用的——它适合小数据量、低频次的操作,比如固件签名验证、密钥协商。

1.3 哈希函数:不可逆的指纹

哈希函数,你可以把它理解成「数字指纹」。输入任意长度的数据,输出固定长度的哈希值。而且,哪怕输入只改一个比特,输出的哈希值也会面目全非。

常见的哈希算法有 SHA-256、SHA-3、SM3。在嵌入式里,SHA-256 是最通用的选择。

哈希函数有三个核心特性:

  • 单向性:从哈希值反推原始数据,理论上不可能
  • 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值
  • 雪崩效应:输入微小变化,输出剧烈变化

实际用途:哈希函数在嵌入式里最常见的三个场景——固件完整性校验、密码存储、消息认证码(HMAC)。我建议你至少把 SHA-256 的接口调通,后面章节会反复用到。

1.4 加盐哈希:别让密码裸奔

直接存密码的哈希值,够安全吗?不够。为什么?因为攻击者可以提前算好常见密码的哈希值,做成「彩虹表」。你存的是哈希,人家一查表就还原了。

加盐,就是在密码后面拼接一段随机字符串,然后再算哈希。每个用户的盐都不一样,彩虹表就失效了。

// 伪代码示例:加盐哈希
salt = random_bytes(16)                // 生成 16 字节随机盐
hash = SHA256(password + salt)         // 密码 + 盐,一起哈希
store(username, salt, hash)            // 存储用户名、盐、哈希值

// 验证时:
input_hash = SHA256(input_password + stored_salt)
if input_hash == stored_hash:
    accept()
else:
    reject()

我曾经在一个 IoT 项目里发现,厂商直接把用户密码的 MD5 值存到服务器上。结果数据库泄露,几万个设备被远程控制。嗯,加盐这件事,真的不能省。

加盐的最佳实践:

  • 盐的长度至少 16 字节
  • 每个用户使用独立的随机盐
  • 使用慢哈希算法(如 bcrypt、PBKDF2、Argon2)替代简单哈希
  • 盐和哈希值一起存储,不要分开

1.5 知识体系总览

下面这张图,把本章的核心概念串起来了。你可以把它当作一个思维导图,后面每学一章,都可以往这个框架里填东西。

密码学基础核心概念 密码学基础 对称加密 非对称加密 哈希函数 AES SM4 RSA ECC SHA-256 SM3 加盐哈希 混合加密 = 非对称加密传递密钥 + 对称加密加密数据 加盐哈希 = 密码 + 随机盐 → 哈希值,防止彩虹表攻击

这张图里,对称加密和非对称加密是「加密」的两条腿,哈希函数是「完整性校验」的基石,加盐哈希则是密码存储的标配。后面所有章节,都会围绕这三个核心展开。

给初学者的建议:别急着把所有算法都学透。先把 AES-128、SHA-256、ECC 这三个接口调通,跑几个测试向量,你就已经超过 80% 的嵌入式工程师了。剩下的,遇到具体场景再查不迟。