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 | 仅用于签名 |
4.2 公钥与私钥:谁该持有谁?
很多新手搞混公钥和私钥的用途。我画个图你就明白了。
说白了,私钥是身份的证明。谁持有私钥,谁就能代表这个身份签名。公钥是验证工具,谁都能拿它来检查签名是不是真的。
4.3 数字签名的作用
数字签名不是加密数据,而是给数据贴一个「防伪标签」。它解决三个问题:
4.3.1 防篡改
升级包在传输过程中,如果有人改了内容,签名验证就会失败。为什么?
因为签名是对原始数据的哈希值做的。数据一变,哈希值就变,签名自然对不上。
4.3.2 防伪造
没有私钥的人,无法生成合法的签名。攻击者就算拿到了你的升级包,也伪造不出一个能通过公钥验证的签名。
我遇到过有人问:「那我直接把签名复制粘贴到伪造的包上不行吗?」
不行。因为签名是针对原始数据的哈希值做的。你改了数据,哈希值就变了,原来的签名就失效了。
4.3.3 抗抵赖
私钥只有签名方持有。只要签名能通过公钥验证,就证明这个包一定是私钥持有者签的。签名方无法抵赖说「这不是我签的」。
这在法律上叫不可否认性。企业级升级系统里,这个特性特别重要——出了问题能追责。
4.4 数字签名的完整流程
咱们把整个流程串起来看看:
- 签名方(服务器):
- 计算升级包的哈希值(比如 SHA-256)
- 用私钥对哈希值加密,生成签名
- 把升级包 + 签名一起发给设备
- 验证方(设备):
- 收到升级包和签名
- 用同样的哈希算法计算升级包的哈希值
- 用公钥解密签名,得到原始哈希值
- 对比两个哈希值:一致则通过,不一致则拒绝
4.5 实际项目中的选择建议
说了这么多,到底怎么选?我列个表给你参考:
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 升级包签名 | ECC (P-256) 或 SM2 | 签名短、验证快,适合嵌入式设备 |
| 升级包加密传输 | 混合加密:ECC/RSA + AES | 非对称加密密钥,对称加密数据 |
| 国密合规 | SM2 + SM3 + SM4 | 国内政企项目强制要求 |
| 兼容性优先 | RSA-2048 + SHA-256 | 几乎所有平台都支持 |
嗯,数字签名的基础就这些。搞懂了这些,后面咱们聊升级包制作时,你就能理解为什么签名是安全体系里最关键的一环了。