
我想使用一些小型電腦(例如 Raspberry-Pi)並使用 Linux 作業系統來建立一個機器人。我認為這些板(RPi、NanoPi 等)有外部 SD 卡來啟動作業系統,我的程式碼將放在那裡(在 SD 卡上)。那麼,如何保護我的程式碼免於他人複製呢?
從我的程式碼來看,我的意思是使用 CMUsphinx、Opencv 等編寫的程式。
有沒有辦法為一個指定的板指定每個SD卡?我的意思是 SD 卡 nom.1 只能在 nom.1 板上運行。
或者也許在使用演算法並且應該匹配運行的主機板和 SD 卡上放置一個隱藏代碼?
答案1
您無法防止對裝置有實體存取權的人複製您的程式碼。如果董事會可以讀取您的程式碼,那麼其他人也可以。
為了防止程式碼被複製,您需要使用具有防篡改儲存功能的裝置。此類硬體是存在的,但價格範圍較高。
您可以在程式碼中進行測試來驗證某些硬體標識符,如果在不同的硬體設備上運行,則拒絕啟動。這使得無法運行精確的直接複製,但仍然很容易更改程式碼以繞過檢查或在虛擬化環境中運行它,該環境為您的程式碼提供其所需的硬體標識。基本上,這是一種讓誠實的人保持誠實的方法,但它不會阻止任何想要複製程式碼的人。
答案2
為了保護您的數據,您必須擁有任何類型的金鑰,您可以實體地保護和控制該金鑰,並與您的秘密資料分開。你大腦中的密碼就是這種解決方案的一個例子 - 它由所有者透過記住它來物理保護。
作為密碼,您的超級機器人可能有一些視覺令牌,例如一張帶有條碼的紙,它可以解密您的軟體並允許其以這種方式運行。這可能值得考慮,因為同一張紙可能會被用來關閉你的創作,當然還有 openvc 和腳本的幫助。
不太實用但更容易實現的方法是有 2 張 SD 卡,其中一個包含金鑰,用於啟動系統,並等到您更換 sdcard 後繼續啟動。
你應該看看如何初始化檔案系統用於啟動整個系統。你應該看看如何創建自訂 initramfs,並能夠修改初始化腳本以等待和解密安裝您的第二張卡與主系統。
系統並不完美,但骯髒且廉價。
它也不一定是initramfs 解決方案,您可以使用諸如將可執行程式碼從某個USB 驅動器複製到ramdisk 之類的解決方案,您插入這些USB 驅動器只是為了啟動您的創建,並在它開始活動時將其刪除。
當你在一種媒體上擁有秘密和密鑰(是聰明的技巧,隱藏的東西等)時,它可以被逆向工程。
對我來說,initramfs 解決方案需要較少的精力來製作,有大量資訊如何製作自訂 initramfs。