《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 芯片UID加密方案

芯片UID加密方案

2017-10-25
來源:ZLG致遠(yuǎn)電子
關(guān)鍵詞: 嵌入式 芯片 UID加密 微控制器

  嵌入式系統(tǒng)產(chǎn)品的加密和解密永遠(yuǎn)是一對矛盾的統(tǒng)一體,。為了保護產(chǎn)品研發(fā)人員的技術(shù)成果,研究新型加密技術(shù)是非常有必要的,。這里我們聊聊使用芯片UID加密的方案,。

  首先需要明確的是,,沒有一種加密是“絕對”可靠的,,但是加密手段可以增加非法使用者的解密成本,,借此來防止技術(shù)被“輕易”盜取,。本次以LPC1000的UID加密方案為例進行介紹,。

  一,、LPC1000系列的加密方案

  通過分析得出,基于CortexM0或CortexM3內(nèi)核的LPC1000系列MCU通過軟件加密的方法有兩種:

  1,、使用代碼讀保護機制,,限制用戶訪問片內(nèi)Flash;

  2,、通過芯片UID并添加加密算法使每片MCU內(nèi)的程序具有唯一性,。

  代碼讀保護機制是通過使能系統(tǒng)中的不同安全級別,以便限制訪問片內(nèi)Flash,,本次不做重點介紹,。

  二、UID加密

  UID是唯一標(biāo)識符(unique identifier),,在LPC1000系列微控制器的每一顆芯片都具有全球唯一的標(biāo)識符,,該標(biāo)識符為128位二進制序列。因此我們可以利用芯片UID的唯一性對程序進行加密,,使每一個產(chǎn)品中的程序也具有唯一性,,即使非法使用者獲取了MCU中的程序復(fù)制到其他芯片中也是不能正常運行的,從而達(dá)到保護開發(fā)者的知識產(chǎn)權(quán)不被侵犯和盜用的目的,。

  三,、LPC1000的UID加密方案

  基本思路是使用上位機軟件通過編程器讀取芯片的UID,經(jīng)加密算法運算后生成密鑰,,下載程序的同時向MCU的Flash中某個地址寫入密鑰,;MCU上電后,首先讀取芯片的UID,再通過與上位機相同的加密算法運算后計算出密鑰,,并與之前寫入Flash中的密鑰比較,,若相同則繼續(xù)執(zhí)行用戶程序,否則跳入死循環(huán)或執(zhí)行程序開發(fā)者指定的代碼,。

1.png

  圖1  LPC1000 UID加密方案流程圖

  實現(xiàn)此方案需要準(zhǔn)備的資源如下,。

  硬件資源:

  lLPC1766FBD100芯片;

  lSmartPRO 5000U-PLUS編程器,;

  lQFP100-NXP適配座,;

  lSmartCortex M3-1700開發(fā)板(測試用,非必需),。

  軟件資源:

  lSmartPRO 2008 2.0.56.exe上位機軟件;

  lProgrammer.rar編程器上位機UID加密補??;

  lUid.rar編程器上位機UID加密算法;

  lLPC1766在Keil4下的工程模板,;

  lKeil4開發(fā)環(huán)境,;

  lMicrosoft Visual C++ 6.0。

  1,、下位機

  下位機(即LPC1766芯片)上電并初始化后,,首先讀取芯片的UID,解析密鑰并與Flash中的密鑰比較判斷后,,再繼續(xù)執(zhí)行用戶代碼,。這里我們舉例采用的加密算法是將UID的補碼作為密鑰,加密方法比較簡單,,用戶可自行對加密算法進行修改,,寫出復(fù)雜的加密算法。

  讀取芯片UID的方法是通過調(diào)用芯片內(nèi)部的IAP函數(shù)實現(xiàn),,如圖所示,。

2.png

  圖2  讀取UID

  2、上位機

  在下位機LPC1766的程序編寫完成并生成hex或bin文件后,,按照以下步驟對MCU進行加密:

  首先,,在Microsoft Visual C++ 6.0下編寫加密算法,這里我們已經(jīng)編寫完成,,僅需解壓uid.rar并打開其中的VC工程,。用戶需要在uid.cpp中的UidAlgorithm函數(shù)中添加自定義算法,如圖,。

3.gif

  圖3  加密算法工程

  加密算法編寫完成后,,編譯將生成一個名為uid.dll的算法文件。

  第二步,,安裝SmartPRO 2008軟件,,我們默認(rèn)安裝在C:\Program Files路徑下,;

  第三步,安裝SmartPRO 2800加密補丁,,方法是將Programmer.rar解壓到C:\Programd Files\SmartPRO 2008\Programmer路徑下,,覆蓋原來的文件;

  第四步,,將加密算法生成的uid.dll文件復(fù)制到C:\Programd Files\SmartPRO 2008\Programmer下,,SmartPRO 2008啟動后將會自動調(diào)用uid.dll;

  第五步,,連接硬件,,將LPC1766芯片放入適配座ZY503D中,連接USB通信電纜和電源,;

  第六步,,燒寫文件,啟動SmartPRO 2008軟件,,選擇芯片“LPC1766@LQFP100”,,打開燒錄文件(在Keil編寫下位機程序時生成的hex或bin文件 )。此時會出現(xiàn)一個如圖4的特殊提示,,這是因為Keil編譯器在編譯時沒有將Flash中前8個字單元的內(nèi)容進行代碼有效校驗和的填充而產(chǎn)生該警告,,點擊“確定”即可,編譯器在下載過程中會調(diào)用校驗算法自動添加校驗,。關(guān)于代碼有效校驗和填充的相關(guān)內(nèi)容請參考LPC1766用戶手冊中“Flash編程”一章的相關(guān)內(nèi)容,。

4.gif

  圖4  用戶代碼無效提示

  第七步,開始下載,,點擊“組合”即可,,默認(rèn)執(zhí)行的是擦除、編程,、校驗三個步驟的結(jié)合,。

  成功編程后,如果重新讀取Flash,,打開緩沖區(qū),,定位到0x00002000處,可以看到已經(jīng)寫入的密鑰,。如圖5所示,,與此前設(shè)計的加密算法和加密預(yù)期效果一致。

5.gif

  圖5  緩沖區(qū)查看密鑰

  驗證方法:取下適配座中的芯片,,焊接到TinyARMT17核心板上,,查到SmartCortex M3-1700開發(fā)板底板上,連接P0.11到BEEP插針,如所示,。開發(fā)板上電后即可聽到蜂鳴器的鳴叫,。以此驗證芯片計算出的密鑰與Flash中寫入的密鑰校驗一致,芯片程序正常運行,。

6.gif

  圖6  開發(fā)板驗證

  經(jīng)此方法向芯片下載程序后,,若有產(chǎn)品盜版者試圖將程序讀出然后復(fù)制到其他芯片上使用,程序?qū)⑼A粼谂袛嗝荑€是否匹配語句,,導(dǎo)致程序不再向下執(zhí)行,,從而防止軟件程序被非法使用者盜用。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]