Files
Obsidian/项目文档/犀重/通过RSA2048+SHA256安全升级.md
T
2026-11-05 14:35:04 +08:00

83 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 通过RSA2048+SHA256安全升级
## 一. 相关概念
RSA2048+SHA256 统称 `SHA256withRSA` 是 Java标准库提供的数字签名方案。本质是给升级包做"数字签名校验",防止固件被篡改、伪造、升错版本。
```
RSA2048 + SHA256 = SHA256withRSA
SHA-256:计算文件哈希值
RSA2048:公钥验证签名(2048位密钥强度)
```
---
## 二. 车机端验证流程
### 第一步:计算当前哈希值
```
固件文件(升级包) → SHA-256算法 → 当前哈希值(32字节)
```
### 第二步:加载公钥
```
PEM格式公钥 → Base64解码 → RSA公钥对象
```
### 第三步:验证签名
```
① 读取签名:ValidationFile.ini → 提取签名值
② 解密签名:签名值 + 公钥 → 解密 → 原哈希值
③ 对比验证:原哈希值 比对 当前哈希值
相同 → true(验证通过)
不同 → false(验证失败)
```
---
## 三、升级流程
![升级流程图](升级流程图.jpg)
---
## 四、升级包格式
### MCU升级包
```
update_mcu.zip
├── cortex-gdm4.bin (MCU固件)
└── ValidationFile.ini (签名文件)
```
### SOC升级包
```
update.zip (U盘中的文件名)
├── update.zip (内层mpu升级包)
└── ValidationFile.ini (签名文件)
```
### ValidationFile.ini格式
```
sign=<256字节十六进制签名>
```
---
## 五、总结
**原理**:用私钥给升级文件哈希值签名(服务端),车机端用公钥验证签名,通过哈希对比判断文件是否官方发布且未被篡改。
**流程**:解压升级包 → 计算哈希 → 读取签名 → 加载公钥 → 验证签名 → 通过则升级,失败则中止。
**安全**:RSA2048在当前技术水平下难以破解,SHA-256抗碰撞性极强,私钥只有官方持有,保证验证结果准确。
服务端用私钥对固件哈希值签名生成升级包,车机端解压后计算固件哈希并用公钥验证签名,通过对比哈希值判断固件是否官方发布且未被篡改。