密码学-数字证书及其他相关概念

已更新系列文章包括104、61850、modbus 、储能系统等,欢迎关注

之前聊过的对称加密(AES)、非对称加密(RSA/ECDSA)、哈希摘要和签名验签,密码学领域还有几个在嵌入式设备开发中极其重要的上层概念。它们是构建完整安全通信系统的"最后一公里"。

1. 数字证书与 PKI(公钥基础设施)------ "公钥的身份证"

  • 你已知道的 :公钥是公开的,但你怎么确定这个公钥确实是"云端总司令"的,而不是黑客伪造后发给你的?

  • 新概念数字证书(X.509) 就是公钥的"身份证"。由一个绝对权威的第三方机构(CA,证书颁发机构 )用自己的私钥给"某人的公钥 + 身份信息"签名,生成的一份文件。CA根证书里包含的是CA的"公钥"。私钥永远只能留在CA自己的保险柜里,用于"签发"证书;而根证书(内含公钥)则公开发布,用于"验证"证书。

  • 关系与作用 :设备出厂时预置"CA根证书"。当云端发来它的公钥证书时,设备用CA的公钥去验签该证书。验签通过,才敢信任这个公钥是真的。这就解决了"公钥防伪"问题。

数字证书完整流程(颁发 + 验证)

第一阶段:CA的自我准备(信任的起点)

  1. CA生成"根私钥"和"根公钥":CA用自己的算法生成一对密钥。

    • 根私钥:绝密,锁在CA保险柜,用于签字盖章。

    • 根公钥:公开,放入"CA根证书"中。

  2. CA制作"根证书" :CA把"自己的名字(证书颁发机构) + 自己的根公钥 + 有效期"打包,并用自己的根私钥 给自己签个名(自签名)。这就生成了CA根证书

  3. 设备出厂烧录 :设备生产时,把这份CA根证书 (内含CA公钥)烧进设备的只读安全存储区。从此,你的设备无条件信任这个CA公钥。

第二阶段:云端向CA申请证书

  1. 云端生成自己的"实体的私钥和公钥":云端服务器自己生成一对密钥。

    • 云端私钥:自己藏好,绝不外传(用于后续签名)。

    • 云端公钥:准备拿出来公开(但需要CA担保)。

  2. 云端提交"办证申请"(CSR,证书签名请求) :小明把自己的云端公钥 、自己的域名(api.cloud.com)、公司名等身份信息,整理成一份申请书,发给CA。

  3. CA审核身份 :CA打电话、查营业执照,确认确实是 api.cloud.com 的合法主人。

  4. CA签发"数字证书":审核通过后,CA做两件事:

    • 云端公钥 + 云的身份信息(域名等) + 有效期,打包成一个文件。

    • CA拿出自己的根私钥 ,对这个打包文件进行哈希+签名(就像在护照上盖了个防伪钢印)。

    • 最终生成的文件,就是云端的数字证书(也叫公钥证书)。

第三阶段:设备验证云端证书

  1. 云端发送证书 :当你的设备连接云端时,云端先把它的数字证书(包含云端公钥 + CA的签名)发给你。

  2. 设备开始验签(核心动作)

    • 解得开 => 证明这个证书确实是CA签发的,不是黑客伪造的。

    • 解不开 => 直接拒绝连接。

    • 第一步(拆封) :设备用出厂时预置的CA根证书里的CA公钥,去解证书上的"CA防伪钢印(签名)"。解得开吗?

    • 第二步(比对):解开钢印后,设备得到了CA当时算出的"摘要A"。同时,设备自己把证书里的"云端公钥和身份信息"重新哈希一遍,算出"摘要B"。

    • 第三步(判定):如果 摘要A == 摘要B,说明证书内容没被篡改。

10.设备提取并信任公钥 :验签通过后,设备从证书里提取出明文的"云端公钥" 。因为设备信任CA,CA担保这个公钥属于 api.cloud.com,所以设备才敢把这个公钥存下来,用于后续加密通信或验签。


📌 关键角色和归属权总结

组件 持有者 保密性 核心用途
CA 根私钥 CA (证书颁发机构) 绝密,永不公开 给所有下级证书签发(盖章)
CA 根证书 (内含CA公钥) 设备(出厂预置) 、浏览器等 完全公开 验证下级证书上的CA签名
云端 实体私钥 云端服务器 绝密,自己藏好 用于证明自己是自己(TLS握手时签名)
云端 数字证书 (内含云端公钥) 云端服务器(发给设备) 完全公开 通过CA担保,把自己的公钥安全地交给设备

2. 混合加密(数字信封)------ "真实世界的加密方案"

  • 已知的:RSA/ECDSA 加解密太慢,不适合加密大固件;AES 很快,但密钥没法安全地告诉对方。

  • 新概念混合加密完美结合两者。流程如下:

    1. 发送方随机生成一个临时的 AES 对称密钥(会话密钥)。

    2. AES 快速加密那 100MB 的大固件(得到密文)。

    3. 用接收方的 RSA/ECDSA 公钥 去加密那个小小的 AES 密钥(得到加密后的密钥)。

    4. 密文 + 加密后的密钥 一起发给对方。

  • 关系 :接收方先用私钥 解开 AES 密钥,再用 AES 密钥解密密文。这就是 TLS/SSL 握手的核心原理,兼顾了速度密钥安全

3. HMAC(哈希消息认证码)------ "带钥匙的哈希"

  • 已知的:普通哈希(SHA-256)没有密钥,任何人都能算,只能防偶然错误,防不了人为篡改。

  • 新概念HMAC 是"哈希 + 对称密钥"的结合体。通信双方预先共享一个密钥,计算哈希时把密钥混入数据中。

  • 关系与作用 :它比非对称签名(RSA/ECDSA)快得多、功耗低得多 。在局域网内部设备间通信,用 HMAC 做校验和身份确认,效率远超签名验签。它保证:只有知道密钥的人,才能生成合法的校验码

4. 密钥派生函数(KDF)与 盐(Salt)------ "密码的保护伞"

  • 已知的:用户输入的密码(如"123456")太简单,直接哈希存下来,很容易被彩虹表暴力破解。

  • 新概念 是一段随机数据,拼在密码后面一起哈希。KDF(如 PBKDF2、Scrypt) 是故意算得很"慢"的哈希算法。

  • 关系与作用 :设备本地存储登录密码时,流程是 最终密钥 = KDF(用户密码 + 随机盐)。加"盐"让同样的密码产生不同的哈希值,防预计算破解;算得"慢"让暴力破解的代价极高。这是设备本地身份认证的基石。

5. 真随机数生成器(TRNG)与 熵------ "一切安全的种子"

  • 已知的:所有算法(AES、RSA、ECDSA)都需要密钥,而密钥需要"随机"生成。

  • 新概念TRNG 是硬件从物理噪声(热噪声、量子效应)中提取的真随机数。是随机性的"纯度"指标。

  • 关系与作用 :如果设备没有足够的熵,生成的 RSA 私钥可能会被预测,导致整个安全体系崩塌。 加密模块在初始化时,必须调用硬件 TRNG 驱动(如 ``/dev/hwrng)来收集熵,以确保 RAND_bytes 生成的密钥是安全的。

6. 防重放(Nonce / 时间戳)------ "旧指令的重放攻击"

  • 已知的:验签通过只能证明签名是合法的,但证明不了这条指令是不是"现在"发的。

  • 新概念Nonce(一次随机数)时间戳 是加到待签名数据里的一个"活体检测"字段。

  • 关系 :签名时,对 (指令内容 + 当前时间戳) 一起签名。验签时,设备不仅验签名,还检查时间戳是否在允许的误差范围内(如 ±5秒)。只要验签通过且时间戳新鲜,才能保证这不是黑客截获并重放的 3 天前的旧指令。


总结:

层级 核心概念 项目中的落地场景
底层基础 哈希、对称/非对称加密、TRNG crypto 模块的工厂实现(OpenSSL底层调用)
中间协议 数字证书(X.509)、HMAC network TLS 握手(验证服务器证书)、ipc 快速鉴权
上层业务 混合加密、KDF/盐、Nonce防重放 固件安全升级(大文件加密)、设备本地用户登录校验、云指令抗重放

一句话关系概括TRNG 生出 密钥KDF/盐 保护本地密码;证书 验证公钥主人;混合加密 解决传输速度与安全;HMAC 高效替代签名;Nonce 防止旧指令作废。

往期文章推荐:

网路基础-路由表

储能系统-系统架构

Modbus协议及常用工具

单片机-Cortex-M3(1) 汇编基础知识

IEC61850实现方案和测试-1

101、104协议调试工具

版本管理工具-Git or SVN

相关推荐
xixiaoyunya2 小时前
存储备份系统选型指南:从企业级到轻量级方案的技术分析
网络
Java小白笔记2 小时前
FlClash TUN 栈模式选择与验证指南
网络·网络协议
清水白石0082 小时前
ThreadPoolExecutor 线程越多越快?从 30ms HTTP 调用讲透并发数、连接池与背压
网络·网络协议·http
IT小白杨2 小时前
eBay多账号如何应对关联判定:主体、收款、IP、环境四层配置清单一次讲清
java·网络·网络协议·tcp/ip·自动化·指纹浏览器
あ-3 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台
运维·网络·devops
数据知道3 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法
sbjdhjd3 小时前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
新时代牛马3 小时前
Linux 网络配置:iproute2、DNS 与连通性排障
linux·服务器·网络
新时代牛马4 小时前
Linux systemd 服务管理:从unit 文件到systemctl 启停与排障
linux·服务器·网络