背景
三階段第二段,依賴 FR-063 產物(對最終交付物算指紋)。需求:偵測到程式碼被竄改時,終結產品服務並鎖定產品不給使用。
已拍板設計方向
- Build 期:對交付物內程式檔逐檔 SHA-256 產 manifest,以原廠私鑰簽章 — 復用 FR-062 License Center 簽發體系(新 payload 種類,不另建 PKI)
- 啟動期:烤在程式內的公鑰驗 manifest 簽章 + 逐檔比對 hash;與 license 驗證共用同一 code path、同一把公鑰(拆一個等於拆兩個)
- Runtime:APScheduler 低頻抽查(隨機 N 檔 + 固定核心模組)
- 偵測到竄改 → ①tamper 紀錄雙落點(DB 專用表 + 檔案系統)②process 立即 exit ③之後每次啟動查 tamper 紀錄,有紀錄視同無有效 license 拒絕啟動;解鎖唯一路徑=原廠簽發一次性 unlock token(LC 簽章格式,payload 含 tamper 事件 ID 核銷)
- 檢查點分散多處(啟動 gate + 週期 job + 業務路徑埋點)、互相驗證,拉高拔除成本
- 離線環境成立:license 檔簽章驗證不需聯網(FR-062 既有設計);無回報線,靠 client 端機制 + 合約層
- Nuitka 產物是機器碼,原「驗證核心 Cython 編 .so」需求消失,設計可簡化
已知限制(已與決策者對齊)
client-side 完整性驗證無法對抗有決心的逆向團隊,目標是「99% 覺得不值得 + 1% 留下蓄意痕跡供合約求償」;B2B 具名法人場景法律層是真實防線。
驗收條件
- 改任一程式檔 → 啟動被拒
- 運行中改檔 → 週期抽查觸發 exit + tamper 落地
- tamper 後重啟被拒
- unlock token 導入後恢復
- 正常產物完整啟動無誤報
後續
等 FR-063 完成後,走討論稿 → design.md → 拆子卡。