在HCS12系列單片機(jī)中,加密可以分成兩種方法:完全加密和使用密碼的加密。這兩種加密的方法根據(jù)用戶的需求,使用的場合也有所不同。
完全加密
所謂完全加密,就是將芯片徹底的保護(hù)起來,屏蔽對芯片的所有讀操作。在MC9S12DP256單片機(jī)中,加密是通過對某一Flash單元($FF0F)編程來實(shí)現(xiàn)的。加密后的芯片,BDM編程器對Flash的讀操作就被禁止了。
采用完全加密,讀取ROM代碼的可能性就不存在了,這是一種最為“安全”的加密方法。如果用戶
想修改ROM的內(nèi)容,唯一的辦法就是將Flash的內(nèi)容全部擦除,這一操作可以通過BDM編程器來完成。
使用BDM編程器擦除Flash ROM和EEPROM的過程與在普通模式下對片內(nèi)的Flash ROM擦除操作過程基本一樣,區(qū)別是對寄存器或是存儲單元的讀寫要改由BDM命令來實(shí)現(xiàn)。通過BDM編程器將一連串完整的擦除指令序列送給單片機(jī),就可將Flash ROM和EEPROM的內(nèi)容全部擦除了。
在全擦除操作完成后,BDM編程器將系統(tǒng)復(fù)位,系統(tǒng)會自動檢查全擦除操作是否成功。如果成功,BDM狀態(tài)寄存器的UNSEC位會自動置“1”,系統(tǒng)進(jìn)入解密狀態(tài)。
由于系統(tǒng)靠檢查Flash ROM和EEPROM是否清空來決定系統(tǒng)是否保持加密狀態(tài),所以,如果用戶程序偶然將Flash ROM和EEPROM的內(nèi)容全部擦除,那么系統(tǒng)也將自動解密。
使用密碼的加密
為了留有讀取ROM代碼的可能,用戶可以采用一種帶有密碼的加密方式。解密時(shí),用戶只要給出正確的密碼(稱為“后門密碼”),就可以讀寫ROM,而不破壞其內(nèi)容了。
使用這種方法,用戶需要在加密之前,設(shè)定4個(gè)字長的密碼,并將其存放在Flash中,MC9S12DP256存放密碼的Flash地址是從$FF00到$FF07。設(shè)定的密碼可以隨用戶程序一起下載到芯片中。
解密時(shí),接受用戶輸入的密碼并驗(yàn)證的工作只能由一個(gè)用戶接口程序來完成的,不能使用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
靈活使用帶密碼的加密解密方法
通過研究我們發(fā)現(xiàn),使用帶有密碼的加密方式,看似給破解代碼留有了可能性,但因?yàn)榻邮芎万?yàn)證密碼都需要由用戶程序完成,只要用戶程序設(shè)計(jì)的可靠,這種可能性是很小的。
為了增強(qiáng)用戶接口程序的可靠性和靈活性,我們提出以下幾種可能的設(shè)計(jì)思路:
針對窮舉密碼的對策:MC9S12DP256的密碼長達(dá)8個(gè)字節(jié),如果不將密碼限定在ASCII碼的范圍內(nèi),那么可以選擇的密碼數(shù)量將達(dá)到1.8*1019 種。為了防患破解者窮舉密碼,用戶可以設(shè)定允許輸入錯(cuò)誤密碼的次數(shù),如果出錯(cuò)超過一定次數(shù),接口程序就不再接收新的密碼了。允許出錯(cuò)的次數(shù)可以根據(jù)安全需要和使用方便綜合考慮。
靈活的對外接口:使用密碼加解密時(shí),用戶程序使用的對外接口是沒有任何限制的。本文中的串口程序只是一例,MC9S12DP256片內(nèi)集成了眾多的接口模塊,如SCI、SPI、IIC、MSCAN、J1850等等。使用哪一個(gè)接口,用戶可以根據(jù)方便和安全考慮自己選擇,這樣也會使破解者難以入手。
用戶程序級密碼驗(yàn)證:用戶還可以給接口程序增設(shè)一級密碼驗(yàn)證的步驟。只有通過該密碼驗(yàn)證,才能進(jìn)一步輸入解密的密碼。因?yàn)榧用芎?,F(xiàn)lash ROM就無法讀寫了,用戶程序可以將增設(shè)的密碼也保存到Flash中,留待驗(yàn)證。另外,如果某一個(gè)模塊既要作為接受密碼的接口,又有其他的用途,也應(yīng)該留有一個(gè)交互界面,在使用前讓用戶選擇該模塊的用途。
遠(yuǎn)程加解密:在很多場合,用戶對于單片機(jī)的控制是通過以太網(wǎng)等介質(zhì)遠(yuǎn)程實(shí)現(xiàn)的,只要有相應(yīng)的接口程序,能夠遠(yuǎn)程對單片機(jī)進(jìn)行加解密,這無疑會給用戶的工作帶來很大的方便。