專利名稱:存儲卡控制器固件的硬件驅(qū)動器完整性檢查的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體上涉及具有安全內(nèi)容的存儲卡和所述內(nèi)容的加密,且具體涉及運行安全 存儲卡的固件的完整性的檢驗。
背景技術(shù):
至關(guān)重要的是能夠在商業(yè)上可購得的存儲卡離開工廠之前對其功能性進(jìn)行檢驗,且 確保所述卡一旦離開工廠就沒有受黑客襲擊的危險。隨著數(shù)字版權(quán)管理的出現(xiàn)和受保護 內(nèi)容(例如音樂和電影等)的傳播,需要確??ǖ膬?nèi)容不能被隨意復(fù)制。黑客可能試圖 這樣做的一種方式是更改或甚至替換運行存儲卡的固件,以便能夠非法翻印卡的內(nèi)容。 因此,必需提供一種系統(tǒng),其一直確保在卡上運行的固件的完整性和可靠性兩者。發(fā)明內(nèi)容檢驗固件的完整性是運行安全且可靠的存儲卡的一個重要方面。本發(fā)明檢驗運行存 儲卡、通用串行總線(USB)快閃驅(qū)動器或其它存儲器系統(tǒng)的固件的完整性。在固件被 執(zhí)行之間檢驗固件的完整性。這防止執(zhí)行非工廠固件的固件。此特別重要之處在于,工 廠固件包括安全機制,其包含意在保護內(nèi)容不被隨意復(fù)制的加密算法。本發(fā)明在存儲卡 中實施時,防止所述卡運行可能允許復(fù)制安全內(nèi)容的非工廠固件或經(jīng)更改的工廠固件。 因此,黑客不能"誘使"所述卡運行錯誤的固件。所述檢驗過程還可用來檢驗任何所存 儲數(shù)據(jù)的完整性。本發(fā)明的一個方面涉及一種用于啟動存儲器存儲裝置的操作的方法,其包括在裝置 的大容量存儲單元中提供固件,使所述固件通過加密引擎,用所述加密引擎計算固件的 散列值,將計算出的散列值與所存儲的散列值進(jìn)行比較,且如果計算出的散列值與所存 儲的散列值匹配,那么執(zhí)行所述固件。本發(fā)明的另一方面涉及大容量存儲裝置,其包括快閃存儲器;只讀存儲器;第一 組指令,其控制所述大容量存儲裝置的數(shù)據(jù)存儲操作,所述第一組存儲在快閃存儲器中; 第二組指令,其將第一組指令從閃存投影到可執(zhí)行的隨機存取存儲器,所述第二組駐存 在只讀存儲器中。加密引擎在大容量存儲裝置的硬件電路中實施,且能夠?qū)⒁鎯υ诳扉W存儲器中和從快閃存儲器讀取的數(shù)據(jù)進(jìn)行加密和解密。加密引擎可操作以檢驗第一 組指令的完整性。本發(fā)明的又一方面涉及另一種用于啟動存儲器存儲裝置的操作的方法。所述方法包 括在裝置的大容量存儲單元中提供固件;以及在只讀存儲器中執(zhí)行第一組指令,其將 固件從大容量存儲單元復(fù)制到隨機存取存儲器。所述方法還包括使用加密引擎來檢驗引 導(dǎo)固件的完整性,且在完整性被檢驗之后,用微處理器執(zhí)行來自隨機存取存儲器的固件。本發(fā)明的額外方面、優(yōu)勢和特征包含在本發(fā)明的示范性實例的以下描述內(nèi)容中,所 述描述內(nèi)容應(yīng)結(jié)合附圖考慮,且其中在圖中始終使用相同標(biāo)號來描述相同特征,除非另 有指示。本文所參考的所有專利、專利申請案、文章和其它出版物的全文出于所有目的 以引用的方式并入本文中。
圖1A是根據(jù)本發(fā)明實施例的系統(tǒng)IO的示意圖。 圖1B是根據(jù)本發(fā)明另一實施例的系統(tǒng)IO的示意圖。 圖2是圖1中所示的快閃存儲器的存儲器空間的圖。 圖3是引導(dǎo)載入程序200a的示意性說明。圖4是包含對固件的基于硬件的完整性檢查的引導(dǎo)過程的一部分的流程圖。 圖5是圖4的完整性檢驗過程410的流程圖。 圖6是引導(dǎo)期間硬件回路的流程圖。 圖7是引導(dǎo)期間固件回路的流程圖。
具體實施方式
消息認(rèn)證碼("MAC")是從一些內(nèi)容(或消息)計算出的用于證實內(nèi)容的完整性的 編號。其目的是檢測內(nèi)容是否已經(jīng)被更改。消息認(rèn)證碼是從消息和一些機密數(shù)據(jù)計算出 的散列(hash)。在不知道機密數(shù)據(jù)的情況下,難以進(jìn)行偽造。使用基于DES或AES加 密法(其使用密鑰)的算法來計算MAC。接著使MAC與消息一起存儲或發(fā)送。接收者 使用同一算法和密鑰來重新計算MAC,并將其與所存儲或發(fā)送的一者進(jìn)行比較。如果它 們是相同的,那么假定內(nèi)容或消息尚未被篡改。DES (數(shù)據(jù)加密標(biāo)準(zhǔn))是使用56位密鑰的NIST標(biāo)準(zhǔn)密碼加密法。1977年由NIST 所采用,其在2001年被AES取代作為官方標(biāo)準(zhǔn)。DES是以四種不同的操作模式對64位區(qū)塊進(jìn)行處理的對稱區(qū)塊加密法,其中電子代碼書(ECB)是最普遍的。三重DES通過添加若干多遍方法來增加安全性;舉例來說,用一個密鑰進(jìn)行加密, 用第二密鑰對結(jié)果進(jìn)行解密,且用第三密鑰再次對其進(jìn)行加密。然而,額外的遍數(shù)給過 程增添了相當(dāng)多的計算時間。在不要求最強安全性的應(yīng)用中仍使用DES。高級加密標(biāo)準(zhǔn)("AES")是使用128位的區(qū)塊長度和128、 192或256位的密鑰長度 的NIST標(biāo)準(zhǔn)密碼加密法。在2001年正式取代三重DES方法,AES使用由比利時的Joan Daemen和Vincent Rijmen開發(fā)的Rijndael算法。可在一遍而不是三遍中對AES進(jìn)行加密, 且其密鑰大小大于三重DES的168個位。安全散列算法(SHA-1)產(chǎn)生20字節(jié)輸出。NIST和NSA將其設(shè)計為與數(shù)字簽名標(biāo) 準(zhǔn)一起使用,且其現(xiàn)在被廣泛使用。MD5是可與本發(fā)明一起使用的另一散列函數(shù)。前面 提及的標(biāo)準(zhǔn)和各種其它算法是可與本發(fā)明一起利用的散列函數(shù)和值的說明性實例。如今 可用且將來會開發(fā)的其它類型的散列函數(shù)和值可與本發(fā)明一起利用。盡管前面提及的標(biāo)準(zhǔn)和各種其它算法和/或標(biāo)準(zhǔn)是密碼學(xué)領(lǐng)域的技術(shù)人員眾所周知 的,但以下出版物是提供信息的,且全文以引用的方式并入本文中/ FC 3566 - 77^ A五S-XC5C-A/AC-9(5 /4/go〃'Am f/"附 Zi /尸wc, Sheila Frankel, NIST—NationalInstitute of Standards and Technology, Gaithersburg, West Diamond路820號,677室, MD 20899,詳見http:〃www.faqs.org/rfcs/rfc3566.html; /Vr/。rma"ce Comp。"、c " o/Mesrage /\wf/iew"'caf!'o CWe (MAC) AZgcm'f/unrS1/or f/ie Mfemef尸rofocoZ Secim'ty Janaka Deepakumara、 Howard M. Heys禾口 R. Venkatesan, Electrical and Computer Engineering, Memorial University of Newfoundland, St. John's, NL , Canada, A1B3S7 , 詳見 http:〃www.engr.mun.ca/~howard/PAPERS/necec 2003b.pdf ; 以及 Cme"w ro AWr con"rm'ng A£S ModesOperan'oA Swgge5t/cm /or /fa打cf""g Ar&1'加A7-Le豐Zi vWf/i C5C MAC, University of Nevada, Reno, Phillip Rogaway, University of California at Davis, 詳見http:〃csrc,nist.gov/CrvptoToolkit/modes/proposedmodes/xcbc-mac/ xcbc-mac-spec.pdf。存儲器系統(tǒng)結(jié)構(gòu)圖1A的框圖說明可實施本發(fā)明的各個方面的示范性存儲器系統(tǒng)。如圖1A所示,存 儲器系統(tǒng)IO包含中央處理單元(CPU)或"控制器"12、緩沖管理單元(BMU) 14、主 機接口模塊(HIM) 16、快閃接口模塊(FIM) 18、快閃存儲器20和外圍存取模塊22。 存儲器系統(tǒng)10通過主機接口總線26和端口 26a與主機裝置24通信。快閃存儲器20(其 可以是"與非"型)為主機裝置24提供數(shù)據(jù)存儲。用于CPU 12的軟件代碼也可存儲在快閃存儲器20中。FIM 18通過快閃接口總線28且在一些情況下(如果快閃存儲器20 是可移除組件)通過端口 (未圖示)連接到快閃存儲器20。 HIM 16適合連接到主機系統(tǒng), 例如數(shù)字相機、個人計算機、個人數(shù)字助理(PDA)和MP-3播放器、蜂窩式電話或其它 數(shù)字裝置。外圍存取模塊22選擇適當(dāng)?shù)目刂破髂K(例如FIM、 HIM和BMU)來與CPU 12通信。在一個實施例中,系統(tǒng)10的在虛線框內(nèi)的所有組件可被封圍在單個單元中, 例如封圍在存儲卡中,且優(yōu)選封圍在所述卡中。緩沖管理單元14包括主機直接存儲器存取單元(HDMA) 32、快閃直接存儲器存取 單元(FDMA) 34、仲裁器36、 CPU總線仲裁器35、寄存器33、固件完整性電路(FWIC) 31、緩沖隨機存取存儲器(BRAM) 38和密碼引擎40 (也被稱為加密引擎40)。仲裁器 36是共享總線仲裁器,使得任何時候都只有一個主裝置或起始器(其可以是HDMA32、 FDMA34或CPU 12)可活動,且從屬裝置或目標(biāo)是BRAM 38。仲裁器負(fù)責(zé)將適當(dāng)?shù)钠?始器請求引導(dǎo)到BRAM 38。 HDMA32和FDMA 34負(fù)責(zé)在HIM 16、 FIM 18和BRAM 38 或RAM 11之間輸送的數(shù)據(jù)。CPU總線仲裁器35允許數(shù)據(jù)經(jīng)由系統(tǒng)總線15直接從密碼 引擎40和快閃DMA34傳送到RAM 11,系統(tǒng)總線15在某些情況下使用,例如當(dāng)需要繞 過密碼引擎時。HDMA 32和FDMA 34的操作是常規(guī)的,且不需要在本文中詳細(xì)描述。 使用BRAM 38來存儲主機裝置24與快閃存儲器20之間傳遞的數(shù)據(jù)。HDMA 32和FDMA 34負(fù)責(zé)在HIM 16/FIM 18與BRAM 38或CPU RAM 12a之間傳遞數(shù)據(jù),且負(fù)責(zé)指示區(qū)段 完成。當(dāng)來自快閃存儲器20的數(shù)據(jù)由主機裝置24讀取時,通過總線28、 FIM 18、 FDMA 34 和密碼引擎40來獲取存儲器20中的經(jīng)加密數(shù)據(jù),其中經(jīng)加密數(shù)據(jù)被解密并存儲在BRAM 38中。接著,經(jīng)解密數(shù)據(jù)從BRAM38通過HDMA32、 HIM 16和總線26發(fā)送到主機裝 置24。從BRAM 38獲取的數(shù)據(jù)在被傳遞到HDMA32之前,可再次借助密碼引擎40進(jìn) 行加密,使得發(fā)送到主機裝置24的數(shù)據(jù)再次被加密,但所借助的密鑰和/或算法與存儲 在存儲器20中的數(shù)據(jù)借以加密的密鑰和/或算法不同?;蛘?,不是在上文所述的過程中 將經(jīng)解密的數(shù)據(jù)存儲在BRAM38中(所述數(shù)據(jù)可能變得易于遭受未經(jīng)授權(quán)的存取),而 是在將來自存儲器20的數(shù)據(jù)發(fā)送到BRAM 38之前可對其進(jìn)行解密并再次由密碼引擎40 加密。接著,像之前那樣,將BRAM 38中的經(jīng)加密數(shù)據(jù)發(fā)送到主機裝置24。這說明讀 取過程期間的數(shù)據(jù)流。當(dāng)數(shù)據(jù)由主機裝置24寫入到存儲器20時,數(shù)據(jù)流的方向顛倒。舉例來說,如果未 經(jīng)加密的數(shù)據(jù)由主機裝置發(fā)送,通過總線26、 HIM 16、 HDMA 32,到達(dá)密碼引擎40,那么所述數(shù)據(jù)可在存儲在BRAM 38中之前由引擎40加密?;蛘?,未經(jīng)加密的數(shù)據(jù)可存 儲在BRAM38中。接著,在數(shù)據(jù)被發(fā)送到FDMA34之前在其去往存儲器20的途中,對 所述數(shù)據(jù)進(jìn)行加密。圖1B說明系統(tǒng)IO的另一實施例。在此優(yōu)選實施例中,將加密引擎40和固件完整性 電路31展示為控制器12的一部分。雖然這些組件作為控制器的一部分是優(yōu)選的,但在 某些實施例中,它們可以不集成在控制器封裝中。如先前所述,RAM 11、快閃存儲器20 和控制器12全部連接到系統(tǒng)總線15。主機接口總線26與主機裝置24 (未圖示)通信。固件完整性檢驗圖2說明包含運行系統(tǒng)10的固件200的快閃存儲器的存儲器空間。系統(tǒng)固件200包 括引導(dǎo)載入程序(BLR)部分200a,其駐存在快閃存儲器20中,且優(yōu)選是不可改變的, 且系統(tǒng)固件200b駐存在快閃存儲器20中,且可在需要時不時地改變。在一些實施例中, 額外固件可存在于ROM 13中,當(dāng)其直接被執(zhí)行或從投影復(fù)制被執(zhí)行時,指向BLR部分 200a。系統(tǒng)固件200的大小大于從其執(zhí)行的RAM模塊,所以將系統(tǒng)固件分成較小的部分, 被稱為覆蓋。在優(yōu)選實施例中,BLR的完整性檢驗利用獨特的動態(tài)計算,其中所預(yù)期的 值存儲在數(shù)據(jù)本身中,且復(fù)制臨時存儲在除快閃存儲器20之外的存儲器中的寄存器中。 然而,在某些實施例中,用來檢驗BLR的完整性的技術(shù)可用來檢驗系統(tǒng)固件200b的完 整性。如先前所提及,可使用任何散列值和散列技術(shù),但MAC或SHA-1值目前是優(yōu)選 的,且為了簡單起見,在優(yōu)選實施例中將描述一個或其它值的使用。 一般來說,可替代 地使用SHA-1摘要來取代MAC值,且反之亦然。使用MAC值的優(yōu)勢是它們與硬件和 生成它們的硬件的密鑰相關(guān)聯(lián)。雖然可針對給定數(shù)據(jù)集簡單地基于數(shù)據(jù)本身來生成 SHA-l值,但在沒有密鑰的情況下不能重新生成MAC值,且因此提供更穩(wěn)固的安全性。 具體地說,因為必須使用存儲在加密引擎40的非易失性存儲器中的密鑰99來生成MAC 值,所以不能利用另一處理器來重新生成MAC值。舉例來說,黑客不能使用系統(tǒng)外部的 另一處理器來復(fù)制固件和相關(guān)聯(lián)的MAC值。各種用戶數(shù)據(jù)文件204也存儲在快閃存儲器內(nèi)。未圖示的各種其它程序和數(shù)據(jù)可存 儲在快閃存儲器(未圖示)內(nèi)。也可以類似或其它方式對這些文件進(jìn)行加密并檢驗其完 整性。圖3說明處于完整性檢查模式時系統(tǒng)10所利用的一些數(shù)據(jù)區(qū)段的結(jié)構(gòu)。BLR尤其優(yōu) 選利用此結(jié)構(gòu)??煽闯觯珺LR代碼307本身夾在其它數(shù)據(jù)之間,以組成BLR201a。在加 載BLR代碼307之前,加載一些配置信息。配置信息包含在文件識別(FID)區(qū)段1和7中。BLR代碼307之后是消息認(rèn)證代碼區(qū)段309。 MAC區(qū)段309內(nèi)是BLR代碼307的 對應(yīng)部分的MAC值。這是與圖5中所計算出的值(下文更詳細(xì)地對此進(jìn)行論述)相比較 的MAC值。用0對MAC區(qū)段進(jìn)行填補,以適應(yīng)不同長度的數(shù)據(jù),使得MAC總是占據(jù) 區(qū)段的最后128個位。BLR代碼307存儲在快閃存儲器20中,位于BLR部分200a中, 且配置信息也可存儲在快閃存儲器20中。圖4說明引導(dǎo)和運行系統(tǒng)10的過程,其包含檢驗BLR代碼和固件的完整性。具體 地說,圖4包含如與固件200的BLR部分200a有關(guān)的完整性檢驗過程的一般概述。在 優(yōu)選實施例中,系統(tǒng)固件200b和應(yīng)用固件的檢驗與BLR的檢驗是分開的,且在BLR的 檢驗之后發(fā)生。值得注意的是,固件不是由BLR —次性加載的。BLR只加載幾個模塊 (RAM駐存固件),且其它模塊(覆蓋)基于需要進(jìn)行加載,且交換到RAM中的相同位 置中。當(dāng)系統(tǒng)10啟動時,其將在完整性檢査模式下啟動,如步驟404中可見。 一般來說, 在此模式下,加密引擎40計算所有傳入數(shù)據(jù)的MAC值,如上文所論述且在圖5中詳細(xì) 說明。此過程確保了傳入數(shù)據(jù)可具有可變長度,且存儲在"與非"快閃存儲器20的任意 位置中。在優(yōu)選實施例中,將以與寫入數(shù)據(jù)的次序相同的次序讀取所述數(shù)據(jù),且讀取的 最后一個區(qū)塊將含有MAC。 MAC比較的結(jié)果可供固件在任何時候進(jìn)行檢查?,F(xiàn)將描述 圖4中可見的個別步驟。在步驟410中,系統(tǒng)再次根據(jù)圖5的流程表中詳細(xì)可見的過程來檢查BLR的完整性。 當(dāng)BLR經(jīng)過密碼引擎40時,以與檢驗來自快閃存儲器20的其它數(shù)據(jù)(當(dāng)系統(tǒng)處于完整 性檢査模式時)相同的方式來完成上述步驟。在步驟420中,系統(tǒng)對步驟410中所執(zhí)行 的完整性檢查的結(jié)果進(jìn)行檢査。通過對在步驟270中存儲的圖5中可見的過程200的完 整性檢查的結(jié)果(旗標(biāo)或其它指示符)進(jìn)行檢査來完成上述步驟,所述結(jié)果指示是否存 在問題。如果BLR不是OK,那么系統(tǒng)將等待主機命令(如步驟430中可見),以使系統(tǒng) 處于稱作商品退回授權(quán)(RMA)狀態(tài)的故障分析狀態(tài)。對于這種和其它操作狀態(tài)或模式 的更多細(xì)節(jié),請査閱Holtzman等人的標(biāo)題為"SECURE MEMORY CARD WITH LIFE CYCLE PHASES"的第11/053,273號共同待決的美國專利申請案,其全文以引用的方式 并入本文中。然而,如果BLR為OK,那么系統(tǒng)將在步驟440中執(zhí)行BLR。當(dāng)引導(dǎo)完成 時,系統(tǒng)將基于BLR本身中所含有的指令而離開完整性檢査模式,如圖4的步驟440中 可見。BLR包括大量的指令或"步驟"。其中有步驟440a,在步驟440a中,BLR將密碼 引擎40重新配置到正常模式,或換句話說,使密碼引擎40退出完整性檢查模式。BLR還含有指令(如由步驟440b表示),其致使系統(tǒng)檢查系統(tǒng)固件200b的完整性。圖5是如關(guān)于圖4所論述的完整性檢驗過程410的流程圖。其說明當(dāng)系統(tǒng)處于完整 性檢查模式時,讀取并散列存儲在快閃存儲器20中的數(shù)據(jù)的一般過程。雖然出于示范性 目的將描述對"與非"型快閃存儲器的讀取,但本發(fā)明可與用于大容量存儲目的的任何 類型的存儲器或媒體一起使用。同樣,雖然說明并描述了 MAC值的使用,但還可使用其 它散列值。圖2B的表通常將包含每個條目(未圖示)的對應(yīng)的開始字節(jié)和字節(jié)數(shù)目。一 般來說,在優(yōu)選實施例中,使用整個過程來逐頁地檢驗所述"與非"的完整性。所述過 程將檢驗存儲在所述"與非"中的任何數(shù)據(jù)的完整性。當(dāng)所述數(shù)據(jù)碰巧是固件時,檢驗 固件完整性。雖然這種逐頁的比較是優(yōu)選的,但可進(jìn)行較小或較大單位的比較。在優(yōu)選實施例中,完整性檢驗過程利用獨特的計算和控制回路,如圖5中所示。所 述回路涉及連續(xù)的計算與比較操作。通常,在檢驗方案中, 一些類型的"正確"或預(yù)期 值被預(yù)先存儲,并與計算出的值進(jìn)行比較。在具有圖5所示的過程的優(yōu)選實施例中,"正 確"或預(yù)期值存儲在"被測試的數(shù)據(jù)"本身內(nèi)。具體地說,在所描述的優(yōu)選實施例中, 其位于數(shù)據(jù)區(qū)塊的最后128個位中。當(dāng)讀取正確的區(qū)段時,正被讀取的區(qū)段的最后128 個位出于實用目的將只對應(yīng)于所存儲的MAC (或其它散列值) 一次。出于實用目的,可 低估(錯誤肯定)匹配將出現(xiàn)在非最后頁的頁上的非常小的可能性。在步驟210中,讀取"與非"區(qū)塊(/)。接下來在步驟215中,用ECC電路對所述 區(qū)塊進(jìn)行檢查并視情況進(jìn)行校正。ECC是眾所周知的,且可用來校正數(shù)據(jù)中的實際錯誤。 雖然使用結(jié)合完整性檢驗過程的ECC是優(yōu)選的,但這并不是必需的,且在包含或不包含 步驟215的情況下檢驗完整性。在步驟220中,計算散列值(在優(yōu)選實施例中,優(yōu)選是 MAC值)。盡管計算區(qū)塊(i)的MAC,但在完整性檢驗過程410中,所得的MAC涵蓋區(qū) 塊0到(i),且在數(shù)學(xué)上可表達(dá)為MAC [O...(i)] = MAC[MAC
, block(i)在步驟220中的計算之后,在步驟260中執(zhí)行比較。在步驟260中,控制器的應(yīng)將 (特別是FWIC31)將區(qū)塊(i)的最后128位與先前存儲的MAC (即,MAC [O.. .(i-l)])進(jìn) 行比較。在步驟270中,將比較的結(jié)果存儲在系統(tǒng)的存儲器中。當(dāng)首次執(zhí)行步驟260的 比較時,MAC寄存器中的"所存儲"值實際上不會是適當(dāng)?shù)乃鎯AC值,而將是碰 巧在寄存器中的任何值,且因此可被視為隨機。接著,將在步驟270中存儲比較的結(jié)果。 對于第一區(qū)塊,比較將不會被檢査。在步驟230中,步驟220中計算出的MAC值將存儲在控制器的寄存器中,優(yōu)選存儲在FWIC31的寄存器中。接下來在步驟235中,計數(shù)器 將遞增,使得(i)的值遞增l,且將再次在步驟210中讀取下一個區(qū)塊。所述回路將繼續(xù), 直到所有區(qū)塊(i)都被讀取為止。當(dāng)最后一個區(qū)塊被讀取,且因此由加密引擎處理時,如 果最后128個位與步驟230中所存儲的MAC匹配,那么所述比較將產(chǎn)生匹配,且步驟 270中所存儲的結(jié)果將反映出已由硬件檢驗出完整性。只有在BLR的最后一頁已經(jīng)被讀 取時,才會使用匹配來指示已經(jīng)檢驗出完整性。所有先前的匹配(錯誤真值)將被忽略。 如果所述值不同,那么這將指示數(shù)據(jù)的完整性存在問題。相反,如果所述值相同,那么 確保數(shù)據(jù)的完整性。在匹配已經(jīng)出現(xiàn)之后,將再次在步驟230中更新MAC值,但這是所述回路的冗余操 作,其不具有任何作用。這種連續(xù)的計算過程允許硬件檢驗未定義的內(nèi)容大小。換句話說,硬件可在不必首先確定區(qū)塊的數(shù)目或區(qū)塊所包括的文件的大小的情況下,適當(dāng)?shù)赜?算MAC值并檢驗其完整性。針對駐存在存儲卡的快閃存儲器20中的任何數(shù)據(jù),在一定的操作狀態(tài)或模式(尤其 是完整性檢査模式)下使用上文所述的過程。在根據(jù)本發(fā)明的存儲卡的優(yōu)選實施例中, 所述數(shù)據(jù)中的一些是在執(zhí)行時運行存儲器卡的固件。具體地說,在系統(tǒng)10加電時,當(dāng)系 統(tǒng)處于其常規(guī)操作狀態(tài)或測試狀態(tài)時,加密引擎40本身進(jìn)行初始化(通過在完整性檢查 模式下開始),以檢驗任何傳入數(shù)據(jù)的完整性。當(dāng)數(shù)據(jù)碰巧是固件時,在固件傳遞通過 BMU 14且尤其是加密引擎40時,固件的完整性得以檢驗。所存儲的結(jié)果(不是完整性 本身)可由軟件檢査,所述軟件在一個實施例中涉及存儲在ROM 13中的代碼中的指令。 應(yīng)注意,盡管存儲在ROM 13中的代碼對結(jié)果進(jìn)行檢査,且可起始數(shù)據(jù)的流動,但其不 包括在對快閃存儲器中的固件的完整性進(jìn)行檢驗的過程中。換句話說,所述代碼不負(fù)責(zé) 執(zhí)行所述固件的任何數(shù)值計算或數(shù)據(jù)操作以便對其進(jìn)行檢驗。是控制器12或BMU14、 FWIC31和加密引擎40的硬件對固件(包含引導(dǎo)載入程序(BLR)部分和在一些實施例 中固件的其它部分)的完整性進(jìn)行檢驗。圖5中所描述的過程涉及硬件(HW)和固件(FW)兩者。如所提及,硬件實行完 整性檢査,而固件只是對HW完整性檢査結(jié)束時所設(shè)置的旗標(biāo)進(jìn)行檢査。分別在圖6和 圖7中更詳細(xì)地展示HW和SW功能或"回路"。參看圖6,在步驟320中對系統(tǒng)加電。在步驟322中,控制器硬件起始FW完整性模 式。這包括兩個主要行為。第一個行為是激活圖1的FWIC 31。 FWIC 31 —旦被激活, 就將配合圖6的其余步驟,且從而對固件的BLR部分以及加密引擎40的完整性進(jìn)行檢査。第二個行為涉及選擇密碼學(xué)算法以供加密引擎40使用。如先前所提及,加密引擎 40的硬件經(jīng)配置以用各種不同算法對數(shù)據(jù)進(jìn)行加密和解密。在步驟328中,控制器硬件計算傳入?yún)^(qū)塊的摘要。此計算由加密引擎40執(zhí)行。接下 來,在步驟330中,將步驟328中計算出的摘要與先前摘要的值進(jìn)行比較。如早先所論 述,將在所述回路的每一迭代中檢查并比較保存所述值的寄存器,但在第一迭代時,所 述寄存器中的值將是隨機的。接著,在步驟332中設(shè)置指示完整性的旗標(biāo)。此旗標(biāo)將由 系統(tǒng)的固件進(jìn)行檢査,以便確認(rèn)HW已經(jīng)檢驗出固件的BLR部分的完整性。圖7說明圖6中當(dāng)HW檢查完整性時所發(fā)生的固件回路。在系統(tǒng)在步驟320中被加 電之后,在步驟340中,CPU經(jīng)初始化。接著,在步驟342中,從第一有效頁讀取配置 數(shù)據(jù)(在優(yōu)選實施例中,其為圖3的FID 1)。接下來,在步驟344中,系統(tǒng)提取BLR 201A 的開始和結(jié)束頁。 一旦這是已知的,就讀取所有的BLR頁。當(dāng)讀取每個頁時,產(chǎn)生誤差 校正碼(ECC)。如先前所提及,ECC電路操作是眾所周知的,且可用來校正數(shù)據(jù)中的實 際錯誤,至多達(dá)某一限制。雖然使用結(jié)合完整性檢驗過程的ECC是優(yōu)選的,但這并不是 必需的,且在使用或不使用ECC的情況下檢驗完整性。在頁被讀取之后,在步驟348中 用ECC電路對所述頁進(jìn)行檢查,且如果不是OK,那么在步驟352中,將用ECC校正機 制來校正所述頁,或檢索替代頁。如果在步驟354中確定經(jīng)校正的或新的頁為OK,那么 在步驟350中,系統(tǒng)將進(jìn)行檢査,看是否存在更多要讀取的頁。如果是這種情況,那么 系統(tǒng)將返回到步驟346,并讀取另一頁。如果步驟354指示在步驟354中經(jīng)校正的或替 代的復(fù)制不是OK,那么在步驟356中,將指示故障情況。如果步驟350中確定不存在更 多頁,且不指示故障,那么在步驟360中,系統(tǒng)將檢查完整性旗標(biāo)(其由硬件設(shè)置,如 圖6中可見)。如果在步驟360中,旗標(biāo)指示BLR為OK,如由HW檢驗?zāi)菢樱敲丛诓?驟362中,將執(zhí)行BLR。此執(zhí)行與圖4的步驟440中所描繪的相同。雖然只針對固件的一部分(即BLR)執(zhí)行此完整性檢査,但應(yīng)了解,也可以此方式 檢査所有固件,且此闡釋涉及采用固件引導(dǎo)程序的優(yōu)選實施例。另外,如本申請案中所 使用,術(shù)語存儲卡意在還包含USB快閃驅(qū)動器之類的結(jié)構(gòu)因子。盡管已相對于本發(fā)明的示范性實施例描述了本發(fā)明的各個方面,但將了解,本發(fā)明 在所附權(quán)利要求書的整個范圍內(nèi)受到保護。
權(quán)利要求
1.一種存儲卡,其包括快閃存儲器單元;控制器,其具有加密硬件;隨機存取存儲器;以及存儲在所述快閃存儲器中的固件,其控制將數(shù)據(jù)寫入所述快閃存儲器單元和從所述快閃存儲器單元讀取數(shù)據(jù);其中,當(dāng)將所述固件上載到所述隨機存取存儲器時,用由所述控制器加密硬件計算出的加密值檢驗所述固件的完整性。
2. 根據(jù)權(quán)利要求1所述的存儲卡,其中所述存儲卡進(jìn)一步包括用于對初始引導(dǎo)過程結(jié) 束時的旗標(biāo)進(jìn)行檢査的指令,其中所述旗標(biāo)指示已檢驗所述固件完整性。
3. 根據(jù)權(quán)利要求1所述的存儲卡,其中當(dāng)將所述固件上載到所述隨機存取存儲器時, 用計算出的散列值檢驗所述固件的完整性。
4. 根據(jù)權(quán)利要求1所述的存儲卡,其中檢驗所述固件的完整性包括將MAC值應(yīng)用于 所述固件。
5. 根據(jù)權(quán)利要求1所述的存儲卡,其中所述快閃存儲器單元是"與非"類,且其中計 算"與非"頁群組的中間MAC值。
6. 根據(jù)權(quán)利要求5所述的存儲卡,其中檢驗完整性進(jìn)一步包括將所述頁群組的所述 MAC值與存儲在另一頁或頁群組中的MAC值進(jìn)行比較。
7. 根據(jù)權(quán)利要求1所述的存儲卡,其中所述固件包括引導(dǎo)載入程序部分和主要部分。
8. 根據(jù)權(quán)利要求7所述的存儲卡,其中當(dāng)將系統(tǒng)級固件上載到所述隨機存取存儲器時, 用由所述控制器加密硬件計算出的加密值來檢驗所述引導(dǎo)載入程序部分的完整性。
9. 根據(jù)權(quán)利要求1所述的存儲卡,其中所述控制器包括固件完整性電路,其管理所述固件的完整性檢查。
10. 根據(jù)權(quán)利要求1所述的存儲卡,其中檢驗所述固件的完整性包括將SHA-1值應(yīng)用于 所述固件。
11. 一種便攜式快閃存儲器存儲裝置,其包括快閃存儲器;駐存在所述快閃存儲器中的數(shù)據(jù), 其中所述數(shù)據(jù)包括用戶文件和固件,且 其中所述數(shù)據(jù)的一部分可以經(jīng)加密的格式存儲;以及密碼引擎,其執(zhí)行數(shù)據(jù)操縱,所述數(shù)據(jù)操縱包括對正路由到所述快閃存儲器的數(shù) 據(jù)進(jìn)行加密和對來自所述快閃存儲器的數(shù)據(jù)進(jìn)行解密,其中所述密碼引擎數(shù)據(jù)操縱還用來檢驗所述固件的完整性。
12. —種大容量存儲裝置,其包括快閃存儲器;一組指令,其控制所述大容量存儲裝置的數(shù)據(jù)存儲和檢索操作,所述第一組存儲 在所述快閃存儲器中;以及加密引擎,其在所述大容量存儲裝置的硬件電路中實施,所述加密引擎對存儲在 所述快閃存儲器中以及從所述快閃存儲器讀取的數(shù)據(jù)進(jìn)行加密和解密,所述加密引擎可操作以檢驗所述組指令的完整性。
13. 根據(jù)權(quán)利要求12所述的大容量存儲裝置,其中所述組指令不包括檢驗所述指令的 至少一部分的完整性的指令。
14. 根據(jù)權(quán)利要求12所述的大容量存儲裝置,其中所述組指令包括用于檢查指示符的 狀態(tài)的指令,所述指示符指示是否已檢驗所述組指令的完整性。
15. —種大容量存儲裝置,其包括快閃存儲器;用于控制所述大容量存儲裝置的數(shù)據(jù)存儲操作的構(gòu)件;用于對數(shù)據(jù)進(jìn)行加密和解密的構(gòu)件;以及用于用所述用于對數(shù)據(jù)進(jìn)行加密和解密的構(gòu)件來檢驗所述用于控制數(shù)據(jù)存儲操 作的構(gòu)件的完整性的構(gòu)件。
16. —種存儲卡,其包括大容量存儲媒體,其包括快閃存儲器;只讀存儲器;固件;駐存在所述只讀存儲器中的代碼;以及密碼引擎,其屮所述密碼引擎用于檢驗所述固件的完整性。
17. 根據(jù)權(quán)利要求16所述的存儲卡,其中所述只讀存儲器和所述駐存在所述只讀存儲 器中的代碼不用于檢驗所述固件的至少一部分的完整性。
18. 根據(jù)權(quán)利要求17所述的存儲卡,其中所述固件的不由所述只讀存儲器檢驗的一部 分包括引導(dǎo)載入程序。
19. 根據(jù)權(quán)利要求16所述的存儲卡,其中所述代碼包括將所述固件的引導(dǎo)載入程序部 分加載到隨機存取存儲器中的指令。
20. 根據(jù)權(quán)利要求17所述的存儲卡,其中所述代碼包括對硬件旗標(biāo)進(jìn)行檢査的指令, 其中所述硬件旗標(biāo)指示已使用所述密碼引擎檢驗所述固件的引導(dǎo)載入程序部分的 完整性。
21. —種用于啟始存儲器存儲裝置的操作的方法,其包括在所述裝置的大容量存儲單元中提供固件; 傳遞所述固件通過加密引擎; 用所述加密引擎計算所述固件的散列值; 將所述計算出的散列值與所存儲的散列值進(jìn)行比較 如果所述計算出的散列值與所述存儲的散列值匹配
22. 一種用于啟始存儲器存儲裝置的操作的方法,其包括;以及,那么執(zhí)行所述固件。在所述裝置的大容量存儲單元中提供固件;在只讀存儲器中執(zhí)行第一組指令,其將所述固件從所述大容量存儲單元復(fù)制到隨 機存取存儲器;使用加密引擎檢驗所述固件的完整性;以及在檢驗了完整性之后,用微處理器從隨機存取存儲器中執(zhí)行所述固件。
23. 根據(jù)權(quán)利要求22所述的方法,其中所述固件含有從所述大容量存儲單元獲取額外 固件的指令。
24. 根據(jù)權(quán)利要求23所述的方法,其中所述方法進(jìn) -步包括執(zhí)行所述額外固件。
全文摘要
一種存儲器系統(tǒng)包括在控制器的硬件中實施的加密引擎。在啟動所述存儲器系統(tǒng)的過程中,實施引導(dǎo)程序機制,其中固件的第一部分在被執(zhí)行時引入固件的將要執(zhí)行的另一部分。所述加密引擎的硬件用于檢驗所述固件的至少所述第一部分的完整性。因此,將只執(zhí)行既定用以運行所述系統(tǒng)的固件。
文檔編號G06F21/00GK101263501SQ200680033798
公開日2008年9月10日 申請日期2006年9月13日 優(yōu)先權(quán)日2005年9月14日
發(fā)明者尼夫·科亨, 羅恩·巴爾齊萊, 邁克爾·霍爾茨曼, 魯文·埃爾哈米亞斯 申請人:桑迪士克股份有限公司