0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LPC1000的UID加密方案

AGk5_ZLG_zhiyua ? 來(lái)源:未知 ? 作者:佚名 ? 2017-10-20 14:46 ? 次閱讀

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

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

LPC1000系列的加密方案

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

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

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

代碼讀保護(hù)機(jī)制是通過(guò)使能系統(tǒng)中的不同安全級(jí)別,以便限制訪問(wèn)片內(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ù)開(kāi)發(fā)者的知識(shí)產(chǎn)權(quán)不被侵犯和盜用的目的。

LPC1000的UID加密方案

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

圖1 LPC1000 UID加密方案流程圖

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

1、硬件資源:

  • LPC1766FBD100芯片;

  • SmartPRO 5000U-PLUS編程器;

  • QFP100-NXP適配座;

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

2、軟件資源:

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

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

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

  • LPC1766在Keil4下的工程模板;

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

  • Microsoft Visual C++ 6.0。

一、下位機(jī)

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

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

圖2 讀取UID

二、上位機(jī)

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

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

圖3 加密算法工程

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

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

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

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

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

6、燒寫(xiě)文件,啟動(dòng)SmartPRO 2008軟件,選擇芯片“LPC1766@LQFP100”,打開(kāi)燒錄文件(在Keil編寫(xiě)下位機(jī)程序時(shí)生成的hex或bin文件 )。此時(shí)會(huì)出現(xiàn)一個(gè)如圖4的特殊提示,這是因?yàn)镵eil編譯器在編譯時(shí)沒(méi)有將Flash中前8個(gè)字單元的內(nèi)容進(jìn)行代碼有效校驗(yàn)和的填充而產(chǎn)生該警告,點(diǎn)擊“確定”即可,編譯器在下載過(guò)程中會(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 用戶代碼無(wú)效提示

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

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

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

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

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

總結(jié)

經(jīng)此方法向芯片下載程序后,若有產(chǎn)品盜版者試圖將程序讀出然后復(fù)制到其他芯片上使用,程序?qū)⑼A粼谂袛嗝荑€是否匹配語(yǔ)句,導(dǎo)致程序不再向下執(zhí)行,從而防止軟件程序被非法使用者盜用。ZLG致遠(yuǎn)電子在加密保護(hù)方面從未停止過(guò)腳步,為用戶保駕護(hù)航不遺余力!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LPC
    LPC
    +關(guān)注

    關(guān)注

    8

    文章

    136

    瀏覽量

    77670

原文標(biāo)題:【秘籍】更安全的UID加密方案!

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入剖析恩智浦LPC1000處理器

    LPC1000系列講座第一講:一、LPC1000概述:  基于ARM Cortex-M3/M0的恩智浦LPC1000系列,是NXP目前最新的ARM 微控制器產(chǎn)品,其高達(dá)100MHz運(yùn)行速度、緊湊
    發(fā)表于 12-21 15:59

    MCU加密方法你知道多少?

    加密 通常所說(shuō)的MCU加密是指將用戶的程序固件保護(hù)起來(lái),防止別人通過(guò)外部調(diào)試接口或者其他方法讀取燒寫(xiě)在Flash中的程序。保護(hù)自家方案不輕易被別家抄襲,從硬件上保護(hù)自己的知識(shí)產(chǎn)權(quán)。MCU加密
    發(fā)表于 10-10 14:53

    在NuMicro?家族中支持UID,如果用戶想使用唯一的ID加密芯片怎么操作?

    在NuMicro?家族中支持UID(唯一ID)的是什么系列)? 如果用戶想使用唯一的ID加密芯片,該怎么辦?
    發(fā)表于 12-21 06:45

    uid加密算法

    uid加密算法,1.STM32可以加密程序,不然可能有被竊取的可能JTAG 可以直接通過(guò)J-LINK-FLASH獲取代碼,首先新建工程,型號(hào)選好,read back即可save data fileUID
    發(fā)表于 07-19 08:23

    STM32F103C8T6是怎樣讀取加密芯片SMEC98SP的UID號(hào)的

    加密芯片SMEC98SP有何功能?STM32F103C8T6是怎樣讀取加密芯片SMEC98SP的UID號(hào)的?
    發(fā)表于 11-01 07:21

    如何使用STM32HAL庫(kù)來(lái)讀取UID唯一碼加密?

    如何使用STM32HAL庫(kù)來(lái)讀取UID唯一碼加密?
    發(fā)表于 11-26 07:39

    【野火 fireFlasher Mini 脫機(jī)燒錄器】+ UID加密及下載次數(shù)限制

    ,下載第一次,蜂鳴器響兩聲,下載第二次同樣如此,在下載第三次時(shí)蜂鳴器響4聲,并且下載亮紅燈,并退出下載模式,如下所示 UID加密 通過(guò)對(duì) UID 使用特定算法加密,由于
    發(fā)表于 05-07 23:33

    【野火 fireFlasher Mini 脫機(jī)燒錄器】UID加密測(cè)試

    移植算法 算法在:野火【fireFlasher Mini脫機(jī)下載器】模塊資料\\\\UID加密代碼資料\\\\對(duì)應(yīng)單獨(dú)加密代碼\\\\YH_Enctyption.zip里 移植完成之后增加測(cè)試命令
    發(fā)表于 05-13 21:40

    利用LPC1100系列實(shí)現(xiàn)低功耗設(shè)計(jì)

    LPC1000系列ARM是以第二代Cortex-M3為內(nèi)核的微控制器,用于處理要求高度集成和低功耗的嵌入式應(yīng)用。采用3級(jí)流水線和哈佛結(jié)構(gòu),其運(yùn)行速度高達(dá)100MHz,帶獨(dú)立的本地指令和數(shù)據(jù)總線
    發(fā)表于 07-23 15:31 ?20次下載

    NXP低功耗LPC1000系列六大突出優(yōu)勢(shì)

    NXP低功耗LPC1000系列六大突出優(yōu)勢(shì) 基于ARM Cortex-M3/M0的恩智浦LPC1000系列,是NXP目前最新的ARM 微控制器產(chǎn)品,其高達(dá)100MHz運(yùn)行速度、緊湊的尺寸、高能效與高性能使它特別
    發(fā)表于 11-11 11:02 ?1280次閱讀
    NXP低功耗<b class='flag-5'>LPC1000</b>系列六大突出優(yōu)勢(shì)

    NXP單片機(jī)選型指南(英文版)

    consumption in the smallest packages. A comprehensive portfolio of industryleadingperformers includes the latest 32-bit LPC3000 , LPC20
    發(fā)表于 08-08 14:42 ?0次下載
    NXP單片機(jī)選型指南(英文版)

    LPC1114基礎(chǔ)手冊(cè)未加密

    LPC1114基礎(chǔ)手冊(cè)未加密, 需要學(xué)習(xí)這款單片機(jī)的看看
    發(fā)表于 11-02 10:52 ?68次下載

    基于LPC1000系列微控制器的校驗(yàn)和自動(dòng)填充實(shí)現(xiàn)方法

    基于LPC1000系列微控制器的校驗(yàn)和自動(dòng)填充實(shí)現(xiàn)方法
    發(fā)表于 10-09 10:40 ?9次下載
    基于<b class='flag-5'>LPC1000</b>系列微控制器的校驗(yàn)和自動(dòng)填充實(shí)現(xiàn)方法

    LPC546xx加密配置-ECRP詳解

    LPC546xx加密配置-ECRP詳解
    的頭像 發(fā)表于 09-27 16:24 ?1256次閱讀
    <b class='flag-5'>LPC</b>546xx<b class='flag-5'>加密</b>配置-ECRP詳解

    UID加密安全啟動(dòng)原理分析

    本文導(dǎo)讀 ZDP14x0系列芯片是內(nèi)置開(kāi)源GUI引擎的圖像顯示專用驅(qū)動(dòng)芯片,在實(shí)際產(chǎn)品開(kāi)發(fā)中需要加密保護(hù),防止應(yīng)用程序被讀取和盜用,本文將介紹如何實(shí)現(xiàn)UID加密安全啟動(dòng)。 UID
    的頭像 發(fā)表于 11-11 11:49 ?487次閱讀
    <b class='flag-5'>UID</b><b class='flag-5'>加密</b>安全啟動(dòng)原理分析