robot-notes — 機器人知識筆記 GitHub ↗
本章與本頁目次

資安

robot-notes /資安/OTA 韌體簽章

OTA 更新的韌體簽章(code signing)

OTA(Over-The-Air)推更新很方便,但要怎麼確保「推來的是官方的、沒被竄改」?靠簽章驗證

先釐清:機器人的 OTA 其實分兩種——上位機軟體(Linux 上的容器 / 套件 / 應用)與下位機 MCU 韌體(.bin)。ROS2 本身沒有官方 OTA 框架(它是中介軟體);更新靠底層 OS / 容器 / bootloader 的機制。但不論哪種,核心都是同一件事:用簽章證明韌體來源與完整性。

前置:資安總覽STM32 REST+TLS(MCU 端 TLS)。


1. 第一性原理:TLS 不夠,要簽章

威脅:OTA 通道被中間人攔截、或更新伺服器被入侵 → 推一份惡意韌體下來,設備被植後門。

很多人以為「用 HTTPS 下載就安全了」——不對。TLS 保護的是「傳輸通道」不被竊聽 / 竄改,但不保證「內容來源可信」(你連到一台惡意 server,它也能跟你好好做 TLS)。要保證「這份韌體真的是官方發的、沒被動過」,得靠簽章

兩者角色不同,都要

2. 簽章 / 驗章流程

OTA 韌體簽章流程:發布方算韌體 hash、用私鑰簽 → 經 TLS 傳韌體+簽章 → 設備算 hash、用內建公鑰驗簽,通過才寫入、失敗就拒絕;TLS 保通道、簽章保內容

竄改、惡意來源、中間人換包——任一種都會讓 hash 對不上或簽章無效,驗簽失敗就不裝

3. 機器人的兩種 OTA + 成熟工具

別自己捲簽章機制,用成熟框架(都內建簽章驗證 + 失敗自動回退):

4. 關鍵要點

5. 跟 secure boot 的關係

OTA 簽章防的是「更新時裝進壞韌體」;secure boot 防的是「開機時跑到壞韌體」(即使 Flash 被人用其他途徑離線竄改)。兩者是同一條信任鏈的兩端,互補——一個守「裝什麼」,一個守「跑什麼」。

來源