乐鑫技术交流
直播中

王兰

14年用户 1738经验值
擅长:基础元器件
私信 关注
[问答]

ESP8266如何避免固件损坏?

我们需要在固件下载中采用强大的固件升级方法,我们知道在固件下载中有一个示例。
例子/at_upgrade.c

对于该示例,我们有一个问题:
如何避免损坏的bin文件?
   
因为如果恶意用户将损坏的文件放入Web服务器中,然后发送AT CIUPDATE进行升级。
然后ESP8266可能会以破碎的状态进入......我们希望仅升级我们公司发布的固件。
   
system_upgrade_start(... 或其他内部功能
会检查升级文件的一些校验和/签名吗?

ESP8266可以通过回调 API 提供,用于通过签名检查升级仓固件吗?
例如:在bin固件的末尾添加一些hash section信息。
用户可以使用他们的私钥来验证哈希数据,如果哈希值匹配,则系统可以运行新的文件映像,否则永远不会运行新的bin文件。
                                                                                                                                                              

回帖(1)

小镇故事多

2024-7-20 16:20:25
为了避免ESP8266固件损坏,您可以采取以下措施:

1. **使用安全的固件下载源**:确保从可靠的来源下载固件。这可以降低恶意用户将损坏的文件放入Web服务器的风险。

2. **固件签名验证**:在固件升级过程中,您可以实现一个签名验证机制。在您的公司发布固件时,使用私钥对固件进行签名。在设备上,您可以使用公钥对签名进行验证。这样,只有经过验证的固件才能被升级。

3. **固件校验和**:在固件升级前,您可以计算固件文件的校验和(如CRC或MD5),并与固件中提供的校验和进行比较。如果校验和匹配,说明固件未被篡改。

4. **固件升级过程中的回调API**:ESP8266提供了固件升级过程中的回调API,例如`system_upgrade_user_cb_t`。您可以使用这些回调API在固件升级过程中实现自定义逻辑,例如签名验证或校验和检查。

5. **固件升级失败的恢复机制**:在固件升级过程中,如果检测到损坏的固件或升级失败,您可以实现一个恢复机制,例如从备份中恢复原始固件。

6. **固件升级权限控制**:限制只有特定的设备或用户才能发起固件升级请求。这可以通过设置设备ID或用户认证来实现。

7. **固件版本控制**:在固件升级过程中,检查固件版本号。确保只有比当前版本更新的固件才能被升级。

8. **固件升级过程中的错误处理**:在固件升级过程中,确保处理所有可能的错误情况,例如网络中断、文件损坏等。这可以通过实现错误处理逻辑和重试机制来实现。

通过以上措施,您可以降低ESP8266固件损坏的风险,并确保只有经过验证的固件才能被升级。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分