查看: 3692|回復: 4
打印 上一主題 下一主題

Flash型單片機的加密與解密

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2010-8-28 21:28:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: BDM , 單片機 , 加密 , 解密
引 言

廠(chǎng)商利用單片機進(jìn)行產(chǎn)品開(kāi)發(fā)時(shí),都會(huì )關(guān)心其代碼和數據的保密性?紤]到用戶(hù)在編寫(xiě)和調試代碼時(shí)所付出的時(shí)間和精力,代碼的成本是不言而喻的。

早期的單片機,代碼是交給芯片制造商制成掩膜ROM。有兩種加密的機制,一是徹底破壞讀取代碼的功能,無(wú)論是開(kāi)發(fā)者還是使用者都永遠無(wú)法讀取其中的內容。從安全上來(lái)說(shuō),這種方式很徹底,但是已經(jīng)無(wú)法檢查ROM中的代碼了。另一種方法是不公開(kāi)讀取方法,廠(chǎng)商仍可以讀取代碼。這種方式留有檢查代碼的可能性,但是并不能算是一種真正的“加密”,被破解的可能性是存在的。

客觀(guān)地講,一方面希望加密很徹底,而另外一方面又希望留有檢查代碼的可能,這是相互矛盾的要求。

自Flash技術(shù)得到廣泛應用以來(lái),各類(lèi)單片機制造商紛紛采用了多種不同的芯片加密方法,對比掩膜ROM芯片來(lái)說(shuō),Flash ROM在線(xiàn)可編程特性使得芯片的加密和解密方式變得更加靈活和可靠。在Flash型單片機中,芯片的加密和解密工作都是通過(guò)對Flash ROM的編程來(lái)完成的,由于用戶(hù)程序可以在線(xiàn)地改寫(xiě)ROM的內容,可以編寫(xiě)一套加密和解密的小程序,隨用戶(hù)程序下載到芯片中,通過(guò)運行該程序,在線(xiàn)修改Flash ROM的內容,對芯片進(jìn)行加密和解密,使整個(gè)的加解密過(guò)程更為簡(jiǎn)單靈活。

Freescale公司的HCS12單片機采用的加解密思路有一定的典型性,我們對此作了一些研究,現以MC9S12DP256單片機為例,介紹Flash型單片機的加密解密方法。

BDM程序調試接口

Freescale公司的很多單片機都借用一種被稱(chēng)為后臺調試模式(Background Debug Mode,BDM)作為下載和調試程序的接口。

BDM是一種單線(xiàn)調試模式,芯片通過(guò)一個(gè)引腳與編程器進(jìn)行通信。在HCS12系列單片機中,內部都置有標準的BDM調試模塊。該模塊的有三種作用:

1) 對內部存儲器的讀寫(xiě)。將用戶(hù)程序下載到目標芯片中或是將存儲器中的數據讀出。

2) 對單片機工作方式和資源進(jìn)行配置。部分涉及到單片機工作方式和資源配置的寄存器只能在特殊模式下由編程器發(fā)送BDM命令來(lái)修改。

3) 程序調試。利用BDM模塊可以讀寫(xiě)內存和CPU內部寄存器,調試程序。

在HCS12單片機未加密的狀態(tài)下,使用BDM硬件命令可以將Flash ROM中的程序讀出或將新的程序寫(xiě)入。BDM命令可以由獨立的硬件系統來(lái)送出,我們一般稱(chēng)此類(lèi)系統為BDM編程器。

BDM編程器的時(shí)序協(xié)議是公開(kāi)的,任何人都可以根據協(xié)議設計硬件、編寫(xiě)程序,實(shí)現BDM編程器的功能。使用BDM接口,編程器可以很容易的訪(fǎng)問(wèn)到目標系統的存儲器,這給程序調試和燒寫(xiě)帶來(lái)了很大的方便,然而,便利的對外接口也給盜用者留下了可乘之機。

在帶有BDM模塊的單片機中引入數據保密機制并非HCS12系列的首創(chuàng ),先前的HC12系列單片機的D家族中,就已經(jīng)引入了屏蔽Lockout BDM讀寫(xiě)的機制,可惜,該機制在單片機的擴展工作模式下存在著(zhù)漏洞。相比之下,HCS12系列單片機中的保密機制更加完善,無(wú)論在BDM模式下或是擴展模式下,都可以屏蔽外部對Flash ROM的讀寫(xiě)。

兩種加密解密方法

在HCS12系列單片機中,加密可以分成兩種方法:完全加密和使用密碼的加密。這兩種加密的方法根據用戶(hù)的需求,使用的場(chǎng)合也有所不同。

完全加密

所謂完全加密,就是將芯片徹底的保護起來(lái),屏蔽對芯片的所有讀操作。在MC9S12DP256單片機中,加密是通過(guò)對某一Flash單元($FF0F)編程來(lái)實(shí)現的。加密后的芯片,BDM編程器對Flash的讀操作就被禁止了。

采用完全加密,讀取ROM代碼的可能性就不存在了,這是一種最為“安全”的加密方法。如果用戶(hù)想修改ROM的內容,唯一的辦法就是將Flash的內容全部擦除,這一操作可以通過(guò)BDM編程器來(lái)完成。

使用BDM編程器擦除Flash ROM和EEPROM的過(guò)程與在普通模式下對片內的Flash ROM擦除操作過(guò)程基本一樣,區別是對寄存器或是存儲單元的讀寫(xiě)要改由BDM命令來(lái)實(shí)現。通過(guò)BDM編程器將一連串完整的擦除指令序列送給單片機,就可將Flash ROM和EEPROM的內容全部擦除了。

在全擦除操作完成后,BDM編程器將系統復位,系統會(huì )自動(dòng)檢查全擦除操作是否成功。如果成功,BDM狀態(tài)寄存器的UNSEC位會(huì )自動(dòng)置“1”,系統進(jìn)入解密狀態(tài)。

由于系統靠檢查Flash ROM和EEPROM是否清空來(lái)決定系統是否保持加密狀態(tài),所以,如果用戶(hù)程序偶然將Flash ROM和EEPROM的內容全部擦除,那么系統也將自動(dòng)解密。

使用密碼的加密

為了留有讀取ROM代碼的可能,用戶(hù)可以采用一種帶有密碼的加密方式。解密時(shí),用戶(hù)只要給出正確的密碼(稱(chēng)為“后門(mén)密碼”),就可以讀寫(xiě)ROM,而不破壞其內容了。

使用這種方法,用戶(hù)需要在加密之前,設定4個(gè)字長(cháng)的密碼,并將其存放在Flash中,MC9S12DP256存放密碼的Flash地址是從$FF00到$FF07。設定的密碼可以隨用戶(hù)程序一起下載到芯片中。

解密時(shí),接受用戶(hù)輸入的密碼并驗證的工作只能由一個(gè)用戶(hù)接口程序來(lái)完成的,不能使用BDM編程器。接口的方式?jīng)]有限制,如SCI、SPI、IIC、MSCAN等等,只要用戶(hù)能夠將正確的密碼輸入,任何一種接口方式都是可以的,最為典型的接口是串口。

假設接收的密碼存在變量KEY0-KEY7中,驗證密碼的程序如下:

;******************
;* TEST KEYS
;******************
TESTKEYS
BSET FCNFG,$20 ;置KEYACC為1
LDD KEY0
STD $FF00
LDD KEY2
STD $FF02
LDD KEY4

STD $FF04
LDD KEY6
STD $FF06 ;驗證KEY0-KEY7
BCLR FCNFG,$20 ;清KEYACC為0
LDAA FSEC
ANDA #$03
CMPA #$02
BNE FAIL&n bsp; ; 是否驗證成功?
SUCCESS ; 密碼驗證成功
LDAA FSTAT ; 清除Flash狀態(tài)寄存器
ORAA #%00110000
STAA FSTAT
LDAA #0
STAA FCNFG
BRCLR FSTAT,$80,*
LDD #$FFFE
STD $FF0E ; 改寫(xiě)加密狀態(tài),復位后系統不再加密
LDAA #$20
STAA FCMD
BSET FSTAT,#$80 ; 開(kāi)始執行
BRCLR FSTAT,$40,*
RTS ; 返回
FAIL RTS

程序返回后,如果用戶(hù)輸入的密碼和原值符合,系統將會(huì )把保密寄存器FSEC的最后兩位SEC[1:0]改寫(xiě)到未加密的狀態(tài),系統自動(dòng)解密。如果驗證沒(méi)有通過(guò),系統將保持加密狀態(tài)。

需要注意,不管使用哪種方式將系統解密,解密后的系統雖然可以暫時(shí)讀取Flash,但是由于單元$FF0F中的最后兩位仍處于加密狀態(tài)(全擦除后,“11”的組合仍為加密狀態(tài)),系統在下次復位后,仍會(huì )回到加密的狀態(tài),所以為了徹底解密系統,必須改寫(xiě)這兩位為“10”。整個(gè)程序的流程如圖1所示。


圖1 解密用戶(hù)接口程序流程圖


靈活使用帶密碼的加密解密方法

通過(guò)研究我們發(fā)現,使用帶有密碼的加密方式,看似給破解代碼留有了可能性,但因為接受和驗證密碼都需要由用戶(hù)程序完成,只要用戶(hù)程序設計的可靠,這種可能性是很小的。

為了增強用戶(hù)接口程序的可靠性和靈活性,我們提出以下幾種可能的設計思路:

針對窮舉密碼的對策:MC9S12DP256的密碼長(cháng)達8個(gè)字節,如果不將密碼限定在A(yíng)SCII碼的范圍內,那么可以選擇的密碼數量將達到1.8*1019 種。為了防患破解者窮舉密碼,用戶(hù)可以設定允許輸入錯誤密碼的次數,如果出錯超過(guò)一定次數,接口程序就不再接收新的密碼了。允許出錯的次數可以根據安全需要和使用方便綜合考慮。

靈活的對外接口:使用密碼加解密時(shí),用戶(hù)程序使用的對外接口是沒(méi)有任何限制的。本文中的串口程序只是一例,MC9S12DP256片內集成了眾多的接口模塊,如SCI、SPI、IIC、MSCAN、J1850等等。使用哪一個(gè)接口,用戶(hù)可以根據方便和安全考慮自己選擇,這樣也會(huì )使破解者難以入手。

用戶(hù)程序級密碼驗證:用戶(hù)還可以給接口程序增設一級密碼驗證的步驟。只有通過(guò)該密碼驗證,才能進(jìn)一步輸入解密的密碼。因為加密后,Flash ROM就無(wú)法讀寫(xiě)了,用戶(hù)程序可以將增設的密碼也保存到Flash中,留待驗證。另外,如果某一個(gè)模塊既要作為接受密碼的接口,又有其他的用途,也應該留有一個(gè)交互界面,在使用前讓用戶(hù)選擇該模塊的用途。

遠程加解密:在很多場(chǎng)合,用戶(hù)對于單片機的控制是通過(guò)以太網(wǎng)等介質(zhì)遠程實(shí)現的,只要有相應的接口程序,能夠遠程對單片機進(jìn)行加解密,這無(wú)疑會(huì )給用戶(hù)的工作帶來(lái)很大的方便。

結 語(yǔ)

Flash在線(xiàn)編程技術(shù)的出現給單片機中的加密機制帶來(lái)了很大的改變。通過(guò)對HCS12系列單片機加解密方法的分析,我們認為這種加解密的機制具有足夠的安全性,以及靈活的加解密方式。 另外,使用密碼解密的可靠性很高,實(shí)現的過(guò)程依賴(lài)于用戶(hù)程序,只要精心設計接口程序,用戶(hù)完全可以將這種風(fēng)險降至最低。
沙發(fā)
發(fā)表于 2010-9-17 22:31:28 | 只看該作者
來(lái)學(xué)習了
板凳
發(fā)表于 2010-11-28 23:17:43 | 只看該作者
學(xué)習了
地板
發(fā)表于 2010-12-23 17:27:48 | 只看該作者
謝謝分享
地下室
發(fā)表于 2015-2-7 10:34:27 | 只看該作者
支持一下
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页