請問是否有模型加密機制? 該如何進行?
您好:
請問目前模型是否有加密機制, 避免被複製到別的耐能平台執行推論?
1.是否有api可讀取chip id 或 device id
2.nef是否支援加密佈署?
3.有無支援security boot 模式?
4.有無推薦的anti-copy flow?
5.toolchain 有無支援加密模型的merge?
謝謝
您好:
請問目前模型是否有加密機制, 避免被複製到別的耐能平台執行推論?
1.是否有api可讀取chip id 或 device id
2.nef是否支援加密佈署?
3.有無支援security boot 模式?
4.有無推薦的anti-copy flow?
5.toolchain 有無支援加密模型的merge?
謝謝
Comments
你好,
API讀取ID的部分請參考kp_scan_devices或kp_get_system_info
https://doc.kneron.com/docs/#plus_c_api/api_reference_3.1.2/kp_core.h/#kp_scan_devices
https://doc.kneron.com/docs/#plus_c_api/api_reference_3.1.2/kp_core.h/#kp_get_system_info
加密機制的部分可以參考 "Post Encrypt NEF" 的說明,將NEF模型綁定KN number,kneron_nef_utils 可以在toolchain上找到
https://doc.kneron.com/docs/#toolchain/appendix/nef_utils_guide/#6-post-encrypt-nef
security boot的部分請參考730SDK文件
/KL730_SDK_v2.0.0/01_BSP/01_Document/KL730_Security_Application_Note.pdf
合併NEF的話可以在kneron_nef_utils 上透過combine NEF指令
https://doc.kneron.com/docs/#toolchain/appendix/nef_utils_guide/#3-combine-nef
您好,
我們的 KL730 雙鏡頭 ADAS 產品即將交付系統整合商客戶。由於應用程式原始碼會
隨交付釋出,模型檔是唯一需要保護的資產,必須做到「模型只能在指定板子上載入」。
Q1【最關鍵,已自行實測,但結果有一項需要貴司確認】
SDK1.2.1 的 loader 是否強制驗證 KN 綁定?
實測結果:確實有效。用 A 板 KN 產生的加密 NEF,在 A 板可正常載入、推論
正常;同一顆檔案複製到 B 板,B 板無法用它跑起推論——裝置綁定本身是成立的。
但失敗的方式不是乾淨拒絕:B 板在處理到這顆 NEF 時整機當機(網路、telnet
全部無回應),必須重新上電才能恢復,過程中沒有看到任何拒絕的 log 或錯誤
訊息。已重現兩次,每次都是同樣的當機現象,同一時間點。
想請教:
- 這是預期行為(例如底層驗證失敗時故意讓晶片進入需重開機的保護狀態),
還是不應該發生的異常?
- 有沒有辦法讓失敗時走乾淨的錯誤路徑(印 log、回傳錯誤碼、讓應用程式
能自行處理),而不是讓整機卡死?
- 若這是已知限制,車隊在路上遇到這種情況(例如模型檔案損毀或被誤植)
時,除了整機斷電重開,有沒有更輕量的復原方式?
【追加:同一項測試在 SDK 2.0.0 板子上結果不一樣,而且更需要請教】
我們另一條產品線在 SDK 2.0.0 上,同一套 app 層防護跟同一個負向測試
(板子 KN 與 NEF 綁定的 KN 不符,ExpectedKnNumber 刻意填本板正確值讓
app 層放行、確保真的測到 loader)也做了一次,結果跟 1.2.1 完全不同:
- 不當機,板子全程存活,網路/telnet 正常。
- loader 沒有任何報錯,log 裡找不到 error/invalid/corrupt 字樣。
- NEF 外層容器(明文 FlatBuffers)正常解析:尺寸、Command.bin/
Weight.bin 長度等結構欄位,跟綁對的 NEF 完全一樣。
- 影像、ROI 疊圖都正常。
- 但完全沒有偵測框——用錯 KN 解出來的權重是亂數,推論永遠找不到
東西,過程中沒有任何跡象。
也就是說 2.0.0 的失敗模式是「開機正常、畫面正常、ROI 正常,就是永遠
不會示警」,沒有任何 log 或錯誤可以觀察到。這比 1.2.1 的當機更麻煩:
當機至少會被發現,這個不會——裝到車上會是一台看起來完全健康、卻永遠
不會偵測任何東西的 ADAS。目前唯一攔得住這個情境的,是我們自己在 app
層加的 ExpectedKnNumber 比對(原本是為了避開 1.2.1 當機才加的)。
Q2 一顆加密 NEF 能否綁定多個 KN?若可以,小批量出貨的產線會簡化很多;
若不行,我們就依「一板一模型」設計流程。
Q3 我們的 NEF 是多模型合併後的單一檔案,已確認加密要在 --combine_nef 之後
執行。想確認的是:合併檔加密後,loader 能否正常以 model id 選擇其中
個別模型(ASD/BSD)?(正負向測試都能跑起推論,但還沒個別驗證兩個
model id 各自都正確選到。)
Q4 同一支 kneron_nef_utils 是否 1.2.1 與 2.0.0 兩版通用?產出的加密 NEF
是否跨版本相容?我們另有專案在 2.0.0 上。
以上煩請回復
不吝感激之際
Albert
Hello,
針對您的問題,請參考下面說明
Q1:
SDK v1.2.1之後已經經歷了多次改版更新,還請使用最新版的SDK
在SDK v2.0.0中,若推論執行到綁定錯誤KN number的NEF模型,理論上會出現下面錯誤訊息,畫面的部分若是在不同thread下運行的話,確實有可能正常顯示,但uart log還是會有錯誤訊息
E/[VMTK_NPU] VMTK_NPU_ProcessOneFrame(): NPU process failed. (62, Timer expired)
E/[NNM_NCPU] [kmdw_ncpu_npu_proc_thread] npu_proc_ret = -1, NPU timeout, do reset NPU iNpuDev= 5, NPU_IOC_RESET_NPU
E/[NNM_NCPU] Post Proc: Error occurred on NPU Proc
[example_recv_result_thread] Error: status_code 103
E/[VMTK_NPU] VMTK_NPU_ProcessOneFrame(): NPU process failed. (62, Timer expired)
E/[NNM_NCPU] [kmdw_ncpu_npu_proc_thread] npu_proc_ret = -1, NPU timeout, do reset NPU iNpuDev= 5, NPU_IOC_RESET_NPU
Q2:
NEF與KN number的關係是一對一的,無法同時綁定多組KN number
Q3:
可以的
Q4:
所有功能僅會在最新版的SDK上維護,沒辦法保證在v1.2.1上的相容性