引言
廠商利用單片機(jī)進(jìn)行產(chǎn)品開(kāi)發(fā)時(shí),都會(huì)關(guān)心其代碼和數(shù)據(jù)的保密性。考慮到用戶在編寫和調(diào)試代碼時(shí)所付出的時(shí)間和精力,代碼的成本是不言而喻的。
早期的單片機(jī),代碼是交給芯片制造商制成掩膜ROM。有兩種加密的機(jī)制,一是徹底破壞讀取代碼的功能,無(wú)論是開(kāi)發(fā)者還是使用者都永遠(yuǎn)無(wú)法讀取其中的內(nèi)容。從安全上來(lái)說(shuō),這種方式很徹底,但是已經(jīng)無(wú)法檢查ROM中的代碼了。另一種方法是不公開(kāi)讀取方法,廠商仍可以讀取代碼。這種方式留有檢查代碼的可能性,但是并不能算是一種真正的“加密”,被破解的可能性是存在的。
客觀地講,一方面希望加密很徹底,而另外一方面又希望留有檢查代碼的可能,這是相互矛盾的要求。
自Flash技術(shù)得到廣泛應(yīng)用以來(lái),各類單片機(jī)制造商紛紛采用了多種不同的芯片加密方法,對(duì)比掩膜ROM芯片來(lái)說(shuō),F(xiàn)lash ROM在線可編程特性使得芯片的加密和解密方式變得更加靈活和可靠。在Flash型單片機(jī)中,芯片的加密和解密工作都是通過(guò)對(duì)Flash ROM的編程來(lái)完成的,由于用戶程序可以在線地改寫ROM的內(nèi)容,可以編寫一套加密和解密的小程序,隨用戶程序下載到芯片中,通過(guò)運(yùn)行該程序,在線修改Flash ROM的內(nèi)容,對(duì)芯片進(jìn)行加密和解密,使整個(gè)的加解密過(guò)程更為簡(jiǎn)單靈活。
Freescale公司的HCS12單片機(jī)采用的加解密思路有一定的典型性,我們對(duì)此作了一些研究,現(xiàn)以MC9S12DP256單片機(jī)為例,介紹Flash型單片機(jī)的加密解密方法。
BDM程序調(diào)試接口
Freescale公司的很多單片機(jī)都借用一種被稱為后臺(tái)調(diào)試模式(Background Debug Mode,BDM)作為下載和調(diào)試程序的接口。
BDM是一種單線調(diào)試模式,芯片通過(guò)一個(gè)引腳與編程器進(jìn)行通信。在HCS12系列單片機(jī)中,內(nèi)部都置有標(biāo)準(zhǔn)的BDM調(diào)試模塊。
該模塊的有三種作用:
1) 對(duì)內(nèi)部存儲(chǔ)器的讀寫。將用戶程序下載到目標(biāo)芯片中或是將存儲(chǔ)器中的數(shù)據(jù)讀出。
2) 對(duì)單片機(jī)工作方式和資源進(jìn)行配置。部分涉及到單片機(jī)工作方式和資源配置的寄存器只能在特殊模式下由編程器發(fā)送BDM命令來(lái)修改。
3) 程序調(diào)試。利用BDM模塊可以讀寫內(nèi)存和CPU內(nèi)部寄存器,調(diào)試程序。
在HCS12單片機(jī)未加密的狀態(tài)下,使用BDM硬件命令可以將Flash ROM中的程序讀出或?qū)⑿碌某绦驅(qū)懭搿DM命令可以由獨(dú)立的硬件系統(tǒng)來(lái)送出,我們一般稱此類系統(tǒng)為BDM編程器。
BDM編程器的時(shí)序協(xié)議是公開(kāi)的,任何人都可以根據(jù)協(xié)議設(shè)計(jì)硬件、編寫程序,實(shí)現(xiàn)BDM編程器的功能。使用BDM接口,編程器可以很容易的訪問(wèn)到目標(biāo)系統(tǒng)的存儲(chǔ)器,這給程序調(diào)試和燒寫帶來(lái)了很大的方便,然而,便利的對(duì)外接口也給盜用者留下了可乘之機(jī)。
在帶有BDM模塊的單片機(jī)中引入數(shù)據(jù)保密機(jī)制并非HCS12系列的首創(chuàng),先前的HC12系列單片機(jī)的D家族中,就已經(jīng)引入了屏蔽Lockout BDM讀寫的機(jī)制,可惜,該機(jī)制在單片機(jī)的擴(kuò)展工作模式下存在著漏洞。相比之下,HCS12系列單片機(jī)中的保密機(jī)制更加完善,無(wú)論在BDM模式下或是擴(kuò)展模式下,都可以屏蔽外部對(duì)Flash ROM的讀寫。
兩種加密解密方法
在HCS12系列單片機(jī)中,加密可以分成兩種方法:完全加密和使用密碼的加密。這兩種加密的方法根據(jù)用戶的需求,使用的場(chǎng)合也有所不同。
·完全加密
所謂完全加密,就是將芯片徹底的保護(hù)起來(lái),屏蔽對(duì)芯片的所有讀操作。在MC9S12DP256單片機(jī)中,加密是通過(guò)對(duì)某一Flash單元($FF0F)編程來(lái)實(shí)現(xiàn)的。加密后的芯片,BDM編程器對(duì)Flash的讀操作就被禁止了。
采用完全加密,讀取ROM代碼的可能性就不存在了,這是一種最為“安全”的加密方法。如果用戶想修改ROM的內(nèi)容,唯一的辦法就是將Flash的內(nèi)容全部擦除,這一操作可以通過(guò)BDM編程器來(lái)完成。
使用BDM編程器擦除Flash ROM和EEPROM的過(guò)程與在普通模式下對(duì)片內(nèi)的Flash ROM擦除操作過(guò)程基本一樣,區(qū)別是對(duì)寄存器或是存儲(chǔ)單元的讀寫要改由BDM命令來(lái)實(shí)現(xiàn)。通過(guò)BDM編程器將一連串完整的擦除指令序列送給單片機(jī),就可將Flash ROM和EEPROM的內(nèi)容全部擦除了。
在全擦除操作完成后,BDM編程器將系統(tǒng)復(fù)位,系統(tǒng)會(huì)自動(dòng)檢查全擦除操作是否成功。如果成功,BDM狀態(tài)寄存器的UNSEC位會(huì)自動(dòng)置“1”,系統(tǒng)進(jìn)入解密狀態(tài)。
由于系統(tǒng)靠檢查Flash ROM和EEPROM是否清空來(lái)決定系統(tǒng)是否保持加密狀態(tài),所以,如果用戶程序偶然將Flash ROM和EEPROM的內(nèi)容全部擦除,那么系統(tǒng)也將自動(dòng)解密。
·使用密碼的加密
為了留有讀取ROM代碼的可能,用戶可以采用一種帶有密碼的加密方式。解密時(shí),用戶只要給出正確的密碼(稱為“后門密碼”),就可以讀寫ROM,而不破壞其內(nèi)容了。
使用這種方法,用戶需要在加密之前,設(shè)定4個(gè)字長(zhǎng)的密碼,并將其存放在Flash中,MC9S12DP256存放密碼的Flash地址是從$FF00到$FF07。設(shè)定的密碼可以隨用戶程序一起下載到芯片中。
解密時(shí),接受用戶輸入的密碼并驗(yàn)證的工作只能由一個(gè)用戶接口程序來(lái)完成的,不能使用BDM編程器。接口的方式?jīng)]有限制,如SCI、SPI、IIC、MSCAN等等,只要用戶能夠?qū)⒄_的密碼輸入,任何一種接口方式都是可以的,最為典型的接口是串口。
假設(shè)接收的密碼存在變量KEY0-KEY7中,驗(yàn)證密碼的程序如下:
;******************
;* TEST KEYS
;******************
TESTKEYS
BSET FCNFG,$20 ;置KEYACC為1
LDD KEY0
STD $FF00
LDD KEY2
STD $FF02
LDD KEY4
STD $FF04
LDD KEY6
STD $FF06 ;驗(yàn)證KEY0-KEY7
BCLR FCNFG,$20 ;清KEYACC為0
LDAA FSEC
ANDA #$03
CMPA #$02
BNE FAIL ; 是否驗(yàn)證成功?
SUCCESS ; 密碼驗(yàn)證成功
LDAA FSTAT ; 清除Flash狀態(tài)寄存器
ORAA #%00110000
STAA FSTAT
LDAA #0
STAA FCNFG
BRCLR FSTAT,$80,*
LDD #$FFFE
STD $FF0E ; 改寫加密狀態(tài),復(fù)位后系統(tǒng)不再加密
LDAA #$20
STAA FCMD
BSET FSTAT,#$80 ; 開(kāi)始執(zhí)行
BRCLR FSTAT,$40,*
RTS ; 返回
FAIL RTS
程序返回后,如果用戶輸入的密碼和原值符合,系統(tǒng)將會(huì)把保密寄存器FSEC的最后兩
位SEC[1:0]改寫到未加密的狀態(tài),系統(tǒng)自動(dòng)解密。如果驗(yàn)證沒(méi)有通過(guò),系統(tǒng)將保持加密狀態(tài)。
需要注意,不管使用哪種方式將系統(tǒng)解密,解密后的系統(tǒng)雖然可以暫時(shí)讀取Flash,但是由于單元$FF0F中的最后兩位仍處于加密狀態(tài)(全擦除后,“11”的組合仍為加密狀態(tài)),系統(tǒng)在下次復(fù)位后,仍會(huì)回到加密的狀態(tài),所以為了徹底解密系統(tǒng),必須改寫這兩位為“10”。
整個(gè)程序的流程如圖1所示。
圖1 解密用戶接口程序流程圖
靈活使用帶密碼的加密解密方法
通過(guò)研究我們發(fā)現(xiàn),使用帶有密碼的加密方式,看似給破解代碼留有了可能性,但因?yàn)榻邮芎万?yàn)證密碼都需要由用戶程序完成,只要用戶程序設(shè)計(jì)的可靠,這種可能性是很小的。
為了增強(qiáng)用戶接口程序的可靠性和靈活性,我們提出以下幾種可能的設(shè)計(jì)思路:
針對(duì)窮舉密碼的對(duì)策。MC9S12DP256的密碼長(zhǎng)達(dá)8個(gè)字節(jié),如果不將密碼限定在ASCII碼的范圍內(nèi),那么可以選擇的密碼數(shù)量將達(dá)到1.8*1019 種。為了防患破解者窮舉密碼,用戶可以設(shè)定允許輸入錯(cuò)誤密碼的次數(shù),如果出錯(cuò)超過(guò)一定次數(shù),接口程序就不再接收新的密碼了。允許出錯(cuò)的次數(shù)可以根據(jù)安全需要和使用方便綜合考慮。
靈活的對(duì)外接口。使用密碼加解密時(shí),用戶程序使用的對(duì)外接口是沒(méi)有任何限制的。本文中的串口程序只是一例,MC9S12DP256片內(nèi)集成了眾多的接口模塊,如SCI、SPI、IIC、MSCAN、J1850等等。使用哪一個(gè)接口,用戶可以根據(jù)方便和安全考慮自己選擇,這樣也會(huì)使破解者難以入手。
用戶程序級(jí)密碼驗(yàn)證。用戶還可以給接口程序增設(shè)一級(jí)密碼驗(yàn)證的步驟。只有通過(guò)該密碼驗(yàn)證,才能進(jìn)一步輸入解密的密碼。因?yàn)榧用芎螅現(xiàn)lash ROM就無(wú)法讀寫了,用戶程序可以將增設(shè)的密碼也保存到Flash中,留待驗(yàn)證。另外,如果某一個(gè)模塊既要作為接受密碼的接口,又有其他的用途,也應(yīng)該留有一個(gè)交互界面,在使用前讓用戶選擇該模塊的用途。
遠(yuǎn)程加解密。在很多場(chǎng)合,用戶對(duì)于單片機(jī)的控制是通過(guò)以太網(wǎng)等介質(zhì)遠(yuǎn)程實(shí)現(xiàn)的,只要有相應(yīng)的接口程序,能夠遠(yuǎn)程對(duì)單片機(jī)進(jìn)行加解密,這無(wú)疑會(huì)給用戶的工作帶來(lái)很大的方便。
結(jié)語(yǔ)
Flash在線編程技術(shù)的出現(xiàn)給單片機(jī)中的加密機(jī)制帶來(lái)了很大的改變。通過(guò)對(duì)HCS12系列單片機(jī)加解密方法的分析,我們認(rèn)為這種加解密的機(jī)制具有足夠的安全性,以及靈活的加解密方式。
另外,使用密碼解密的可靠性很高,實(shí)現(xiàn)的過(guò)程依賴于用戶程序,只要精心設(shè)計(jì)接口程序,用戶完全可以將這種風(fēng)險(xiǎn)降至最低。
- FLAS(13187)
相關(guān)推薦
單片機(jī)加密方法 相關(guān)資料分享
單片機(jī)加密問(wèn)題
單片機(jī)解密,芯片解密是否存在風(fēng)險(xiǎn)?
單片機(jī)解密GD32F105/107芯片解密技巧
單片機(jī)解密IC芯片破解用紫外光有問(wèn)題會(huì)出現(xiàn)呢?
單片機(jī)解密技術(shù)大攻略
單片機(jī)解密方法知多少,如何做好加密防護(hù)應(yīng)對(duì)?
單片機(jī)解密是什么?如何去防止單片機(jī)被解密?
單片機(jī)解密的“攻”與“防”
單片機(jī)解密的程序能修改嗎?
單片機(jī)電子密碼鎖設(shè)計(jì)+解密大全
單片機(jī)系統(tǒng)加密中的動(dòng)態(tài)反跟蹤措施
單片機(jī)芯片解密GD32F103C8T6解密方法
AT89C系列單片機(jī)加解密原理
ATMEGA169PA單片機(jī)解密|芯片解密|IC解密
AVR單片機(jī)解密后的熔絲配置?
HD64F2141芯片日立HITACHI系列IC解密
MA802系列單片機(jī)特性
MB95F104AJSPFM系列單片機(jī)解密
PIC單片機(jī)解密及MCU解密常見(jiàn)問(wèn)題探討
TEA加密解密分享!
XP停課 單片機(jī)解密創(chuàng)新站崗
[原創(chuàng)]單片機(jī)解密知多少?
[原創(chuàng)]專業(yè)單片機(jī)解密
【單片機(jī)解密技術(shù)】電子產(chǎn)品的設(shè)計(jì)工程師必讀
專業(yè)單片機(jī)解密
什么是單片機(jī)解密
什么是單片機(jī)解密
什么是單片機(jī)解密?單片機(jī)解密方法有哪幾種?
華凱電子單片機(jī)解密
基于stm32f030單片機(jī)的AES128bit加解密算法例程
如何保證芯片解密成功并不損壞母片
如何對(duì)單片機(jī)進(jìn)行加密
對(duì)單片機(jī)程序進(jìn)行加密的方法有哪些呢
常見(jiàn)的單片機(jī)芯片解密有哪些方法?
怎樣解密(芯片解密IC解密)加密狗
怎樣才能預(yù)防芯片解密?
推薦性價(jià)比高的8位flash型單片機(jī)
數(shù)據(jù)加密與單片機(jī)
求一種STM32 應(yīng)用程序加密設(shè)計(jì)方案
求助單片機(jī)解密 OKI單片機(jī)解密
目前單片機(jī)解密常用的幾種技術(shù)
芯片加密與解密技術(shù)原理
芯片的解密技術(shù)
詳細(xì)介紹Flash型單片機(jī)的加密解密方法
GF90F0320單片機(jī)ADC型Flash芯片
HT66F302 SOP8 合泰HOLTEK 1.8V~5.5V 1K A/D 型 Flash 單片機(jī)
HT66F002 SOP8 合泰HOLTEK 內(nèi)置 EEPROM 經(jīng)濟(jì) A/D 型 Flash 單片機(jī)
8位FLASH單片機(jī)HR7P169BFGSD
8位FLASH單片機(jī)HR7P169BFGSF
轉(zhuǎn)讓單片機(jī)解密技術(shù)資料

HT48R50A-1單片機(jī)解密

AT89C51單片機(jī)的解密原理

單片機(jī)芯片解密詳解_單片機(jī)解密方法

單片機(jī)的加密和解密

單片機(jī)解密芯片破解的原理


單片機(jī)解密方法大全詳細(xì)資料免費(fèi)下載

如何破解單片機(jī)解密芯片

單片機(jī)解密有哪些常用的方法

如何在單片機(jī)上實(shí)現(xiàn)TEA加密解密算法

分享破解單片機(jī)解密芯片的方法

單片機(jī)解密失敗的具體原因分析

單片機(jī)解密原理_單片機(jī)解密方法

如何破解單片機(jī)的解密芯片

單片機(jī)解密是什么及解密方法?

STM32等單片機(jī)程序加密解密方法

簡(jiǎn)述什么單片機(jī)解密及解密過(guò)程

燒斷管腳的單片機(jī)解密

如何解密單片機(jī)內(nèi)程序?

單片機(jī)怎么加密?

英飛凌XC2000系列單片機(jī)FLASH加解密策略

如何解密單片機(jī)內(nèi)程序?

單片機(jī)解密的“攻”與“防”

什么是單片機(jī)解密?單片機(jī)解密方法

單片機(jī)固件又被人破解了?單片機(jī)被解密怎么破

單片機(jī)解密方法

什么是單片機(jī)解密?解密過(guò)程是怎么樣的?

單片機(jī)解密失敗的原因

單片機(jī)解密失敗有哪幾點(diǎn)原因呢?

單片機(jī)解密是否損壞母片?

評(píng)論