采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法
【專利摘要】一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,其可針對(duì)廠商利用MCU開發(fā)產(chǎn)品而燒錄程序代碼的階段下,包括步驟:燒錄開始時(shí),通過燒寫工具給MCU上電,使MCU進(jìn)入Mode0模式;對(duì)整個(gè)Flash的參數(shù)區(qū)和資料區(qū)作擦除操作;對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),將Flash的資料區(qū)劃分為P1、P2和P3三個(gè)區(qū);分別對(duì)P1、P2區(qū)作資料燒錄,P1區(qū)燒錄應(yīng)用程序代碼,P2區(qū)燒錄底層驅(qū)動(dòng)和固件升級(jí)控制代碼;對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),將P1、P2區(qū)設(shè)定為Mode1模式下只讀,將P3區(qū)設(shè)定為Mode1模式下可讀、可寫和可擦除;對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),開啟密鑰校驗(yàn)單元,并對(duì)P1區(qū)設(shè)定校驗(yàn)用密鑰及校驗(yàn)機(jī)制。本發(fā)明能避免Flash MCU因外部干擾而導(dǎo)致程序破壞或資料丟失,且有效保護(hù)原始代碼不被讀出竊取。
【專利說明】采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及微處理器【技術(shù)領(lǐng)域】,具體來說,本發(fā)明涉及一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法。
【背景技術(shù)】
[0002]相比ROM(只讀存儲(chǔ)器)和RAM(隨機(jī)存儲(chǔ)器)這兩種常見的存儲(chǔ)器類型,F(xiàn)lash(快閃存儲(chǔ)器,簡稱閃存)具有ROM存儲(chǔ)器掉電后不丟失數(shù)據(jù)的優(yōu)點(diǎn),同時(shí)又具備可擦除重寫的功能可以用于更新程序代碼。因此,越來越多的MCU(微處理器)廠商采用Flash作為其MCU芯片中的程序存儲(chǔ)器。
[0003]很多電子產(chǎn)品在出廠之后到消費(fèi)者手中有可能會(huì)發(fā)現(xiàn)一些問題,有些問題是其內(nèi)部MCU的程序代碼bug (漏洞)導(dǎo)致,而有的可能是MCU與外部器件的控制不完善??傊?,這些問題往往很多都是可以通過修改和升級(jí)固件程序的方式來解決的。這時(shí)采用Flash儲(chǔ)存器的MCU(下文簡稱Flash MCU)的優(yōu)勢(shì)就體現(xiàn)出來了,廠商只需要提供固件更新工具,讓經(jīng)銷商甚至消費(fèi)者自己對(duì)產(chǎn)品的MCU固件進(jìn)行升級(jí)即可,從而避免了產(chǎn)品的返修甚至退貨等一系列耗費(fèi)時(shí)間、人力、財(cái)力的行為。
[0004]由于生活中各種應(yīng)用的實(shí)際場(chǎng)合及環(huán)境中存在各種電磁干擾,導(dǎo)致MCU在工作過程中程序執(zhí)行出現(xiàn)異常是不可避免的,典型現(xiàn)象是MCU的代碼執(zhí)行順序會(huì)發(fā)生錯(cuò)亂,比如程序執(zhí)行時(shí)跳轉(zhuǎn)到非預(yù)定的指令分支處。這對(duì)采用Flash MCU并提供固件升級(jí)功能的產(chǎn)品會(huì)帶來一些風(fēng)險(xiǎn)和隱患。由于Flash存儲(chǔ)器本身具有可擦除和寫入的特性,而產(chǎn)品為了提供固件升級(jí)的功能必然在出廠的固件當(dāng)中也有對(duì)Flash進(jìn)行擦除重寫的程序代碼,所以當(dāng)出現(xiàn)干擾導(dǎo)致的程序代碼指令執(zhí)行發(fā)生錯(cuò)亂時(shí),有可能因?yàn)橹噶钐D(zhuǎn)到固件升級(jí)相關(guān)的指令分支處,執(zhí)行了對(duì)Flash的擦除和寫入操作,導(dǎo)致Flash當(dāng)中存儲(chǔ)的程序代碼自身被破壞,進(jìn)而使產(chǎn)品無法正常使用的嚴(yán)重問題。雖然所有產(chǎn)品通常都會(huì)在硬件和軟件上或多或少做一些抗干擾的保護(hù)和加強(qiáng),但并不能完全保證不被干擾,所以和采用ROM存儲(chǔ)器的MCU相比,F(xiàn)lash MCU在這方面出問題的概率是較高的。
[0005]此外,由于采用Flash MCU的產(chǎn)品通常都提供固件升級(jí)功能,也對(duì)第三方的代碼竊取行為提供了一定的途徑。例如當(dāng)某廠商A采用一款Flash MCU開發(fā)了一種新的產(chǎn)品,而該產(chǎn)品的核心功能都在于其內(nèi)部MCU中的控制軟件;當(dāng)其他廠商B只要能夠?qū)⑵渲嘘P(guān)鍵代碼復(fù)制出來,即可通過采購?fù)瑯拥腇lash MCU制造出功能與廠商A幾乎完全一樣的產(chǎn)品。傳統(tǒng)的方式下,要讀取MCU中的程序代碼是不可能的,因?yàn)閺S商自己并不會(huì)提供這樣的途徑和方法。但是對(duì)于Flash MCU,因?yàn)橛辛斯碳?jí)功能,廠商B完全可以通過該功能將一小段自己的程序燒錄到目標(biāo)產(chǎn)品的MCU當(dāng)中,然后通過執(zhí)行這段程序代碼將MCU中的大部分原始代碼通過一定方式(比如I/O 口輸出指令序列)竊取出來。
[0006]因此,F(xiàn)lash MCU的廠商迫切地需要在代碼存儲(chǔ)保護(hù)方面做一些保護(hù)措施方面的設(shè)計(jì)。
【發(fā)明內(nèi)容】
[0007]本發(fā)明所要解決的一個(gè)技術(shù)問題是提供一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,能夠避免Flash MCU因?yàn)橥獠扛蓴_而導(dǎo)致程序破壞或者資料丟失的問題。
[0008]本發(fā)明所要解決的另一個(gè)技術(shù)問題是提供一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,能夠有效保護(hù)原始代碼不被惡意讀出竊取。
[0009]為解決上述技術(shù)問題,本發(fā)明提供一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,所述微處理器內(nèi)包括一密鑰校驗(yàn)單元;所述程序代碼保護(hù)方法系針對(duì)廠商利用所述微處理器開發(fā)產(chǎn)品而燒錄程序代碼的階段下對(duì)所述程序代碼進(jìn)行保護(hù),其包括步驟:
[0010]A.燒錄開始時(shí),通過特定的燒寫工具給所述微處理器上電,使所述微處理器進(jìn)入ModeO模式;
[0011]B.對(duì)整個(gè)所述快閃存儲(chǔ)器的參數(shù)區(qū)和資料區(qū)進(jìn)行擦除操作;
[0012]C.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將所述快閃存儲(chǔ)器的資料區(qū)劃分為P1、P2和P3共三個(gè)區(qū);
[0013]D.分別對(duì)所述P1區(qū)和所述P2區(qū)進(jìn)行資料燒錄,其中所述P1區(qū)燒錄應(yīng)用程序代碼,所述P2區(qū)燒錄底層驅(qū)動(dòng)和固件升級(jí)控制代碼,所述P3區(qū)作為緩沖區(qū),不燒錄內(nèi)容,保持為空;
[0014]E.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將所述P1區(qū)和所述P2區(qū)設(shè)定為Model模式下只讀,將所述P3區(qū)設(shè)定為Model模式下可讀、可寫和可擦除;
[0015]F.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),開啟所述密鑰校驗(yàn)單元,并對(duì)所述P1區(qū)設(shè)定校驗(yàn)用密鑰以及校驗(yàn)機(jī)制。
[0016]可選地,所述密鑰校驗(yàn)單元包括一個(gè)控制模塊、一組待校驗(yàn)密鑰寄存器以及一組臨時(shí)權(quán)限控制寄存器;
[0017]其中,所述控制模塊負(fù)責(zé)整個(gè)所述密鑰校驗(yàn)單元的開啟和關(guān)閉、所述校驗(yàn)用密鑰以及所述校驗(yàn)機(jī)制的設(shè)定,所述控制模塊由所述快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制。
[0018]可選地,所述密鑰校驗(yàn)單元系由硬件實(shí)現(xiàn)。
[0019]為解決上述技術(shù)問題,本發(fā)明還提供一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,所述微處理器內(nèi)包括一密鑰校驗(yàn)單元;所述程序代碼保護(hù)方法系針對(duì)產(chǎn)品出廠后,用戶在使用過程中發(fā)現(xiàn)問題而需要進(jìn)行固件升級(jí)的階段下對(duì)程序代碼進(jìn)行保護(hù),其包括步驟:
[0020]1.所述微處理器正常上電,此時(shí)其處于默認(rèn)的Model模式;
[0021]I1.等待并接受用戶選擇新的固件文件,進(jìn)行固件升級(jí)操作;
[0022]II1.所述微處理器運(yùn)行所述快閃存儲(chǔ)器的所述P2區(qū)中的固件升級(jí)控制代碼;
[0023]IV.所述微處理器讀取待升級(jí)的所述固件文件的內(nèi)容,并取出升級(jí)控制密鑰;
[0024]V.讀取所述固件文件中待升級(jí)的所述程序代碼,并和所述升級(jí)控制密鑰進(jìn)行軟件方式的完整性校驗(yàn);
[0025]V1.所述完整性校驗(yàn)成功后,再將所述升級(jí)控制密鑰讀出傳遞給所述密鑰校驗(yàn)單元進(jìn)行硬件校驗(yàn);
[0026]VI1.所述密鑰校驗(yàn)單元校驗(yàn)成功后,設(shè)置所述密鑰校驗(yàn)單元中的臨時(shí)權(quán)限控制寄存器,開啟所述快閃存儲(chǔ)器的所述P1區(qū)的擦除和寫入權(quán)限;
[0027]VII1.將所述快閃存儲(chǔ)器的所述P1區(qū)擦除,擦除完成后寫入新的所述固件文件中待升級(jí)的所述程序代碼;
[0028]IX.待升級(jí)的所述程序代碼寫入完成后回讀,與原始文件進(jìn)行對(duì)比,確認(rèn)無誤;
[0029]X.固件升級(jí)完成,所述微處理器重新上電后,所述P1區(qū)恢復(fù)成只讀權(quán)限,新的所述程序代碼生效。
[0030]可選地,如果上述步驟V中的所述完整性校驗(yàn)或者上述步驟VI中的所述密鑰校驗(yàn)單元校驗(yàn)失敗,則所述程序代碼保護(hù)方法直接結(jié)束。
[0031]可選地,在上述步驟VI中,所述升級(jí)控制密鑰并不顯式存在于待升級(jí)的所述程序代碼當(dāng)中,而是通過不可見的方式直接傳遞到所述密鑰校驗(yàn)單元中進(jìn)行校驗(yàn)。
[0032]可選地,所述升級(jí)控制密鑰是先從待升級(jí)的所述固件文件中讀取到內(nèi)存變量當(dāng)中,然后傳遞給所述密鑰校驗(yàn)單元。
[0033]可選地,所述密鑰校驗(yàn)單元中除了包括一組所述臨時(shí)權(quán)限控制寄存器外,還包括一個(gè)控制模塊和一組待校驗(yàn)密鑰寄存器;
[0034]其中,所述控制模塊負(fù)責(zé)整個(gè)所述密鑰校驗(yàn)單元的開啟和關(guān)閉、校驗(yàn)用密鑰以及校驗(yàn)機(jī)制的設(shè)定,所述控制模塊由所述快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制;
[0035]應(yīng)用程序?qū)⒋r?yàn)的所述升級(jí)控制密鑰寫入所述待校驗(yàn)密鑰寄存器之后,所述密鑰校驗(yàn)單元自動(dòng)將待校驗(yàn)的所述升級(jí)控制密鑰與所述控制模塊內(nèi)預(yù)設(shè)的所述校驗(yàn)用密鑰通過預(yù)設(shè)的所述校驗(yàn)機(jī)制進(jìn)行校驗(yàn);
[0036]當(dāng)校驗(yàn)通過后,所述應(yīng)用程序通過設(shè)置所述臨時(shí)權(quán)限控制寄存器,修改所述快閃存儲(chǔ)器的資料區(qū)的臨時(shí)操作權(quán)限。
[0037]可選地,密鑰校驗(yàn)單元系由硬件實(shí)現(xiàn)。
[0038]可選地,待升級(jí)的所述固件文件的生成方式包括:
[0039]所述產(chǎn)品的廠商利用專用方法生成待升級(jí)的所述固件文件,所述固件文件當(dāng)中包括新的應(yīng)用程序代碼和所述升級(jí)控制密鑰;
[0040]所述升級(jí)控制密鑰采用專用方法產(chǎn)生,同時(shí)用于所述程序代碼的完整性校驗(yàn)和所述微處理器中的所述密鑰校驗(yàn)單元的校驗(yàn)。
[0041]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0042]本發(fā)明提出的針對(duì)采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,可有效實(shí)現(xiàn)如下兩點(diǎn):
[0043]1.通過內(nèi)建的密鑰校驗(yàn)單元配合相應(yīng)的軟件使用方法,可有效解決采用快閃存儲(chǔ)器的微處理器容易發(fā)生的因?yàn)橥獠扛蓴_而導(dǎo)致的程序破壞或者資料丟失的嚴(yán)重問題。
[0044]2.此外,還能在較大程度上有效地保護(hù)原始代碼不被惡意讀出竊取。
[0045]總而言之,本發(fā)明提出的代碼保護(hù)方法可以從根本上解決前述現(xiàn)有技術(shù)中的不足,并且設(shè)計(jì)的復(fù)雜度彈性較大,對(duì)原有硬件設(shè)計(jì)修改很小,對(duì)整體系統(tǒng)成本幾乎沒有影響。
【專利附圖】
【附圖說明】
[0046]本發(fā)明的上述的以及其他的特征、性質(zhì)和優(yōu)勢(shì)將通過下面結(jié)合附圖和實(shí)施例的描述而變得更加明顯,其中:
[0047]圖1為本發(fā)明一個(gè)實(shí)施例的采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法的流程示意圖;
[0048]圖2A至圖2B為本發(fā)明另一個(gè)實(shí)施例的采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法的流程示意圖。
【具體實(shí)施方式】
[0049]下面結(jié)合具體實(shí)施例和說明書附圖對(duì)本發(fā)明作進(jìn)一步說明,在以下的描述中闡述了更多的細(xì)節(jié)以便于充分理解本發(fā)明,但是本發(fā)明顯然能夠以多種不同于此描述的其它方式來實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下根據(jù)實(shí)際應(yīng)用情況作類似推廣、演繹,因此不應(yīng)以此具體實(shí)施例的內(nèi)容限制本發(fā)明的保護(hù)范圍。
[0050]微處理器(MOT)在上電時(shí),可進(jìn)入兩種特定模式,ModeO模式和Model模式。其中,MCU上電默認(rèn)進(jìn)入Model模式,而ModeO模式必須通過特定方式才能進(jìn)入,該方式主要用于批量生產(chǎn)時(shí),配合MCU原廠提供的燒寫工具使用。具體說明如下:
[0051]MCU的Flash程序存儲(chǔ)器(以下統(tǒng)一用Flash指代)具有參數(shù)區(qū)和資料區(qū)兩個(gè)區(qū)域。
[0052]在ModeO模式下,F(xiàn)lash的這兩個(gè)區(qū)域都具有完全的擦除和寫如權(quán)限,但是沒有讀取的權(quán)限。
[0053]在ModeO模式下,MCU具有Flash燒寫校驗(yàn)功能模塊,因此不用通過將燒寫之后的內(nèi)容讀回進(jìn)行校驗(yàn)。
[0054]在ModeO模式下,對(duì)Flash的這兩個(gè)區(qū)域的操作都必須是全部擦除然后才能寫入。
[0055]在ModeO模式下,通過對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),實(shí)現(xiàn)Model模式下對(duì)整個(gè)Flash的資料區(qū)分別修改讀取、寫入和擦除三種操作權(quán)限的設(shè)置。
[0056]在ModeO模式下,通過對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),可將Flash的資料區(qū)劃分成多個(gè)區(qū)塊,然后分別針對(duì)每個(gè)區(qū)塊進(jìn)行Model模式下的操作權(quán)限的設(shè)置。
[0057]在Model模式下,F(xiàn)lash的資料區(qū)的操作權(quán)限由ModeO模式下對(duì)參數(shù)區(qū)寫入的特定參數(shù)決定。
[0058]在Model模式下,F(xiàn)lash的參數(shù)區(qū)只有只讀權(quán)限,無法通過修改參數(shù)區(qū)的內(nèi)容對(duì)Flash的資料區(qū)中各個(gè)區(qū)塊的操作權(quán)限進(jìn)行修改。
[0059]此外,MCU內(nèi)還設(shè)計(jì)了一個(gè)密鑰校驗(yàn)單元,該密鑰校驗(yàn)單元可以由硬件實(shí)現(xiàn),可包含一個(gè)控制模塊、一組待校驗(yàn)密鑰寄存器以及一組臨時(shí)權(quán)限控制寄存器。其中,控制模塊負(fù)責(zé)整個(gè)密鑰校驗(yàn)單元的開啟、關(guān)閉、校驗(yàn)用密鑰以及校驗(yàn)機(jī)制的設(shè)定,該控制模塊由Flash的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制;應(yīng)用程序?qū)⒋r?yàn)密鑰寫入待校驗(yàn)密鑰寄存器后,密鑰校驗(yàn)單元自動(dòng)將待校驗(yàn)密鑰與控制模塊內(nèi)預(yù)設(shè)的校驗(yàn)用密鑰通過預(yù)設(shè)校驗(yàn)機(jī)制進(jìn)行校驗(yàn);當(dāng)校驗(yàn)通過后,應(yīng)用程序可通過設(shè)置臨時(shí)權(quán)限控制寄存器,修改Flash資料區(qū)的臨時(shí)操作權(quán)限。
[0060]進(jìn)一步說明如下:
[0061 ] 在ModeO模式下,可通過對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),決定密鑰校驗(yàn)單元是否在Model模式下生效。
[0062]在ModeO模式下,可通過對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),針對(duì)整個(gè)Flash的資料區(qū)設(shè)置用于密鑰校驗(yàn)單元的校驗(yàn)用密鑰以及校驗(yàn)機(jī)制。
[0063]在ModeO模式下,可通過對(duì)Flash的參數(shù)區(qū)寫入特定參數(shù),針對(duì)Flash的資料區(qū)已劃分的不同區(qū)塊分別設(shè)置用于密鑰校驗(yàn)單元的校驗(yàn)用密鑰以及校驗(yàn)機(jī)制。
[0064]在Model模式下,由于Flash的參數(shù)區(qū)是只讀的,因此只能使用該密鑰校驗(yàn)單元的校驗(yàn)功能,而無法進(jìn)行該密鑰校驗(yàn)單元的開啟、關(guān)閉以及校驗(yàn)機(jī)制的設(shè)定。
[0065]在Model模式下,若已經(jīng)在ModeO模式下關(guān)閉該密鑰校驗(yàn)單元功能,則各Flash區(qū)塊的擦除和寫權(quán)限完全由ModeO模式下的設(shè)定決定。
[0066]在Model模式下,若已經(jīng)在ModeO模式下開啟該密鑰校驗(yàn)單元功能,則可以向密鑰校驗(yàn)單元的待校驗(yàn)密鑰寄存器寫入待校驗(yàn)密鑰進(jìn)行校驗(yàn),若密鑰校驗(yàn)成功,則可通過設(shè)置臨時(shí)權(quán)限控制寄存器,對(duì)Flash指定區(qū)塊的擦除和與權(quán)限進(jìn)行打開和關(guān)閉;若未進(jìn)行校驗(yàn)或校驗(yàn)失敗,則設(shè)置臨時(shí)權(quán)限控制寄存器無效。
[0067]在Model模式下,密鑰校驗(yàn)單元校驗(yàn)成功,并通過設(shè)置臨時(shí)權(quán)限控制寄存器修改了 Flash指定區(qū)塊的操作權(quán)限之后,如果MCU重新上電,則整個(gè)Flash的操作權(quán)限會(huì)恢復(fù)到初始狀態(tài),即恢復(fù)到ModeO模式下的初始設(shè)定。
[0068]需要注意的是,光是硬件上有上述設(shè)計(jì),并不足以實(shí)現(xiàn)代碼保護(hù),還需要軟件使用方法上的配合。
[0069]以下以具體例子進(jìn)行說明:
[0070]圖1為本發(fā)明一個(gè)實(shí)施例的采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法的流程示意圖。此程序代碼保護(hù)方法系針對(duì)廠商利用微處理器開發(fā)產(chǎn)品而燒錄程序代碼的階段下對(duì)程序代碼進(jìn)行保護(hù)。微處理器內(nèi)包括一個(gè)可以由硬件實(shí)現(xiàn)的密鑰校驗(yàn)單元。假設(shè)某廠商A用該Flash MCU開發(fā)了一款產(chǎn)品,生產(chǎn)燒錄時(shí)對(duì)程序代碼進(jìn)行保護(hù)的方法流程主要包括(如圖1所示):
[0071]執(zhí)行步驟S101,燒錄開始時(shí),通過特定的燒寫工具給微處理器上電,使微處理器進(jìn)入ModeO模式;
[0072]執(zhí)行步驟S102,對(duì)整個(gè)快閃存儲(chǔ)器的參數(shù)區(qū)和資料區(qū)進(jìn)行擦除操作;
[0073]執(zhí)行步驟S103,對(duì)快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將快閃存儲(chǔ)器的資料區(qū)劃分為P1、P2和P3共三個(gè)區(qū);
[0074]執(zhí)行步驟S104,分別對(duì)P1區(qū)和P2區(qū)進(jìn)行資料燒錄,其中P1區(qū)燒錄應(yīng)用程序代碼,P2區(qū)燒錄底層驅(qū)動(dòng)和固件升級(jí)控制代碼,P3區(qū)作為緩沖區(qū),不燒錄內(nèi)容,保持為空;
[0075]執(zhí)行步驟S105,對(duì)快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將P1區(qū)和P2區(qū)設(shè)定為Model模式下只讀,將P3區(qū)設(shè)定為Model模式下可讀、可寫和可擦除;
[0076]執(zhí)行步驟S106,對(duì)快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),開啟密鑰校驗(yàn)單元,并對(duì)P1區(qū)設(shè)定校驗(yàn)用密鑰以及校驗(yàn)機(jī)制。最后燒錄完成。
[0077]在本實(shí)施例中,該密鑰校驗(yàn)單元包括一個(gè)控制模塊、一組待校驗(yàn)密鑰寄存器以及一組臨時(shí)權(quán)限控制寄存器。其中,控制模塊負(fù)責(zé)整個(gè)密鑰校驗(yàn)單元的開啟和關(guān)閉、校驗(yàn)用密鑰以及校驗(yàn)機(jī)制的設(shè)定,控制模塊由快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制。
[0078]圖2A至圖2B為本發(fā)明另一個(gè)實(shí)施例的采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法的流程示意圖。此程序代碼保護(hù)方法系針對(duì)廠商利用微處理器開發(fā)的產(chǎn)品出廠后,用戶在使用過程中發(fā)現(xiàn)問題而需要進(jìn)行固件升級(jí)的階段下對(duì)程序代碼進(jìn)行保護(hù)。該微處理器內(nèi)包括一個(gè)可以由硬件實(shí)現(xiàn)的密鑰校驗(yàn)單元。假設(shè)產(chǎn)品出廠后,用戶在使用過程中發(fā)現(xiàn)問題,需要進(jìn)行固件升級(jí)。由于產(chǎn)品提供SD卡接口,用戶將待升級(jí)的固件存放于SD卡上即可進(jìn)行固件升級(jí)操作。如圖2A至圖2B所示,在該產(chǎn)品固件升級(jí)的階段下該程序代碼保護(hù)方法的流程主要包括:
[0079]執(zhí)行步驟S201,微處理器正常上電,此時(shí)其處于默認(rèn)的Model模式;
[0080]執(zhí)行步驟S202,等待并接受用戶選擇新的固件文件,進(jìn)行固件升級(jí)操作;
[0081]執(zhí)行步驟S203,微處理器運(yùn)行快閃存儲(chǔ)器的P2區(qū)中的固件升級(jí)控制代碼;
[0082]執(zhí)行步驟S204,微處理器讀取待升級(jí)的固件文件的內(nèi)容,并取出升級(jí)控制密鑰;
[0083]執(zhí)行步驟S205,讀取固件文件中待升級(jí)的程序代碼,并和升級(jí)控制密鑰進(jìn)行軟件方式的完整性校驗(yàn);
[0084]執(zhí)行步驟S206,完整性校驗(yàn)成功后,再將升級(jí)控制密鑰讀出傳遞給密鑰校驗(yàn)單元進(jìn)行硬件校驗(yàn);
[0085]執(zhí)行步驟S207,密鑰校驗(yàn)單元校驗(yàn)成功后,設(shè)置密鑰校驗(yàn)單元中的臨時(shí)權(quán)限控制寄存器,開啟快閃存儲(chǔ)器的P1區(qū)的擦除和寫入權(quán)限;
[0086]執(zhí)行步驟S208,將快閃存儲(chǔ)器的P1區(qū)擦除,擦除完成后寫入新的固件文件中待升級(jí)的程序代碼;
[0087]執(zhí)行步驟S209,待升級(jí)的程序代碼寫入完成后回讀,與原始文件進(jìn)行對(duì)比,確認(rèn)無誤;
[0088]執(zhí)行步驟S210,固件升級(jí)完成,微處理器重新上電后,P1區(qū)恢復(fù)成只讀權(quán)限,新的程序代碼生效。
[0089]在本實(shí)施例中,如果上述步驟S205中的完整性校驗(yàn)或者上述步驟S206中的密鑰校驗(yàn)單元校驗(yàn)失敗,則該程序代碼保護(hù)方法直接結(jié)束。
[0090]在本實(shí)施例中,在上述步驟S206中,升級(jí)控制密鑰并不顯式存在于待升級(jí)的程序代碼當(dāng)中,而是通過不可見的方式通過數(shù)據(jù)通道直接傳遞到密鑰校驗(yàn)單元中進(jìn)行校驗(yàn)。例如,升級(jí)控制密鑰是先從待升級(jí)的固件文件中讀取到內(nèi)存變量當(dāng)中,然后傳遞給密鑰校驗(yàn)單元。
[0091]另外,在本實(shí)施例中,該密鑰校驗(yàn)單元中除了包括一組臨時(shí)權(quán)限控制寄存器外,還包括一個(gè)控制模塊和一組待校驗(yàn)密鑰寄存器。
[0092]其中,控制模塊負(fù)責(zé)整個(gè)密鑰校驗(yàn)單元的開啟和關(guān)閉、校驗(yàn)用密鑰以及校驗(yàn)機(jī)制的設(shè)定,控制模塊由快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制;
[0093]應(yīng)用程序?qū)⒋r?yàn)的升級(jí)控制密鑰寫入待校驗(yàn)密鑰寄存器之后,密鑰校驗(yàn)單元自動(dòng)將待校驗(yàn)的升級(jí)控制密鑰與控制模塊內(nèi)預(yù)設(shè)的校驗(yàn)用密鑰通過預(yù)設(shè)的校驗(yàn)機(jī)制進(jìn)行校驗(yàn);
[0094]當(dāng)校驗(yàn)通過后,應(yīng)用程序通過設(shè)置臨時(shí)權(quán)限控制寄存器,修改快閃存儲(chǔ)器的資料區(qū)的臨時(shí)操作權(quán)限。
[0095]在本實(shí)施例中,待升級(jí)的固件文件的生成方式包括:
[0096]a.產(chǎn)品的廠商利用專用方法生成待升級(jí)的固件文件,固件文件當(dāng)中包括新的應(yīng)用程序代碼和升級(jí)控制密鑰;
[0097]b.升級(jí)控制密鑰采用專用方法產(chǎn)生,同時(shí)用于程序代碼的完整性校驗(yàn)和微處理器中的密鑰校驗(yàn)單元的校驗(yàn)。
[0098]由以上過程可以看到:
[0099]1.正常應(yīng)用過程中,假如MCU因?yàn)槭艿礁蓴_或其他異常導(dǎo)致執(zhí)行的指令跳轉(zhuǎn)到固件升級(jí)控制代碼區(qū),并執(zhí)行對(duì)Flash的擦除或?qū)懭氩僮?,將因?yàn)镻1區(qū)和P2區(qū)均被設(shè)定為只讀而不會(huì)成功。并且,因?yàn)槊荑€并非預(yù)留在程序代碼當(dāng)中,所以也不會(huì)因?yàn)閳?zhí)行了傳遞密鑰給密鑰校驗(yàn)單元的過程,而導(dǎo)致密鑰校驗(yàn)通過。
[0100]2.在正常固件升級(jí)的過程中,假如MCU因受到干擾,導(dǎo)致擦除和寫入的地址被干擾,變成處于Flash的P2區(qū)的地址范圍,也會(huì)因?yàn)镻2區(qū)是只讀區(qū)而不會(huì)被誤擦除和改寫。
[0101]再來看一下版權(quán)保護(hù)方面的例子:
[0102]假設(shè)廠商A的產(chǎn)品因?yàn)榇笫軞g迎而引起了廠商B的注意,廠商B分析發(fā)現(xiàn)該產(chǎn)品所有的部件包括MCU都可以直接采購得到,但是真正有價(jià)值的是MCU中的程序代碼。由于該MCU是采用Flash的,且該產(chǎn)品提供了固件升級(jí)功能,于是廠商B試圖采取下列幾種方法,惡意竊取廠商A的程序代碼:
[0103]1.首先,因?yàn)镸odeO模式下只能燒寫,不能讀取,因此廠商B無法直接通過該ModeO模式讀取廠商A的產(chǎn)品當(dāng)中Flash的內(nèi)容。
[0104]2.其次,廠商B試圖通過ModeO模式燒入自己生成的一小段程序代碼,通過運(yùn)行該段代碼實(shí)現(xiàn)對(duì)MCU當(dāng)中未被燒錄時(shí)覆蓋的其他大部分代碼進(jìn)行竊取。但是因?yàn)樵贛odeO模式下,燒入是整個(gè)Flash區(qū)域全部擦除后再燒錄的過程,所以會(huì)導(dǎo)致廠商B在燒入自己的代碼之前,MCU中廠商A的原始代碼已經(jīng)被擦除。
[0105]3.再次,由于固件是用戶就可以拿到的,廠商B已成功分析出固件的結(jié)構(gòu)、新的程序代碼以及相應(yīng)的升級(jí)控制密鑰的內(nèi)容,廠商B將自己的一小段代碼做成一個(gè)自定義固件,并植入之前提取的升級(jí)控制密鑰,試圖通過固件升級(jí)的方式燒錄到MCU的Flash當(dāng)中。但是在升級(jí)過程中,由于自己的程序代碼與之前提取的升級(jí)控制密鑰并不匹配,MCU內(nèi)的固件升級(jí)的環(huán)節(jié)在軟件密鑰校驗(yàn)時(shí)無法通過。
[0106]4.最后,最終廠商B通過分析原始固件中的程序代碼和升級(jí)控制密鑰,成功破解了軟件密鑰校驗(yàn)的算法,自行生成了自己的代碼對(duì)應(yīng)的升級(jí)控制密鑰,生成自己的固件,再次試圖通過固件升級(jí)方式燒錄到MCU的Flash當(dāng)中,但是在升級(jí)過程中,由于硬件密鑰校驗(yàn)不通過,最終仍失敗。
[0107]從上述例子可以看到,固件升級(jí)功能,只能用于廠商A自己的固件升級(jí),其他第三方無法通過該功能實(shí)現(xiàn)代碼植入和后續(xù)的竊取動(dòng)作,有效的保護(hù)了程序代碼的版權(quán)。
[0108]綜上所述,本發(fā)明的核心思想是:MCU上電時(shí),可通過一定方式進(jìn)入兩種特定模式,ModeO模式和Model模式。這兩種模式下,對(duì)MCU當(dāng)中Flash程序存儲(chǔ)器的讀寫和擦除的權(quán)限設(shè)定是不同的,其中Model模式的權(quán)限受控于ModeO模式。Model模式下被設(shè)定為只讀模式后,可通過硬件密鑰校驗(yàn)的方式打開擦除和寫如操作的權(quán)限,該密鑰校驗(yàn)的校驗(yàn)設(shè)定可在ModeO模式下設(shè)定。
[0109]在Model模式下,升級(jí)控制密鑰并不顯示存在于程序代碼當(dāng)中,而是通過不可見的數(shù)據(jù)通道直接傳遞給密鑰校驗(yàn)單元進(jìn)行校驗(yàn),可有效防止程序指令因異常執(zhí)行導(dǎo)致打開了程序存儲(chǔ)器的擦除和寫入權(quán)限,進(jìn)而導(dǎo)致的代碼損壞問題。
[0110]由于在ModeO模式下可設(shè)定密鑰校驗(yàn)單元的校驗(yàn)機(jī)制,程序代碼的原始廠商可以通過設(shè)定自己的校驗(yàn)機(jī)制,實(shí)現(xiàn)了只有自己生成的程序代碼,才允許被寫入到MCU的程序存儲(chǔ)器當(dāng)中的目的。第三方人員由于無法得知具體的校驗(yàn)機(jī)制,無法實(shí)現(xiàn)打開寫入操作權(quán)限植入自己的程序代碼,實(shí)現(xiàn)讀取原始代碼或者其他破壞性動(dòng)作,從而起到了代碼版權(quán)保護(hù)的作用。
[0111]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0112]本發(fā)明提出的針對(duì)采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,可有效實(shí)現(xiàn)如下兩點(diǎn):
[0113]1.通過內(nèi)建的密鑰校驗(yàn)單元配合相應(yīng)的軟件使用方法,可有效解決采用快閃存儲(chǔ)器的微處理器容易發(fā)生的因?yàn)橥獠扛蓴_而導(dǎo)致的程序破壞或者資料丟失的嚴(yán)重問題。
[0114]2.此外,還能在較大程度上有效地保護(hù)原始代碼不被惡意讀出竊取。
[0115]總而言之,本發(fā)明提出的代碼保護(hù)方法可以從根本上解決前述現(xiàn)有技術(shù)中的不足,并且設(shè)計(jì)的復(fù)雜度彈性較大,對(duì)原有硬件設(shè)計(jì)修改很小,對(duì)整體系統(tǒng)成本幾乎沒有影響。
[0116]本發(fā)明雖然以較佳實(shí)施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以做出可能的變動(dòng)和修改。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何修改、等同變化及修飾,均落入本發(fā)明權(quán)利要求所界定的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,所述微處理器內(nèi)包括一密鑰校驗(yàn)單元;所述程序代碼保護(hù)方法系針對(duì)廠商利用所述微處理器開發(fā)產(chǎn)品而燒錄程序代碼的階段下對(duì)所述程序代碼進(jìn)行保護(hù),其包括步驟: A.燒錄開始時(shí),通過特定的燒寫工具給所述微處理器上電,使所述微處理器進(jìn)入ModeO模式; B.對(duì)整個(gè)所述快閃存儲(chǔ)器的參數(shù)區(qū)和資料區(qū)進(jìn)行擦除操作; C.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將所述快閃存儲(chǔ)器的資料區(qū)劃分為P1、P2和P3共三個(gè)區(qū); D.分別對(duì)所述Pl區(qū)和所述P2區(qū)進(jìn)行資料燒錄,其中所述Pl區(qū)燒錄應(yīng)用程序代碼,所述P2區(qū)燒錄底層驅(qū)動(dòng)和固件升級(jí)控制代碼,所述P3區(qū)作為緩沖區(qū),不燒錄內(nèi)容,保持為空; E.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),將所述Pl區(qū)和所述P2區(qū)設(shè)定為Model模式下只讀,將所述P3區(qū)設(shè)定為Model模式下可讀、可寫和可擦除; F.對(duì)所述快閃存儲(chǔ)器的參數(shù)區(qū)寫入特定參數(shù),開啟所述密鑰校驗(yàn)單元,并對(duì)所述Pl區(qū)設(shè)定校驗(yàn)用密鑰以及校驗(yàn)機(jī)制。
2.根據(jù)權(quán)利要求1所述的程序代碼保護(hù)方法,其特征在于,所述密鑰校驗(yàn)單元包括一個(gè)控制模塊、一組待校驗(yàn)密鑰寄存器以及一組臨時(shí)權(quán)限控制寄存器; 其中,所述控制模塊負(fù)責(zé)整個(gè)所述密鑰校驗(yàn)單元的開啟和關(guān)閉、所述校驗(yàn)用密鑰以及所述校驗(yàn)機(jī)制的設(shè)定,所述控制模塊由所述快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制。
3.根據(jù)權(quán)利要求2所述的程序代碼保護(hù)方法,其特征在于,所述密鑰校驗(yàn)單元系由硬件實(shí)現(xiàn)。
4.一種采用快閃存儲(chǔ)器的微處理器的程序代碼保護(hù)方法,所述微處理器內(nèi)包括一密鑰校驗(yàn)單元;所述程序代碼保護(hù)方法系針對(duì)產(chǎn)品出廠后,用戶在使用過程中發(fā)現(xiàn)問題而需要進(jìn)行固件升級(jí)的階段下對(duì)程序代碼進(jìn)行保護(hù),其包括步驟: 1.所述微處理器正常上電,此時(shí)其處于默認(rèn)的Model模式; I1.等待并接受用戶選擇新的固件文件,進(jìn)行固件升級(jí)操作; II1.所述微處理器運(yùn)行所述快閃存儲(chǔ)器的所述P2區(qū)中的固件升級(jí)控制代碼; IV.所述微處理器讀取待升級(jí)的所述固件文件的內(nèi)容,并取出升級(jí)控制密鑰; V.讀取所述固件文件中待升級(jí)的所述程序代碼,并和所述升級(jí)控制密鑰進(jìn)行軟件方式的完整性校驗(yàn); V1.所述完整性校驗(yàn)成功后,再將所述升級(jí)控制密鑰讀出傳遞給所述密鑰校驗(yàn)單元進(jìn)行硬件校驗(yàn); VI1.所述密鑰校驗(yàn)單元校驗(yàn)成功后,設(shè)置所述密鑰校驗(yàn)單元中的臨時(shí)權(quán)限控制寄存器,開啟所述快閃存儲(chǔ)器的所述Pl區(qū)的擦除和寫入權(quán)限; VII1.將所述快閃存儲(chǔ)器的所述Pl區(qū)擦除,擦除完成后寫入新的所述固件文件中待升級(jí)的所述程序代碼; IX.待升級(jí)的所述程序代碼寫入完成后回讀,與原始文件進(jìn)行對(duì)比,確認(rèn)無誤; X.固件升級(jí)完成,所述微處理器重新上電后,所述Pi區(qū)恢復(fù)成只讀權(quán)限,新的所述程序代碼生效。
5.根據(jù)權(quán)利要求4所述的程序代碼保護(hù)方法,其特征在于,如果上述步驟V中的所述完整性校驗(yàn)或者上述步驟VI中的所述密鑰校驗(yàn)單元校驗(yàn)失敗,則所述程序代碼保護(hù)方法直接結(jié)束。
6.根據(jù)權(quán)利要求5所述的程序代碼保護(hù)方法,其特征在于,在上述步驟VI中,所述升級(jí)控制密鑰并不顯式存在于待升級(jí)的所述程序代碼當(dāng)中,而是通過不可見的方式直接傳遞到所述密鑰校驗(yàn)單元中進(jìn)行校驗(yàn)。
7.根據(jù)權(quán)利要求6所述的程序代碼保護(hù)方法,其特征在于,所述升級(jí)控制密鑰是先從待升級(jí)的所述固件文件中讀取到內(nèi)存變量當(dāng)中,然后傳遞給所述密鑰校驗(yàn)單元。
8.根據(jù)權(quán)利要求7所述的程序代碼保護(hù)方法,其特征在于,所述密鑰校驗(yàn)單元中除了包括一組所述臨時(shí)權(quán)限控制寄存器外,還包括一個(gè)控制模塊和一組待校驗(yàn)密鑰寄存器; 其中,所述控制模塊負(fù)責(zé)整個(gè)所述密鑰校驗(yàn)單元的開啟和關(guān)閉、校驗(yàn)用密鑰以及校驗(yàn)機(jī)制的設(shè)定,所述控制模塊由所述快閃存儲(chǔ)器的參數(shù)區(qū)的相關(guān)設(shè)置進(jìn)行控制; 應(yīng)用程序?qū)⒋r?yàn)的所述升級(jí)控制密鑰寫入所述待校驗(yàn)密鑰寄存器之后,所述密鑰校驗(yàn)單元自動(dòng)將待校驗(yàn)的所述升級(jí)控制密鑰與所述控制模塊內(nèi)預(yù)設(shè)的所述校驗(yàn)用密鑰通過預(yù)設(shè)的所述校驗(yàn)機(jī)制進(jìn)行校驗(yàn); 當(dāng)校驗(yàn)通過后,所述應(yīng)用程序通過設(shè)置所述臨時(shí)權(quán)限控制寄存器,修改所述快閃存儲(chǔ)器的資料區(qū)的臨時(shí)操作權(quán)限。
9.根據(jù)權(quán)利要求8所述的程序代碼保護(hù)方法,其特征在于,密鑰校驗(yàn)單元系由硬件實(shí)現(xiàn)。
10.根據(jù)權(quán)利要求4所述的程序代碼保護(hù)方法,其特征在于,待升級(jí)的所述固件文件的生成方式包括: 所述產(chǎn)品的廠商利用專用方法生成待升級(jí)的所述固件文件,所述固件文件當(dāng)中包括新的應(yīng)用程序代碼和所述升級(jí)控制密鑰; 所述升級(jí)控制密鑰采用專用方法產(chǎn)生,同時(shí)用于所述程序代碼的完整性校驗(yàn)和所述微處理器中的所述密鑰校驗(yàn)單元的校驗(yàn)。
【文檔編號(hào)】G06F21/78GK104268448SQ201410534831
【公開日】2015年1月7日 申請(qǐng)日期:2014年10月11日 優(yōu)先權(quán)日:2014年10月11日
【發(fā)明者】張欽 申請(qǐng)人:中穎電子股份有限公司