<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          芯片UID加密方案

          作者:ZLG致遠(yuǎn)電子 時(shí)間:2017-10-26 來源:電子產(chǎn)品世界 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/201710/370606.htm

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

            一、LPC1000系列的加密方案

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

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

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

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

            二、UID加密

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

            三、LPC1000的UID加密方案

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

              

            圖1 LPC1000 UID加密方案流程圖

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

            硬件資源:

            LPC1766FBD100芯片;

            SmartPRO 5000U-PLUS編程器;

            QFP100-NXP適配座;

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

            軟件資源:

            SmartPRO 2008 2.0.56.exe上位機(jī)軟件;

            Programmer.rar編程器上位機(jī)UID加密補(bǔ)丁;

            Uid.rar編程器上位機(jī)UID加密算法;

            LPC1766在Keil4下的工程模板;

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

            Microsoft Visual C++ 6.0。

            1、下位機(jī)

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

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

              

            圖2 讀取UID

            2、上位機(jī)

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

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

              

            圖3 加密算法工程

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

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

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

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

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

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

              

            圖4 用戶代碼無效提示

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

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

              

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

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

              

            圖6 開發(fā)板驗(yàn)證

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



          關(guān)鍵詞: 芯片 UID

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();