大肉大捧一进一出好爽视色大师,丰满少妇被猛烈进入在线播放,欧美真人性野外做爰,黑人巨大vs日本人优在线

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
Flash型單片機的加密與解密
Flash型單片機的加密與解密
 更新時間:2010-2-5 16:50:02  點擊數:0
【字體: 字體顏色
 廠商利用單片機進行產品開發時,都會關心其代碼和數據的保密性。考慮到用戶在編寫和調試代碼時所付出的時間和精力,代碼的成本是不言而喻的。
    早期的單片機,代碼是交給芯片制造商制成掩膜ROM。有兩種加密的機制,一是徹底破壞讀取代碼的功能,無論是開發者還是使用者都永遠無法讀取其中的內容。從安全上來說,這種方式很徹底,但是已經無法檢查ROM中的代碼了。另一種方法是不公開讀取方法,廠商仍可以讀取代碼。這種方式留有檢查代碼的可能性,但是并不能算是一種真正的“加密”,被破解的可能性是存在的。
    客觀地講,一方面希望加密很徹底,而另外一方面又希望留有檢查代碼的可能,這是相互矛盾的要求。
    自Flash技術得到廣泛應用以來,各類單片機制造商紛紛采用了多種不同的芯片加密方法,對比掩膜ROM芯片來說,Flash ROM在線可編程特性使得芯片的加密和解密方式變得更加靈活和可靠。在Flash型單片機中,芯片的加密和解密工作都是通過對Flash ROM的編程來完成的,由于用戶程序可以在線地改寫ROM的內容,可以編寫一套加密和解密的小程序,隨用戶程序下載到芯片中,通過運行該程序,在線修改Flash ROM的內容,對芯片進行加密和解密,使整個的加解密過程更為簡單靈活。
    Freescale公司的HCS12單片機采用的加解密思路有一定的典型性,我們對此作了一些研究,現以MC9S12DP256單片機為例,介紹Flash型單片機的加密解密方法。

BDM程序調試接口
    Freescale公司的很多單片機都借用一種被稱為后臺調試模式(Background Debug Mode,BDM)作為下載和調試程序的接口。
    BDM是一種單線調試模式,芯片通過一個引腳與編程器進行通信。在HCS12系列單片機中,內部都置有標準的BDM調試模塊。
該模塊的有三種作用:
1) 對內部存儲器的讀寫。將用戶程序下載到目標芯片中或是將存儲器中的數據讀出。
2) 對單片機工作方式和資源進行配置。部分涉及到單片機工作方式和資源配置的寄存器只能在特殊模式下由編程器發送BDM命令來修改。
3) 程序調試。利用BDM模塊可以讀寫內存和CPU內部寄存器,調試程序。
    在HCS12單片機未加密的狀態下,使用BDM硬件命令可以將Flash ROM中的程序讀出或將新的程序寫入。BDM命令可以由獨立的硬件系統來送出,我們一般稱此類系統為BDM編程器。
    BDM編程器的時序協議是公開的,任何人都可以根據協議設計硬件、編寫程序,實現BDM編程器的功能。使用BDM接口,編程器可以很容易的訪問到目標系統的存儲器,這給程序調試和燒寫帶來了很大的方便,然而,便利的對外接口也給盜用者留下了可乘之機。
    在帶有BDM模塊的單片機中引入數據保密機制并非HCS12系列的首創,先前的HC12系列單片機的D家族中,就已經引入了屏蔽Lockout BDM讀寫的機制,可惜,該機制在單片機的擴展工作模式下存在著漏洞。相比之下,HCS12系列單片機中的保密機制更加完善,無論在BDM模式下或是擴展模式下,都可以屏蔽外部對Flash ROM的讀寫。

兩種加密解密方法
    在HCS12系列單片機中,加密可以分成兩種方法:完全加密和使用密碼的加密。這兩種加密的方法根據用戶的需求,使用的場合也有所不同。
·完全加密
    所謂完全加密,就是將芯片徹底的保護起來,屏蔽對芯片的所有讀操作。在MC9S12DP256單片機中,加密是通過對某一Flash單元($FF0F)編程來實現的。加密后的芯片,BDM編程器對Flash的讀操作就被禁止了。
    采用完全加密,讀取ROM代碼的可能性就不存在了,這是一種最為“安全”的加密方法。如果用戶想修改ROM的內容,唯一的辦法就是將Flash的內容全部擦除,這一操作可以通過BDM編程器來完成。
    使用BDM編程器擦除Flash ROM和EEPROM的過程與在普通模式下對片內的Flash ROM擦除操作過程基本一樣,區別是對寄存器或是存儲單元的讀寫要改由BDM命令來實現。通過BDM編程器將一連串完整的擦除指令序列送給單片機,就可將Flash ROM和EEPROM的內容全部擦除了。
    在全擦除操作完成后,BDM編程器將系統復位,系統會自動檢查全擦除操作是否成功。如果成功,BDM狀態寄存器的UNSEC位會自動置“1”,系統進入解密狀態。
    由于系統靠檢查Flash ROM和EEPROM是否清空來決定系統是否保持加密狀態,所以,如果用戶程序偶然將Flash ROM和EEPROM的內容全部擦除,那么系統也將自動解密。
·使用密碼的加密
    為了留有讀取ROM代碼的可能,用戶可以采用一種帶有密碼的加密方式。解密時,用戶只要給出正確的密碼(稱為“后門密碼”),就可以讀寫ROM,而不破壞其內容了。
使用這種方法,用戶需要在加密之前,設定4個字長的密碼,并將其存放在Flash中,MC9S12DP256存放密碼的Flash地址是從$FF00到$FF07。設定的密碼可以隨用戶程序一起下載到芯片中。
    解密時,接受用戶輸入的密碼并驗證的工作只能由一個用戶接口程序來完成的,不能使用BDM編程器。接口的方式沒有限制,如SCI、SPI、IIC、MSCAN等等,只要用戶能夠將正確的密碼輸入,任何一種接口方式都是可以的,最為典型的接口是串口。
假設接收的密碼存在變量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                   ; 是否驗證成功?
SUCCESS          ; 密碼驗證成功
LDAA  FSTAT      ; 清除Flash狀態寄存器
     ORAA  #%00110000
     STAA  FSTAT
     LDAA  #0
     STAA  FCNFG
     BRCLR FSTAT,$80,*
     LDD   #$FFFE
     STD   $FF0E                  ; 改寫加密狀態,復位后系統不再加密
     LDAA  #$20
     STAA  FCMD                 
     BSET  FSTAT,#$80             ; 開始執行
     BRCLR FSTAT,$40,*   
   RTS                          ; 返回
FAIL RTS
    程序返回后,如果用戶輸入的密碼和原值符合,系統將會把保密寄存器FSEC的最后兩
位SEC[1:0]改寫到未加密的狀態,系統自動解密。如果驗證沒有通過,系統將保持加密狀態。
    需要注意,不管使用哪種方式將系統解密,解密后的系統雖然可以暫時讀取Flash,但是由于單元$FF0F中的最后兩位仍處于加密狀態(全擦除后,“11”的組合仍為加密狀態),系統在下次復位后,仍會回到加密的狀態,所以為了徹底解密系統,必須改寫這兩位為“10”。
整個程序的流程如圖1所示。

 

圖1 解密用戶接口程序流程圖

靈活使用帶密碼的加密解密方法
    通過研究我們發現,使用帶有密碼的加密方式,看似給破解代碼留有了可能性,但因為接受和驗證密碼都需要由用戶程序完成,只要用戶程序設計的可靠,這種可能性是很小的。
    為了增強用戶接口程序的可靠性和靈活性,我們提出以下幾種可能的設計思路:
    針對窮舉密碼的對策。MC9S12DP256的密碼長達8個字節,如果不將密碼限定在ASCII碼的范圍內,那么可以選擇的密碼數量將達到1.8*1019 種。為了防患破解者窮舉密碼,用戶可以設定允許輸入錯誤密碼的次數,如果出錯超過一定次數,接口程序就不再接收新的密碼了。允許出錯的次數可以根據安全需要和使用方便綜合考慮。
    靈活的對外接口。使用密碼加解密時,用戶程序使用的對外接口是沒有任何限制的。本文中的串口程序只是一例,MC9S12DP25 6 片內集成了眾多的接口模塊,如SCI、SPI、IIC、MSCAN、J1850等等。使用哪一個接口,用戶可以根據方便和安全考慮自己選擇,這樣也會使破解者難以入手。
    用戶程序級密碼驗證。用戶還可以給接口程序增設一級密碼驗證的步驟。只有通過該密碼驗證,才能進一步輸入解密的密碼。因為加密后,Flash ROM就無法讀寫了,用戶程序可以將增設的密碼也保存到Flash中,留待驗證。另外,如果某一個模塊既要作為接受密碼的接口,又有其他的用途,也應該留有一個交互界面,在使用前讓用戶選擇該模塊的用途。
    遠程加解密。在很多場合,用戶對于單片機的控制是通過以太網等介質遠程實現的,只要有相應的接口程序,能夠遠程對單片機進行加解密,這無疑會給用戶的工作帶來很大的方便。

結語
    Flash在線編程技術的出現給單片機中的加密機制帶來了很大的改變。通過對HCS12系列單片機加解密方法的分析,我們認為這種加解密的機制具有足夠的安全性,以及靈活的加解密方式。
    另外,使用密碼解密的可靠性很高,實現的過程依賴于用戶程序,只要精心設計接口程序,用戶完全可以將這種風險降至最低。

  • 上一篇: 單片機軟硬件聯合仿真解決方案
  • 下一篇: 沒有了
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 忻城县| 贺州市| 航空| 青河县| 明溪县| 皮山县| 舒兰市| 晋宁县| 遵义县| 华坪县| 无为县| 武宁县| 大竹县| 扎鲁特旗| 北流市| 大兴区| 新郑市| 富民县| 增城市| 广东省| 磐安县| 寿阳县| 临夏县| 红原县| 思南县| 塘沽区| 武平县| 宁城县| 商洛市| 将乐县| 淮滨县| 本溪| 高青县| 峨眉山市| 方山县| 高雄县| 六盘水市| 弥勒县| 武鸣县| 中牟县| 溧阳市|