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, 加密验证, 周期性任务, 商业许可, 固件升级, 固件验证, 安全启动, 安全更新, 客户端加密, 嵌入式安全, 嵌入式系统, 开发中固件, 硬件抽象, 系统初始化