《安全启动验证方法实操课程》
第2章 密码学基础(一)

2. 密码学基础(一):对称加密与非对称加密、哈希函数(SHA-256)的原理与作用

🔐 第一节:对称加密 —— 一把钥匙开一把锁

对称加密 是密码学中最直观的加密方式:加密和解密使用同一把密钥。就像你用一把钥匙锁上日记本,再用同一把钥匙打开它。

✅ 优点

  • 加解密速度极快(硬件加速可达 GB/s 级别)
  • 适合大量数据加密(如磁盘、文件、通信流)
  • 算法成熟(AES、SM4、ChaCha20)

⚠️ 缺点

  • 密钥分发困难 —— 如何安全地把密钥交给对方?
  • 密钥管理复杂 —— n 个人通信需要 n(n-1)/2 个密钥
  • 无法提供数字签名 / 抗抵赖性
明文 加密 (AES-256) 密文 解密 (AES-256) 明文 🔑 同一把密钥 K

▲ 对称加密流程:加密和解密使用完全相同的密钥

🔑 第二节:非对称加密 —— 公钥与私钥的默契

非对称加密 使用一对密钥:公钥 (Public Key) 公开分发,私钥 (Private Key) 秘密保存。公钥加密的数据只能用私钥解密;私钥签名的数据只能用公钥验证。

特性 对称加密 非对称加密
密钥数量 1 个(共享密钥) 2 个(公钥 + 私钥)
速度 极快(硬件加速) 慢(慢 100~1000 倍)
典型算法 AES, SM4, ChaCha20 RSA, ECC, SM2
主要用途 批量数据加密 密钥交换、数字签名、身份认证
发送方 Alice 公钥加密 (RSA-2048) 密文 私钥解密 (RSA-2048) Bob 🔓 Bob 的公钥 (公开) 🔑 Bob 的私钥 (秘密) 任何人可用 Bob 的公钥加密消息,但只有 Bob 能用私钥解密 ✅ 解决了密钥分发问题,但速度慢,通常用于加密对称密钥

▲ 非对称加密:公钥加密,私钥解密,密钥对天生一对

🧮 第三节:哈希函数(SHA-256)—— 数据的数字指纹

哈希函数 将任意长度的数据映射为固定长度的摘要(Digest)。SHA-256 输出 256 位(32 字节)的哈希值,具有以下核心性质:

  • 单向性:从哈希值无法反推出原始数据
  • 抗碰撞性:极难找到两个不同输入产生相同哈希值
  • 雪崩效应:输入改变 1 比特,输出约 50% 的比特发生变化
  • 固定长度:无论输入是 1 字节还是 1GB,输出始终 32 字节

🔍 在安全启动中的应用

固件镜像的 SHA-256 哈希值被签名并存储在安全区域。启动时,BootROM 重新计算镜像哈希,与签名中的哈希比对。若不一致,说明镜像被篡改,立即拒绝启动。

任意长度数据 "Hello Secure Boot" SHA-256 哈希引擎 固定 256 位哈希值 a1b2c3d4e5f6... (32 字节) 🔒 单向 · 抗碰撞 · 雪崩效应 · 固定长度 输入 "Hello Secure Boot" → 输出 32 字节指纹 输入 "Hello Secure boot" (大小写不同) → 完全不同的指纹

▲ SHA-256 哈希函数:任意输入 → 固定 256 位输出,雪崩效应保证安全性

⚙️ 第四节:三者在安全启动中的协同工作

在嵌入式安全启动中,三种密码学原语各司其职,形成完整的信任链:

  1. 哈希函数 (SHA-256):计算固件镜像的摘要,作为“数字指纹”
  2. 非对称加密 (RSA/ECC):用私钥对哈希值签名,公钥验证签名真实性
  3. 对称加密 (AES):可选地对固件镜像进行加密存储,防止静态分析
固件镜像 SHA-256 计算哈希 哈希值 H 私钥签名 (RSA/ECC) 签名值 S 公钥验证 (RSA/ECC) ✅ 哈希匹配 → 安全启动 步骤 1 步骤 2 步骤 3 步骤 4

▲ 安全启动信任链:哈希 → 签名 → 验证 → 启动决策

💻 实操代码片段:使用 OpenSSL 计算 SHA-256

以下命令演示如何在嵌入式开发环境中计算固件文件的 SHA-256 哈希值:

# 计算固件镜像的 SHA-256 哈希
$ openssl dgst -sha256 firmware.bin
SHA256(firmware.bin)= a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef1234567890

# 使用私钥对哈希值签名(PKCS#1 v1.5)
$ openssl dgst -sha256 -sign private_key.pem -out firmware.sig firmware.bin

# 使用公钥验证签名
$ openssl dgst -sha256 -verify public_key.pem -signature firmware.sig firmware.bin
Verified OK

📌 关键理解:安全启动中,BootROM 内置公钥,验证签名通过后才执行固件。哈希函数保证了固件的完整性,非对称签名保证了固件的真实性和抗抵赖性。