3、核心密码学基础:哈希函数、数字签名、公钥基础设施(PKI)、证书链

远程证明这件事,说白了就是让一个设备向验证方证明“我是我,我没被篡改”。这背后靠的是什么?就是密码学。我经常跟团队里的新人说,不懂哈希和签名,就别谈远程证明。这一章咱们就把这几个核心概念掰开揉碎讲清楚。

3.1 哈希函数:数据的“指纹”

哈希函数,你想想看,它就像一个单向的碎纸机。你塞进去一份文件,出来一串固定长度的数字。而且这个操作不可逆——你没法从这串数字把原文件拼回来。

我习惯把哈希函数比作人的指纹。每个人的指纹都是独一无二的,文件也一样。哪怕你只改了一个比特,哈希值就会变得面目全非。这就是所谓的雪崩效应。

哈希函数在远程证明中的角色:

  • 完整性校验:验证固件、启动代码有没有被改过
  • 数据摘要:对大量数据做摘要,减少签名负担
  • 身份绑定:将设备身份与度量值绑定在一起

目前业界常用的哈希算法有 SHA-256、SHA-384。SHA-1 已经退役了,别再用。我在一个物联网项目里见过有人还在用 MD5,当时我就说,这跟没锁门有什么区别?

算法 输出长度 安全状态 推荐场景
MD5 128 位 已破解,不推荐 仅用于非安全校验
SHA-1 160 位 已破解,不推荐 遗留系统兼容
SHA-256 256 位 安全 远程证明首选
SHA-384 384 位 安全 高安全场景

我的经验:做设备证明时,别只哈希一次。我习惯把多个度量值(如 Boot ROM、Boot Loader、OS 内核)串起来做一次复合哈希,这样签名只需要做一次,效率高很多。

3.2 数字签名:谁签的,谁负责

哈希能保证数据没被改,但保证不了数据是谁发的。这时候就需要数字签名了。

数字签名的原理其实不复杂:发送方用私钥对数据的哈希值加密,接收方用公钥解密验证。能解密成功,就说明数据确实是用对应的私钥签的。

我举个例子。你在网上买了个智能门锁,厂家在固件上签了名。门锁启动时,它用内置的公钥验证签名。签名对得上,固件才运行。这就是远程证明最朴素的形式。

注意:签名算法也有强弱之分。RSA-2048 目前还算安全,但我建议新项目直接上 ECDSA(椭圆曲线数字签名算法)。同样的安全强度,密钥更短,计算更快。我在一个资源受限的 MCU 项目里用过 ECDSA,效果比 RSA 好太多。

3.3 公钥基础设施(PKI):信任的起点

好,现在问题来了。设备里那个公钥,怎么来的?谁保证它是真的?

这就是 PKI 要解决的问题。PKI 是一套管理密钥和证书的体系。它的核心是证书颁发机构(CA)。CA 是一个大家都信任的第三方,它负责签发证书,证明“这个公钥属于这个设备”。

我习惯把 PKI 比作身份证系统。公安局(CA)给你发身份证(证书),身份证上有你的照片和身份证号(公钥)。别人看到你的身份证,就知道你是谁。

PKI 的核心组件:

  • CA(证书颁发机构):签发和吊销证书
  • RA(注册机构):验证申请者身份
  • 证书库:存储已签发的证书
  • CRL/OCSP:证书吊销列表/在线状态查询

在设备远程证明里,PKI 的作用就是建立信任链。设备出厂时,CA 给设备签发一个证书。验证方只要信任这个 CA,就信任设备。

3.4 证书链:层层递进的信任

你想想看,如果全世界只有一个 CA,那它要是被攻破了,整个体系就完了。所以实际部署中,我们用的是证书链。

证书链的结构是这样的:

  • 根 CA:自签名证书,是整个信任链的锚点
  • 中间 CA:由根 CA 签发,用于分担风险
  • 终端实体证书:由中间 CA 签发,发给具体设备

验证的时候,从设备证书开始,逐级向上验证,直到信任的根证书。这个过程叫证书路径验证。

我曾经在一个车联网项目里踩过坑。当时我们只用了两级证书链,结果中间 CA 的私钥泄露了,不得不吊销所有下级证书。后来我学乖了,至少用三级:根 CA 离线存储,中间 CA 在线服务,设备证书按批次签发。这样即使中间 CA 出问题,根 CA 还在,重建成本低很多。

证书链信任模型 根 CA(自签名) 中间 CA 设备 A 证书 设备 B 证书 设备 C 证书 验证路径:设备证书 → 中间 CA → 根 CA(信任锚点)

3.5 证书格式与 X.509

说到证书,就绕不开 X.509 标准。这是目前最通用的证书格式。一个 X.509 证书包含以下关键字段:

字段 说明 在远程证明中的用途
版本号 V1/V2/V3 V3 支持扩展,推荐使用
序列号 CA 分配的唯一编号 用于吊销查询
签名算法 如 sha256WithRSAEncryption 指定签名算法
颁发者 签发该证书的 CA 名称 构建证书链
有效期 起止时间 检查证书是否过期
主体 证书持有者名称 标识设备身份
公钥 持有者的公钥 验证签名
扩展 密钥用途、基本约束等 限制证书用途

避坑指南:我曾经见过一个设备,证书里没设置密钥用途扩展(Key Usage),结果有人拿设备证书去签固件,造成安全漏洞。记住,设备证书一定要加上 digitalSignature 用途,CA 证书要加上 keyCertSign 和 cRLSign。

3.6 证书生命周期管理

证书不是永久的。它有生命周期。我习惯把证书管理分成四个阶段:

  1. 签发:设备生产时,CA 为每个设备生成密钥对并签发证书
  2. 部署:将证书和私钥安全写入设备(私钥绝不能明文传输)
  3. 使用:设备在远程证明时出示证书,验证方验证证书链
  4. 吊销/更新:证书过期或私钥泄露时,吊销旧证书,签发新证书

嗯,这里要注意。很多团队只关注签发和部署,忽略了吊销。结果设备被攻破了,证书还在有效期内,攻击者照样能冒充设备。我建议每个项目都要部署 OCSP(在线证书状态协议)或 CRL(证书吊销列表)。

3.7 小结

这一章的内容,说白了就是远程证明的密码学地基。哈希函数保证数据没被改,数字签名保证数据是谁发的,PKI 和证书链保证公钥是真的。这三样东西缺一不可。