安全基础与威胁模型:加密基础、哈希签名与OTA攻击类型

各位好,我是老周。今天咱们聊点硬核的——OTA安全的基础。说实话,我见过太多团队一上来就搞升级流程,结果被中间人攻击打得措手不及。加密、哈希、签名,这些不是理论课,是保命技能。

先看一张整体知识地图,帮你建立全局感。

OTA安全基础与威胁模型知识体系 加密基础 • 对称加密:AES-128/256 • 非对称加密:RSA/ECC • 密钥长度与安全等级 • 混合加密方案 • 密钥生命周期管理 哈希与签名 • SHA-256 / SHA-3 • 哈希碰撞与抗碰撞性 • 数字签名流程 • 签名验证与防篡改 • 固件完整性校验 OTA常见攻击 • 中间人攻击(MITM) • 重放攻击 • 固件篡改 • 降级攻击 • 侧信道攻击 威胁建模方法 STRIDE模型 | 攻击树分析 | 数据流图 | 风险评级 资产识别 → 威胁枚举 → 风险分析 → 缓解措施

对称加密与非对称加密

加密这事儿,说白了就是给固件加把锁。对称加密用同一把钥匙开锁,非对称加密用两把不同的钥匙。我刚开始做嵌入式时,总觉得对称加密简单好用,直到有一次密钥被逆向出来……嗯,从那以后我再也不敢只用对称加密了。

特性对称加密(AES)非对称加密(RSA/ECC)
密钥数量1个共享密钥公钥+私钥
计算速度快(硬件加速常见)慢(比AES慢100-1000倍)
密钥分发困难(需安全通道)容易(公钥公开)
典型用途固件加密传输签名验证、密钥交换
推荐算法AES-128-GCMECDSA P-256 / RSA-2048
实战建议:我习惯用混合方案——非对称加密传递会话密钥,对称加密加密固件本体。这样既安全又高效。你在设计OTA协议时,务必考虑密钥轮换机制,别一把钥匙用十年。

哈希函数与数字签名

哈希函数,说白了就是给固件算个指纹。SHA-256输出256位,只要固件改一个比特,哈希值就完全变了。你想想看,这多适合做完整性校验。

数字签名呢,是哈希+非对称加密的组合拳。流程是这样的:

  1. 服务端计算固件哈希值
  2. 用私钥对哈希值签名
  3. 固件+签名一起下发
  4. 设备用公钥验证签名
  5. 验证通过后,再计算固件哈希比对

核心原则:永远不要只校验哈希,一定要验证签名。哈希只能防意外损坏,签名才能防恶意篡改。我曾经见过一个团队只做了CRC校验,结果被中间人轻松替换固件……

OTA常见攻击类型

做OTA安全,你得先知道敌人长什么样。我整理了几种最常见的攻击手法,都是我在项目中真实遇到过的。

中间人攻击(MITM)

攻击者拦截设备与服务器之间的通信,假装自己是服务器。说白了就是"偷听+篡改"。我在一个车联网项目里见过,攻击者伪造升级服务器,给车辆推送了带后门的固件。

防御要点:双向TLS认证 + 证书固定(Certificate Pinning)。别只用单向认证,否则你的设备可能连上假的服务器都不知道。

重放攻击

攻击者抓取一次合法的升级包,然后反复发送给设备。你想想看,如果设备没有防重放机制,同一个固件会被反复安装,浪费带宽不说,还可能触发降级漏洞。

我建议的做法:在升级包中加入时间戳或单调递增的序列号。设备记录最后一次成功升级的序列号,拒绝所有小于等于该值的请求。

固件篡改

攻击者修改固件二进制内容,植入恶意代码。这种攻击最危险,因为篡改后的固件看起来还是"正常"的升级流程。

防御手段就是前面说的数字签名。只要签名验证通过,固件内容就不可能被篡改。嗯,这里要注意:签名算法一定要用安全的,别用MD5或SHA-1,它们已经被攻破了。

降级攻击

攻击者诱骗设备安装一个旧版本的固件,利用旧版本中已知的漏洞。我见过一个智能家居设备,攻击者把固件降级到三年前的版本,然后利用那个版本中的缓冲区溢出漏洞获取了root权限。

避坑指南:我曾经在项目中只检查了签名没检查版本号,结果被降级攻击搞得很惨。后来我加了一个版本号黑名单机制,低于某个版本的固件直接拒绝安装。你设计OTA时,一定要把版本号纳入签名范围。

威胁建模方法

威胁建模不是纸上谈兵,是帮你系统性地找出安全漏洞。我常用的方法是STRIDE模型,每个字母代表一类威胁:

威胁类型含义OTA场景举例
S - Spoofing身份伪造攻击者伪装成升级服务器
T - Tampering篡改修改固件二进制内容
R - Repudiation抵赖设备否认收到过升级包
I - Information Disclosure信息泄露固件被窃听获取
D - Denial of Service拒绝服务大量无效升级请求耗尽设备资源
E - Elevation of Privilege权限提升通过漏洞获取系统最高权限

具体怎么做?我一般分四步走:

  1. 资产识别:列出所有需要保护的东西——固件、密钥、证书、设备身份等
  2. 威胁枚举:针对每个资产,用STRIDE模型问"这个资产可能受到哪种攻击?"
  3. 风险分析:评估每个威胁的可能性和影响程度,优先处理高风险项
  4. 缓解措施:为每个威胁设计防御方案,比如加密、签名、认证等

我的经验:威胁建模不是一次性工作。每次OTA协议有变更,或者发现新的攻击手法,都要重新过一遍。我习惯在每次迭代开始前花半天做威胁建模,这比事后补漏洞省事多了。