嵌入式系統產品的加密和解密永遠是一對矛盾的結合體。為了保護產品研發人員的技術成果,研究新型加密技術是非常有必要的。這次我們來聊聊使用芯片UID加密的方案。
首先需要明確的是,沒有一種加密是“絕對”可靠的,但是加密手段可以增加非法使用者的解密成本,借此來防止技術被“輕易”盜取。本次以LPC1000的UID加密方案為例進行介紹。
LPC1000系列的加密方案
通過分析得出,基于CortexM0或CortexM3內核的LPC1000系列MCU通過軟件加密的方法有兩種:
1、使用代碼讀保護機制,限制用戶訪問片內Flash;
2、通過芯片UID并添加加密算法使每片MCU內的程序具有唯一性。
代碼讀保護機制是通過使能系統中的不同安全級別,以便限制訪問片內Flash,本次不做重點介紹。
UID加密
UID是唯一標識符(unique identifier),在LPC1000系列微控制器的每一顆芯片都具有全球唯一的標識符,該標識符為128位二進制序列。因此我們可以利用芯片UID的唯一性對程序進行加密,使每一個產品中的程序也具有唯一性,即使非法使用者獲取了MCU中的程序復制到其他芯片中也是不能正常運行的,從而達到保護開發者的知識產權不被侵犯和盜用的目的。
LPC1000的UID加密方案
基本思路是使用上位機軟件通過編程器讀取芯片的UID,經加密算法運算后生成密鑰,下載程序的同時向MCU的Flash中某個地址寫入密鑰;MCU上電后,首先讀取芯片的UID,再通過與上位機相同的加密算法運算后計算出密鑰,并與之前寫入Flash中的密鑰比較,若相同則繼續執行用戶程序,否則跳入死循環或執行程序開發者指定的代碼。
圖1 LPC1000 UID加密方案流程圖
實現此方案需要準備的資源如下:
1、硬件資源:
-
LPC1766FBD100芯片;
-
SmartPRO 5000U-PLUS編程器;
-
QFP100-NXP適配座;
-
SmartCortex M3-1700開發板(測試用,非必需)。
2、軟件資源:
-
SmartPRO 2008 2.0.56.exe上位機軟件;
-
Programmer.rar編程器上位機UID加密補丁;
-
Uid.rar編程器上位機UID加密算法;
-
LPC1766在Keil4下的工程模板;
-
Keil4開發環境;
-
Microsoft Visual C++ 6.0。
一、下位機
下位機(即LPC1766芯片)上電并初始化后,首先讀取芯片的UID,解析密鑰并與Flash中的密鑰比較判斷后,再繼續執行用戶代碼。這里我們舉例采用的加密算法是將UID的補碼作為密鑰,加密方法比較簡單,用戶可自行對加密算法進行修改,寫出復雜的加密算法。
讀取芯片UID的方法是通過調用芯片內部的IAP函數實現,如下圖所示。
圖2 讀取UID
二、上位機
在下位機LPC1766的程序編寫完成并生成hex或bin文件后,按照以下步驟對MCU進行加密:
1、在Microsoft Visual C++ 6.0下編寫加密算法,這里我們已經編寫完成,僅需解壓uid.rar并打開其中的VC工程。用戶需要在uid.cpp中的UidAlgorithm函數中添加自定義算法,如下圖所示。
圖3 加密算法工程
加密算法編寫完成后,編譯將生成一個名為uid.dll的算法文件。
2、安裝SmartPRO 2008軟件,我們默認安裝在C:Program Files路徑下;
3、安裝SmartPRO 2800加密補丁,方法是將Programmer.rar解壓到C:Programd FilesSmartPRO 2008Programmer路徑下,覆蓋原來的文件;
4、將加密算法生成的uid.dll文件復制到C:Programd FilesSmartPRO 2008Programmer下,SmartPRO 2008啟動后將會自動調用uid.dll;
5、連接硬件,將LPC1766芯片放入適配座ZY503D中,連接USB通信電纜和電源;
6、燒寫文件,啟動SmartPRO 2008軟件,選擇芯片“LPC1766@LQFP100”,打開燒錄文件(在Keil編寫下位機程序時生成的hex或bin文件 )。此時會出現一個如圖4的特殊提示,這是因為Keil編譯器在編譯時沒有將Flash中前8個字單元的內容進行代碼有效校驗和的填充而產生該警告,點擊“確定”即可,編譯器在下載過程中會調用校驗算法自動添加校驗。關于代碼有效校驗和填充的相關內容請參考LPC1766用戶手冊中“Flash編程”一章的相關內容。
圖4 用戶代碼無效提示
7、開始下載,點擊“組合”即可,默認執行的是擦除、編程、校驗三個步驟的結合。
成功編程后,如果重新讀取Flash,打開緩沖區,定位到0x00002000處,可以看到已經寫入的密鑰。如圖5所示,與此前設計的加密算法和加密預期效果一致。
圖5 緩沖區查看密鑰
驗證方法:取下適配座中的芯片,焊接到TinyARMT17核心板上,查到SmartCortex M3-1700開發板底板上,連接P0.11到BEEP插針,如下圖所示。開發板上電后即可聽到蜂鳴器的鳴叫。以此驗證芯片計算出的密鑰與Flash中寫入的密鑰校驗一致,芯片程序正常運行。
圖6 開發板驗證
總結
經此方法向芯片下載程序后,若有產品盜版者試圖將程序讀出然后復制到其他芯片上使用,程序將停留在判斷密鑰是否匹配語句,導致程序不再向下執行,從而防止軟件程序被非法使用者盜用。ZLG致遠電子在加密保護方面從未停止過腳步,為用戶保駕護航不遺余力!
-
LPC
+關注
關注
8文章
136瀏覽量
77660
原文標題:【秘籍】更安全的UID加密方案!
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論