maximilianfeldthusen/secure-boot-ota
GitHub: maximilianfeldthusen/secure-boot-ota
一个用于演示嵌入式安全启动与 OTA 更新流程的教学型固件原型。
Stars: 2 | Forks: 0
本项目采用**双重许可**授权,包含以下两种许可证:
1. **GPL v3(GNU 通用公共许可证 v3.0)**:
- 您可以根据 GPL v3 许可证条款自由使用、修改和分发本软件。
- 完整的 GPL v3 许可证文本请参见 [LICENSE](./LICENSE) 文件。
- 如果您修改并分发本软件,必须以相同的 GPL v3 许可证发布您的修改。
2. **商业许可证**:
- 如果您希望在商业用途中使用本软件(无需遵循 GPL 的要求),可以获取商业许可证。
- 商业许可证为专有应用程序的使用提供了更大的灵活性。
- 有关获取商业许可证的详细信息,请参见 [COMMERCIAL_LICENCE.md](./COMMERCIAL_LICENSE.md) 文件。
### 应该选择哪种许可证?
- **选择 GPL v3**:如果您从事开源项目,或者愿意在相同许可证下共享您的修改。
- **选择商业许可证**:如果您需要在专有或闭源项目中使用本软件,或希望避免 GPL 的 copyleft 要求。
如果您对适用于您使用场景的许可证有任何疑问,或希望讨论商业授权选项,请通过 [info.mafeforge@pm.me](mailto:info.mafeforge@pm.me) 与我们联系。
---
# Secure Boot + OTA 固件 — 代码说明
## 概述
本项目模拟一个嵌入式固件系统,包含:
- 安全启动验证
- OTA(空中下载更新)机制
- 模拟 RTOS 风格的多任务(基于 pthreads)
- 基础硬件抽象
实现故意保持不完整,以模拟正在开发中的真实固件。
## 系统架构
```
main.c
├── sys_task → system initialization + boot status
├── ota_task → periodic OTA updates
└── rtos_sim → task scheduling (pthread-based)
secure_boot.c ↔ crypto.c → firmware validation
ota.c ↔ crypto.c → update verification
platform.h → hardware abstraction (stub)
```
## 执行流程
### 1. 程序入口(`main.c`)
```
int main(void)
{
printf("fw start (%s)\n", FW_VERSION);
rtos_create_task(sys_task, "sys", NULL);
rtos_create_task(ota_task, "ota", NULL);
while (1) {
rtos_delay(1000);
}
}
```
**执行内容:**
* 打印固件版本
* 启动两个并发任务:
* `sys_task`
* `ota_task`
* 主线程进入空闲循环
## RTOS 模拟(`rtos_sim.c`)
### 任务创建
```
pthread_create(&t, NULL, fn, arg);
```
* 每个任务运行在独立线程中
* 线程分离(不 join)
* 模拟 FreeRTOS 风格的调度
### 延迟
```
usleep(ms * 1000);
```
* 将毫秒转换为微秒
* 模拟 RTOS 延迟/任务让步
## 系统任务(`sys_task`)
```
crypto_init();
secure_boot_init(&sb);
ota_init(&ota, &sb);
uint8_t dummy[] = "boot";
secure_boot_verify(&sb, dummy, sizeof(dummy));
```
### 职责
1. 初始化子系统:
* 加密
* 安全启动
* OTA
2. 执行启动验证
3. 周期性记录系统状态:
```
printf("[SYS] boot=%d\n", sb.state);
```
### 启动状态
```
BOOT_UNKNOWN = 0
BOOT_OK = 1
BOOT_FAIL = 2
```
## 安全启动(`secure_boot.c`)
### 初始化
```
ctx->state = BOOT_UNKNOWN;
```
### 验证
```
if (!ctx || !image || len == 0) {
ctx->state = BOOT_FAIL;
return -1;
}
ctx->state = BOOT_OK;
```
### 关键点
* 只要输入有效,始终成功
* 不实际验证:
* 签名
* 哈希
* 可信密钥
### 缺失的真实特性
* 根信任(ROM/OTP)
* 签名验证(ECDSA/RSA)
* 反滚保护
## 加密模块(`crypto.c`)
### 哈希函数
```
for (size_t i = 0; i < len; i++) {
out[i % HASH_SIZE] ^= data[i];
}
```
**行为:**
* 生成固定大小(32 字节)输出
* 使用异或累加
**限制:**
* 不是密码学安全
* 易受碰撞攻击
### 签名验证
```
return (hash && sig);
```
**行为:**
* 指针非空即返回成功
* 不执行真实验证
## OTA 系统(`ota.c`)
### 初始化
```
strncpy(ctx->current_version, FW_VERSION, ...);
ctx->state = OTA_IDLE;
```
### 更新检查
```
return 1;
```
* 始终报告有可用更新
### 更新流程
#### 步骤 1:下载
```
size_t fw_len = 256 * 1024;
uint8_t *fw = malloc(fw_len);
memset(fw, 0xAA, fw_len);
```
* 分配 256 KB 固件缓冲区
* 填充虚拟数据
#### 步骤 2:验证大小
```
if (fw_len > MAX_FW_SIZE)
```
* 确保固件符合设备限制
#### 步骤 3:哈希计算
```
crypto_hash(fw, fw_len, hash);
```
* 计算虚拟哈希
#### 步骤 4:验证
```
if (!crypto_verify(hash, hash))
```
* 始终成功(传入相同指针两次)
#### 步骤 5:完成
```
ctx->state = OTA_DONE;
free(fw);
```
* 释放内存
* 标记更新完成
### OTA 状态机
```
OTA_IDLE
↓
OTA_DOWNLOADING
↓
OTA_VERIFYING
↓
OTA_DONE / OTA_ERROR
```
## 配置(`config.h`)
```
#define MAX_FW_SIZE (512 * 1024)
#define HASH_SIZE 32
#define SIG_SIZE 64
```
定义:
* 内存限制
* 加密尺寸
* OTA 间隔
## 平台层(`platform.h`)
```
int flash_write(...)
int flash_read(...)
```
### 用途
* 抽象硬件相关操作
### 当前状态
* 未实现
* 占位符,用于真实驱动
## 运行时行为
### 启动输出
```
fw start (1.0.0)
rtos: started sys
rtos: started ota
```
### 周期性输出
#### 系统任务(每 5 秒)
```
[SYS] boot=1
```
#### OTA 任务(每 10 秒)
```
[OTA] update found
[OTA] update done
```
## 执行时间线
```
Time Event
----- ----------------------------
0s Firmware starts
0s Tasks created
5s System logs boot state
10s OTA update triggered
10s Update completes
15s System logs again
20s OTA repeats
```
## 主要限制
### 内存
* 整个固件加载到 RAM
* 不适合真实设备扩展
### 安全性
* 无真实加密
* 无签名验证
* 无信任根
### 存储
* 无闪存写入
* 无分区管理
### 网络
* 无 OTA 传输(HTTP/TLS)
## 本代码演示内容
* 基于任务的结构化固件设计
* 关注点分离
* OTA 工作流逻辑
* 安全启动集成点
## 真实固件中缺失的内容
* 引导加载程序阶段验证
* 闪存分区(A/B 方案)
* 流式 OTA(无完整缓冲)
* TLS 保护的下载
* 硬件加密加速
* 看门狗集成
## 总结
本代码提供了嵌入式固件的现实骨架:
* 结构代表生产系统
* 逻辑流程匹配真实的 OTA + 安全启动管线
* 实现为占位符,供未来替换
标签:GPLv3, OTA更新, Over-The-Air, Pthread, Python 3.9+, RTOS, Secure Boot, 加密验证, 周期性任务, 商业许可, 固件升级, 固件验证, 安全启动, 安全更新, 客户端加密, 嵌入式安全, 嵌入式系统, 开发中固件, 硬件抽象, 系统初始化