4. 数字签名基础:对称加密与非对称加密、公钥与私钥、数字签名的作用

聊到升级包安全,绕不开数字签名。我见过不少团队,把签名当成「加个密」来理解,结果出了大问题。其实数字签名不是加密,它解决的是三个核心问题:防篡改、防伪造、抗抵赖。

要搞懂签名,得先搞清楚两种加密方式。咱们一步步来。

4.1 对称加密 vs 非对称加密

加密这事儿,说白了就是给数据上锁。锁和钥匙怎么配,决定了加密体系的复杂度。

4.1.1 对称加密

加密和解密用同一把钥匙。就像你家的门锁,用钥匙锁门,也用同一把钥匙开门。

核心特征: 速度快、效率高,适合大量数据加密。

常见的对称加密算法:

算法 密钥长度 特点
AES 128/192/256 bit 目前最主流,安全高效
DES 56 bit 已过时,容易被暴力破解
3DES 112/168 bit DES的加强版,但速度慢
SM4 128 bit 国密标准,国内常用

对称加密有个致命问题——密钥分发。你想想看,如果我要把加密后的升级包发给你,我得先把密钥告诉你。但密钥怎么安全地传过去?这就成了死循环。

我曾经踩过的坑: 早期做嵌入式设备升级,直接用对称加密保护固件。密钥硬编码在代码里。结果有人反编译拿到了密钥,伪造了升级包。那次教训让我明白——对称加密解决不了信任问题。

4.1.2 非对称加密

非对称加密就不一样了。它有两把钥匙:公钥和私钥。

  • 公钥:公开的,谁都可以拿。
  • 私钥:自己藏好,绝不外传。

这两把钥匙的关系是:公钥加密,私钥解密。或者反过来,私钥签名,公钥验签。

常见的非对称加密算法:

算法 密钥长度 用途
RSA 2048/4096 bit 加密、签名
ECC 256 bit 签名(比RSA更高效)
SM2 256 bit 国密标准,替代RSA
DSA 1024/2048 bit 仅用于签名
我的个人习惯: 升级包签名用 ECC 或 SM2,效率高、签名短。加密传输用 RSA 或 SM2 配合对称密钥(混合加密)。别拿非对称加密去加密大文件,太慢了。

4.2 公钥与私钥:谁该持有谁?

很多新手搞混公钥和私钥的用途。我画个图你就明白了。

公钥与私钥的典型使用场景 发送方(服务器) 持有:私钥 接收方(设备) 持有:公钥 私钥签名 → 发送升级包 ← 公钥验签,确认合法性 关键原则 1. 私钥永远不离开签名方(服务器) 2. 公钥可以公开分发,但必须保证来源可信 3. 私钥签名 → 公钥验签,这是数字签名的核心流程 4. 公钥加密 → 私钥解密,这是加密传输的流程(与签名相反)

说白了,私钥是身份的证明。谁持有私钥,谁就能代表这个身份签名。公钥是验证工具,谁都能拿它来检查签名是不是真的。

4.3 数字签名的作用

数字签名不是加密数据,而是给数据贴一个「防伪标签」。它解决三个问题:

4.3.1 防篡改

升级包在传输过程中,如果有人改了内容,签名验证就会失败。为什么?

因为签名是对原始数据的哈希值做的。数据一变,哈希值就变,签名自然对不上。

一句话总结: 签名 = 私钥加密(哈希(原始数据))

4.3.2 防伪造

没有私钥的人,无法生成合法的签名。攻击者就算拿到了你的升级包,也伪造不出一个能通过公钥验证的签名。

我遇到过有人问:「那我直接把签名复制粘贴到伪造的包上不行吗?」

不行。因为签名是针对原始数据的哈希值做的。你改了数据,哈希值就变了,原来的签名就失效了。

4.3.3 抗抵赖

私钥只有签名方持有。只要签名能通过公钥验证,就证明这个包一定是私钥持有者签的。签名方无法抵赖说「这不是我签的」。

这在法律上叫不可否认性。企业级升级系统里,这个特性特别重要——出了问题能追责。

4.4 数字签名的完整流程

咱们把整个流程串起来看看:

  1. 签名方(服务器):
    • 计算升级包的哈希值(比如 SHA-256)
    • 用私钥对哈希值加密,生成签名
    • 把升级包 + 签名一起发给设备
  2. 验证方(设备):
    • 收到升级包和签名
    • 用同样的哈希算法计算升级包的哈希值
    • 用公钥解密签名,得到原始哈希值
    • 对比两个哈希值:一致则通过,不一致则拒绝
数字签名完整流程 签名方(服务器) 原始升级包 SHA-256 哈希 私钥加密 → 签名 验证方(设备) 收到的升级包 SHA-256 哈希 公钥解密 → 原始哈希 升级包 + 签名 对比两个哈希值
避坑指南: 我曾经见过有人直接用 RSA 加密整个升级包当签名。这是错的!签名是对哈希值操作,不是对原始数据。直接加密大文件,性能差不说,还容易踩到 RSA 填充方式的坑。

4.5 实际项目中的选择建议

说了这么多,到底怎么选?我列个表给你参考:

场景 推荐方案 理由
升级包签名 ECC (P-256) 或 SM2 签名短、验证快,适合嵌入式设备
升级包加密传输 混合加密:ECC/RSA + AES 非对称加密密钥,对称加密数据
国密合规 SM2 + SM3 + SM4 国内政企项目强制要求
兼容性优先 RSA-2048 + SHA-256 几乎所有平台都支持
重要提醒: 别用 MD5 做签名哈希,它已经被攻破了。也别用 SHA-1,虽然还没完全破解,但安全专家已经不建议用了。最低标准是 SHA-256。

嗯,数字签名的基础就这些。搞懂了这些,后面咱们聊升级包制作时,你就能理解为什么签名是安全体系里最关键的一环了。