《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 一種基于CPUID和AES算法的STM32固件升級方案
一種基于CPUID和AES算法的STM32固件升級方案
2015年電子技術應用第3期
曹欲曉1,韓 冬2,徐金寶1
1.南京工程學院 計算機工程學院,江蘇 南京211167; 2.清華大學 自動化系,北京100084
摘要: 針對STM32系統固件升級時使用同一個文件易被非法復制使用的缺陷,提出并實現了一種一個STM32芯片使用一個唯一升級文件的固件升級方案。升級固件時,由服務器為不同的STM32芯片生成不同的bin文件,該bin文件是以STM32的CPUID為密鑰,應用AES算法加密原始bin文件得到的。升級時STM32以自身的CPUID作為密鑰對文件解密,如果作為解密密鑰的CPUID和作為加密密鑰的CPUID不同,則解密出的bin文件不能運行。解密后,再應用IAP技術把新的bin文件寫入Flash。實際測試證明,提出的方法可以實現“一片一密”,有效防止了升級程序的非法使用。
關鍵詞: STM32 CPUID AES算法 解密
中圖分類號: TP311
文獻標識碼: A
文章編號: 0258-7998(2015)03-0028-03
中文引用格式:曹欲曉,韓冬,徐金寶.一種基于CPUID和AES算法的STM32固件升級方案[J].電子技術應用,2015,41(03):28-30+34
A scheme of firmware upgrade of STM32 based on CPUID and AES algorithm
Cao Yuxiao1,Han Dong2,Xu Jinbao1
1.School of Computer Engineering,Nanjing Institute of Technology,Nanjing 211167,China; 2.Department of Automation,Tsinghua University,Beijing 100084,China
Abstract: For the shortage that the unique upgrade file is easy to be illegal used,a kind of firmware upgrade scheme is proposed and implemented,that one STM32 system uses one unique upgrade file. When upgrading firmware,the server generates different bin file for different STM32 system.The server uses AES algorithm to encrypt original bin file with every STM32′s CPUID as encryption key. STM32 decrypts the bin file with its CPUID as the key. If the CPUID as decryption key is not same as the CPUID as encryption key,the program decrypted by STM32 can′t run. After decryption STM32 uses IAP technology to write new firmware to Flash. The actual test proves that the method given by this paper can achieve "one chip one key" and prevent illegal use.
Key words : STM32;CPUID;AES algorithm;encryption;decryption;In Application Programing(IAP)

 

0 引言

  STM32是ST公司推出的基于ARM Cortex-M3[1]內核的系列微控制器。STM32系列微控制器在Coretex-M3內核的基礎上集成了豐富的外設單元[2],具有高性能、低功耗、低成本的優勢,被廣泛應用在工業控制、醫療和手持設備等眾多領域中。與PC上的軟件一樣,嵌入式系統的固件(即軟件)也需要不斷升級?,F在固件的升級一般是使用JTAG或SWD仿真器,通過專用軟件完成,所有產品的升級使用相同的文件,因此易被非法用戶盜版使用。

  為了防止固件被盜版,文獻[3]提出了一種使用硬件狗對單片機程序進行加密的方法,程序在運行過程中不斷對硬件狗進行訪問和讀寫,通過硬件狗的唯一性來保證加密后的固件不被非法訪問和復制。文獻[4]利用一種專用加密芯片AT88SA102S把單片機中的固件程序和加密芯片進行綁定,從而實現了對單片機程序的保護。文獻[5]使用一種1-Wire安全器件,采用安全散列算法SHA-1對固件程序進行認證,防止對固件的非法拷貝。文獻[6]提出了應用芯片唯一身份識別碼、RC振蕩器頻率和上電標志進行軟件加密的方法。

  上述方法雖然能有效地保護單片機的應用程序,但是采用硬件器件加密的方法需要額外的硬件單元,提高了電路的復雜性和產品的成本;采用軟件加密的方法,則需要對每一個芯片單獨編譯燒寫加密后的應用程序,增加了產品批量生產時的工作量。

  針對上述固件升級以及硬件和軟件加密方案的不足,本文在分析了STM32系列微控制器結構特點的基礎上,把STM32內部的全球唯一CPUID作為密鑰,應用AES算法對STM32應用程序所在的bin文件進行加密,給不同的STM32芯片生成不同的升級bin文件。加密后的bin文件由STM32以自己的CPUID作為密鑰解密,并通過IAP技術寫入Flash,從而實現應用程序的合法升級完全由唯一的CPUID控制,只有合法的STM32芯片才能正確地升級固件,防止了非法用戶對應用程序的拷貝復制。

1 CPUID和AES算法

  1.1 STM32的CPUID

  每一個STM32微控制器內部都有一個96位的全球唯一序列號,存儲在地址0x1fff7a10-0x1fff7a18處,稱為CPUID。這個CPUID是STM32芯片的身份標識[7],只能讀出不能寫入,任何兩片STM32微控制器的CPUID都是不相同的,并且同一批次的STM32芯片的CPUID也毫無規律性,所以CPUID可以用來判斷芯片的合法性以決定是否執行固件程序。

  1.2 AES算法

  AES(Advanced Encryption Standard)是NIST(美國國家標準技術研究所)用來代替DES算法的新一代數據加密標準。NIST要求AES 候選算法需滿足以下基本要求:AES在體制上應是對稱分組密碼;密鑰的長度可以是128 bit、 192 bit或 256 bit;數據分組的長度可以是128 bit、192 bit或256 bit;AES算法應容易在各種硬件平臺和軟件平臺上實現。經過幾輪篩選,最終由Joan Daemen和Vincent Rijmen設計的Rijndael算法在2000年10月成為AES標準的最終算法[8]。

  AES算法是一種對稱加密算法,加密和解密使用相同的密鑰。AES算法的輸入是固定長度的分組,輸出分組的長度和輸入分組相同,每一個分組和密鑰的長度可以是128 bit、192 bit或256 bit,對應的加密輪數分別是10、12或14輪。取分組長度和密鑰同為128 bit,給出AES算法加密和解密的流程如圖1和圖2所示[9]。

2 IAP技術

  IAP(In Application Programing)[10]的意思是“在應用編程”,指CPU執行程序時,通過正在執行的程序完成對片內Flash的改寫。利用IAP,可以在程序正常執行時向Flash寫入新的數據或程序,克服了以往改寫Flash需要停止程序運行的缺點。

  通過IAP更新固件,新的固件可以來自串行口、USB、以太網等數據接口,也可以來自外接的TF卡。STM32在執行IAP操作時,首先對片內Flash解鎖,接著擦除需要重新編程的Flash區域,最后把新的固件代碼寫入。使用IAP功能,需要有兩個可執行程序,一個稱為Bootloader,另一個稱為App。Bootloader和App分別存儲在Flash的不同區域,存儲空間不能重合。Bootloader是啟動引導程序,負責應用IAP改寫App固件并跳轉到App執行。App是正常工作時系統完成具體功能的應用程序。

001.jpg

3 基于CPUID和AES算法的STM32固件加密升級

  3.1 系統架構和總體原理

  本文提出的加密升級方案,一共需要三個組成部分:STM32系統、PC、服務器,系統架構如圖3所示。STM32系統是需要升級的嵌入式系統。PC上運行一個升級控制程序,控制STM32的升級操作,并在STM32系統和服務器之間進行通信。服務器上存儲有IAP升級用的原始bin文件和所有合法的STM32微控制器的CPUID,負責為每一個STM32生成不同的bin文件。STM32系統須具有一個USB從機接口,用來與PC連接;還要有一個接在SDIO接口上的TF卡,這個TF卡通過FatFS文件系統被模擬成一個U盤,使PC可以象操作普通U盤一樣操作這個TF卡,STM32和PC的數據交換通過TF卡進行。TF卡初始化后在其中建立一個標記是否升級App的標志文件。

003.jpg

  STM32升級固件時,把自己的CPUID加密后傳給PC上的控制程序,由PC通過網絡發給服務器。服務器事先保存了所有合法的CPUID,當收到PC送來的CPUID時,首先檢查其合法性,如合法則用接收的CPUID作為密鑰對原始bin文件進行AES加密,所以對不同的STM32能生成不同的升級用bin文件。如果其他STM32試圖用自己的CPUID作密鑰解密這個bin文件,則解密出的程序是錯誤的,不能執行。

  STM32系統的Bootlaoder可以在硬件能正常工作后用仿真器統一燒寫,第一個App可以直接應用本文提出的方法升級寫入。

  3.2 Bootloader的設計

  Bootloader在完成自身的初始化后,檢查TF卡上的寫入標志文件的變化,如果同時具有寫入標志和新的bin文件,則把bin文件讀入內存,以自己的CPUID作密鑰,應用AES算法解密bin文件,接著使用IAP把新的App寫入Flash。新的App寫入完成或者無需升級時,直接跳轉到App執行。Bootloader的工作流程可用圖4表示。

004.jpg

  3.3 App的設計

  App程序執行時,除完成正常工作外,每隔一定時間檢查一次TF卡上的寫入標志文件,如果發現PC上的控制程序改寫了升級標志,則讀出CPUID,用一個固定密鑰經AES加密后寫到TF卡上,通過這種方式把加密后的CPUID由PC傳給了服務器。PC控制程序獲得服務器返回的加密bin文件后,寫到TF卡上。STM32重啟后在Bootloader中完成App的固件升級。

4 STM32的IAP功能的實現

  4.1 STM32的IAP

  STM32有三種啟動方式,具體采用哪種由STM32的BOOT0和BOOT1兩個引腳的組合決定[11],只要BOOT0置低,無論BOOT1置高或置低,STM32都從內部Flash啟動。STM32內部的Flash地址從0x8000000開始,Cortex-M3內核的Flash起始地址的第一個字(4 B)必須是棧頂指針的值,第二個字存放復位中斷向量的地址,隨后才是STM32要執行的代碼。為了實現應用程序的IAP功能,STM32片內的Flash要分成兩個區域,開始的一部分存儲Bootloader,后面的一部分存儲App。STM32啟動時首先從0x8000000地址開始執行,即先執行Bootloader,在Bootloader中再跳轉到App。

  Bootloader中的IAP流程是:首先解鎖Flash,擦除App占用的Flash塊區;然后從TF卡中讀出升級bin文件,應用AES算法解密;解密后的代碼按順序寫入上一步擦除的Flash,全部App寫入完成再對Flash加鎖以防止被調試工具讀出。

  Bootloader通過IAP完成固件的寫入后,執行以下代碼完成到App的跳轉[12]:

  JumpAddress=*(__IO uint32_t*) (APPLICATION_

  ADDRESS + 4);//取出App的中斷向量地址

  Jump_To_Application=(pFunction) JumpAddress;

  //給函數指針賦值

  __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

  //初始化用戶堆棧指針

  Jump_To_Application();//跳轉到App執行

  4.2 App代碼的修改和開發環境的設置

  因為App程序沒有存儲在Flash的起始地址,所以在App的main函數中要重新設置中斷向量表的起始地址,否則會因為中斷向量地址出錯導致App不能正常運行。這可以通過調用STM32固件庫中的函數NVIC_Set-

  VectorTable來實現,該函數的第一個參數是Flash的起始地址,第二個參數是App在Flash中的偏移量。

  通過IAP升級App使用的文件必須是bin格式,但編譯器直接編譯生成的是hex文件,因此還需要使用開發工具鏈中的工具把hex文件轉換成bin文件,PC控制程序拷貝到TF卡中的就是服務器加密后的bin文件。

5 結語

  STM32芯片內置的全球唯一96位ID可以作為芯片的身份認證標志,同時具有大容量的Flash,可以同時存儲Bootloader和App,并支持IAP。STM32的這兩個特點為使用AES算法加密生成不同的升級文件提供了物質基礎。經過實際測試,把服務器為某一個STM32生成的加密bin文件拷貝到其他STM32系統后并正確改寫升級標志,STM32系統重啟后應用程序無法執行。應用二進制分析軟件對不同STM32請求升級得到的bin文件進行對比,發現所有bin文件均不相同,因此本文提出的方法可以為不同的STM32生成唯一的升級文件,有效防止了非法用戶的盜版行為。

  參考文獻

  [1] ST Microelectronic Corporation.STM32F10x refrence manual[Z].2008.

  [2] 黃智偉,王兵,朱衛華.STM32F 32位ARM微控制器應用設計與實踐[M].北京:北京航空航天大學出版社,2014.

  [3] 藤廣超,郎建軍,杜其才,等.基于STM32的硬件狗設計與實現[J].微處理機,2013(6):70-72.

  [4] 張煒軒,王菲,王玉平.基于專用加密芯片的單片機加密系統設計[J].單片機與嵌入式系統,2013(9):56-59.

  [5] 易威,彭億強,羅森僑.基于1-Wire安全器件的單片機加密認證系統[J].電子科技,2013,26(7):180-182.

  [6] 潘永雄,胡敏強,羅小偉.單片機控制程序加密策略探索與應用[J].計算機工程與設計,2010,31(11):2466-2469.

  [7] ST Microelectronic Corporation.STM32F10xxx Cortex-M3 programming manual[Z].2008.

  [8] NIST.Advanced encryption standard(AES)[S].Federal Infor-mation Processing Standards Publication,2001.

  [9] 何明星,林昊.AES算法原理及其實現[J].計算機應用研究,2002(12):61-63.

  [10] ST Microelectronic Corporation.STM32F10x in-application programming[Z].2008.

  [11] ST Microelectronics Corporation.STM32F10x Flash prog-ramming[Z].2008.


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99re热精品| 蜜桃av噜噜一区| 亚洲全黄一级网站| 欧美影院成年免费版| 亚洲欧美日本国产有色| 亚洲无线一线二线三线区别av| 亚洲日本电影| 亚洲日本va午夜在线影院| 亚洲国产精品t66y| 亚洲国产精品成人一区二区 | 亚洲视频播放| 99精品视频免费全部在线| 日韩天堂在线视频| 在线视频精品一区| 亚洲在线观看| 欧美一区午夜精品| 亚洲第一狼人社区| 亚洲精品你懂的| 一本久久a久久精品亚洲| 一区二区日韩欧美| 亚洲欧美国产制服动漫| 欧美一区二区在线| 久久久久久久999精品视频| 久久在线免费观看视频| 免费久久精品视频| 欧美日本韩国一区二区三区| 欧美午夜激情视频| 国产精品入口尤物| 国产综合欧美在线看| 亚洲国产精品一区二区三区| 999在线观看精品免费不卡网站| 一区二区三区色| 欧美一级电影久久| 亚洲欧洲午夜| 亚洲精品国精品久久99热| 一本色道久久综合亚洲精品婷婷| 中文精品视频| 久久疯狂做爰流白浆xx| 欧美插天视频在线播放| 欧美日韩一区精品| 国产日韩欧美一区二区三区在线观看 | 欧美伊人精品成人久久综合97| 久久成人av少妇免费| 亚洲精品国产精品乱码不99按摩| 妖精成人www高清在线观看| 亚洲欧美国产一区二区三区| 久久久精品日韩欧美| 欧美精品一区二区三区视频| 国产精品久久久一区二区三区| 国精产品99永久一区一区| 亚洲精品久久久蜜桃| 亚洲永久免费| 亚洲精品乱码久久久久久久久| 亚洲一区二区av电影| 久久久亚洲精品一区二区三区| 欧美久久九九| 国产一区二区三区电影在线观看| 亚洲激情一区二区三区| 亚洲欧美日韩在线不卡| 亚洲精品一线二线三线无人区| 亚洲欧美国产精品va在线观看| 久久综合色天天久久综合图片| 欧美日韩在线观看一区二区三区 | 欧美日韩一区二区视频在线| 国产日韩精品一区| 亚洲人成欧美中文字幕| 欧美一级二级三级蜜桃| 一区二区三区欧美激情| 久久久久久噜噜噜久久久精品| 欧美日韩一区二区视频在线观看 | 91久久久一线二线三线品牌| 亚洲欧美偷拍卡通变态| 欧美成人一区二免费视频软件| 国产精品专区一| 亚洲免费播放| 亚洲高清在线观看| 欧美一区三区三区高中清蜜桃| 欧美伦理91| 在线播放中文一区| 亚洲欧美三级伦理| 宅男精品导航| 欧美国产日韩在线| 国内成+人亚洲+欧美+综合在线| 99香蕉国产精品偷在线观看| 亚洲国产99精品国自产| 午夜一区二区三区在线观看| 欧美屁股在线| 亚洲第一精品夜夜躁人人爽 | 禁断一区二区三区在线| 亚洲女人小视频在线观看| 在线亚洲激情| 欧美理论在线| 亚洲国产精品va在线看黑人| 欧美在线不卡| 欧美一区午夜视频在线观看| 欧美午夜宅男影院| 亚洲精品视频在线| 亚洲精品在线免费| 米奇777超碰欧美日韩亚洲| 国产日韩免费| 午夜精品亚洲| 午夜亚洲性色福利视频| 国产精品盗摄久久久| 亚洲理伦在线| 日韩一区二区精品| 欧美精品一区二区三区在线播放| 极品av少妇一区二区| 欧美有码视频| 久久久精品一区| 国产私拍一区| 欧美影院一区| 久久亚洲风情| 怡红院av一区二区三区| 亚洲国产精品视频一区| 蜜臀av在线播放一区二区三区| 韩日欧美一区二区| 亚洲成人中文| 老牛嫩草一区二区三区日本| 精品成人乱色一区二区| 亚洲成色www8888| 久久亚洲二区| **网站欧美大片在线观看| 亚洲激情黄色| 欧美激情第3页| 亚洲精选在线| 亚洲视频999| 国产精品久久91| 亚洲欧美国产日韩天堂区| 欧美在线一二三| 激情欧美一区| 亚洲精品欧美极品| 欧美激情一区二区| 999亚洲国产精| 午夜精品福利电影| 国产亚洲亚洲| 91久久综合| 欧美日产一区二区三区在线观看 | 亚洲黄色天堂| 欧美日韩的一区二区| 亚洲网站在线| 久久久久国产一区二区| 在线看片一区| aa级大片欧美| 国产精品日韩专区| 久久激情视频| 欧美极品欧美精品欧美视频| 99综合在线| 欧美在线影院| 亚洲国产欧美一区二区三区同亚洲 | 久久精品视频99| 欧美精品亚洲二区| 亚洲一区二区在线播放| 久久久久一区| 亚洲剧情一区二区| 欧美一区二区三区四区视频| 一区视频在线看| 亚洲视频在线视频| 国产一区自拍视频| 日韩一级片网址| 国产日韩成人精品| 亚洲精品少妇网址| 国产精品日韩在线| 亚洲啪啪91| 国产精品久久久久久久久久妞妞 | 久久精品二区三区| 欧美日本国产精品| 欧美一级久久久久久久大片| 免费在线观看成人av| 在线视频亚洲欧美| 久久深夜福利| 一区二区三区欧美日韩| 久久婷婷麻豆| 一区二区三区毛片| 你懂的国产精品永久在线| 在线亚洲欧美| 欧美 日韩 国产精品免费观看| 一区二区日韩伦理片| 久久综合五月| 亚洲综合另类| 欧美日韩国产成人高清视频| 欧美一区二区三区男人的天堂| 欧美日韩成人激情| 久久精品国产一区二区三区| 国产精品福利在线| 亚洲精品一区二| 国产一区二区三区成人欧美日韩在线观看| 日韩视频永久免费| 国内精品美女av在线播放| 亚洲综合激情| 亚洲精品国产精品国自产在线| 久久久久.com| 亚洲一区二区三区在线视频| 欧美电影在线观看| 久久精品国产久精国产爱| 国产精品久久久久7777婷婷| 亚洲美女毛片| 在线免费观看日韩欧美| 久久福利一区| 亚洲男人的天堂在线aⅴ视频| 欧美日韩精品一区二区三区四区 |