加密和签名
加密 vs 签名
经常有人把加密和签名搞混,其实它们解决的是完全不同的问题。
加密解决的是"别人看不了"——数据从 A 传到 B,中间被截获了也读不出内容。
签名解决的是"没被篡改过"——收到一段数据,怎么确认它真的是对方发的、中间没被改过?
简单说:加密保护机密性,签名保护完整性。
对称加密 vs 非对称加密
对称加密:加解密用同一个密钥。快,但密钥怎么安全地给对方是个问题。
非对称加密:有一对密钥,公钥随便发,私钥自己留着。公钥加密只有私钥能解,私钥签名公钥能验。慢,但不需要提前共享密钥。
实际工程里都是混合用:非对称加密交换密钥,对称加密传数据。
签名的流程
- 发送方用私钥对数据做签名
- 数据 + 签名一起发给接收方
- 接收方用发送方的公钥验证签名
- 匹配则说明数据没被改过,且确实是发送方发的
关键点:私钥绝对不能泄露,公钥分发时要防伪造(通常靠证书体系)。
在固件更新中的应用
我们的固件更新方案分两层:
- 签名:对固件包做数字签名,确保固件来源可信、未被篡改(满足法规要求)
- 加密:对 swu 文件做对称加密,防止固件被提取和逆向
- 飞控保护:使用飞控预置的签名算法做二次校验