請問是否有模型加密機制? 該如何進行?

您好:

請問目前模型是否有加密機制, 避免被複製到別的耐能平台執行推論?

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上的相容性

Sign In or Register to comment.