數(shù)據(jù)驗證方法及其裝置制造方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)驗證方法及其裝置。所述方法包括產(chǎn)生多個數(shù)據(jù)字的第一序列以經(jīng)由接口發(fā)送,計算多個簽名字的第二序列,并將第二序列交錯至第一序列中以產(chǎn)生交錯序列。所述交錯序列中的每一給定簽名字累積地對交錯序列中由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名。并且,經(jīng)由接口傳輸交錯序列。
【專利說明】數(shù)據(jù)驗證方法及其裝置
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明是有關(guān)于數(shù)據(jù)安全,且特別是有關(guān)于一種用于數(shù)據(jù)驗證方法及其裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)驗證方案例如可用于避免遭受密碼攻擊等多種應(yīng)用。舉例而言,在此引用美國專利第8,429,513號所公開的內(nèi)容作為參考,其描述檢驗可程式化存儲器中的代碼的完整性的方法。所述方法包含從不安全的存儲器接收代碼,且在從不安全的存儲器接收到代碼時,對此代碼產(chǎn)生錯誤檢測比特,并將代碼和錯誤檢測比特存儲在可程式化存儲器中,以及通過對存儲在可程式化存儲器中的代碼和錯誤檢測比特執(zhí)行驗證檢查,以檢驗存儲在可程式化存儲器中的代碼的完整性。
[0003]在此引用美國專利申請公開案第2012/0102307號所公開的內(nèi)容作為參考,其描述包含安全資產(chǎn)管理單元(secure asset management unit,簡稱SAMU)且用于執(zhí)行敏感代碼和數(shù)據(jù)的安全執(zhí)行環(huán)境。安全資產(chǎn)管理單元提供安全的執(zhí)行環(huán)境來運行敏感代碼,例如,與針對內(nèi)容消費而建立的復(fù)制保護(hù)方案相關(guān)聯(lián)的代碼。安全資產(chǎn)管理單元架構(gòu)允許基于硬體的安全啟動和存儲器保護(hù),并為主機(jī)處理器所提供的代碼提供隨選代碼(on-demandcode)的執(zhí)行。安全資產(chǎn)管理單元可以通過已加密和已簽名的核心代碼來啟動,并且執(zhí)行已加密、已簽名的代碼?;谟搀w的安全配置,可便于防止縱向或橫向的特權(quán)擾亂(privilegev1lat1ns)。
[0004]參照此處引用的美國專利申請公開案第2006/0253708號所公開的內(nèi)容,其描述用于將可變數(shù)據(jù)的至少一個數(shù)據(jù)區(qū)塊記錄在微處理器外部的第一易失性存儲器中的方法。此方法包含計算和存儲數(shù)字簽名,其中此數(shù)字簽名將所述數(shù)據(jù)區(qū)塊在存儲器中的至少部分地址和內(nèi)容以及微處理器內(nèi)部的至少第一隨機(jī)數(shù)字值考慮在內(nèi)。
[0005]參照此處引用的澳大利亞專利申請公開案第AU 2001/027074號所公開的內(nèi)容,其描述有效確定數(shù)據(jù)正確的技術(shù)。部分?jǐn)?shù)據(jù)的檢驗過程是用于內(nèi)容的部分?jǐn)?shù)據(jù)的組合,并通過將完整性部分?jǐn)?shù)據(jù)整理為多個校驗值來執(zhí)行,且部分?jǐn)?shù)據(jù)其組合整體的檢驗過程是通過整理部分完整性校驗值檢驗(integrity-check-value-verifying)的完整性校驗值來執(zhí)行,所述完整性校驗值對部分完整性校驗值的組合進(jìn)行檢驗。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供一種數(shù)據(jù)驗證方法及其裝置,用于逐步驗證經(jīng)由總線接口通信的經(jīng)加密數(shù)據(jù)以及識別攻擊者是否篡改或危害到所通信的經(jīng)加密數(shù)據(jù)。
[0007]本發(fā)明實施例提供一種數(shù)據(jù)驗證方法,所述方法包括產(chǎn)生多個數(shù)據(jù)字的第一序列以經(jīng)由接口發(fā)送,計算多個簽名字的第二序列,并將第二序列交錯至第一序列中以產(chǎn)生交錯序列,所述交錯序列中的每一給定簽名字累積地對交錯序列中由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名。以及,經(jīng)由接口傳輸交錯序列。
[0008]在一些實施例中,計算簽名字包括根據(jù)交錯序列中在各簽名字之前的數(shù)據(jù)字,以產(chǎn)生交錯序列中的各簽名字。在其它實施例中,計算簽名字包括根據(jù)隨著交錯序列增加的數(shù)據(jù)字的相應(yīng)數(shù)目,以產(chǎn)生交錯序列中的各簽名字。
[0009]在一些實施例中,所述方法包括從接口接收交錯序列,以及使用簽名字的第二序列,以逐步地驗證數(shù)據(jù)字的第一序列。驗證數(shù)據(jù)字通常包括使用各給定簽名字以驗證交錯序列中由先前簽名字所驗證的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字。
[0010]在一些實施例中,計算簽名字的第二序列包括應(yīng)用線性反饋移位寄存器(linearfeedback shift register,簡稱LFSR)于數(shù)據(jù)字,以及應(yīng)用非線性函數(shù)于線性反饋移位寄存器的輸出。在其它實施例中,計算簽名字的第二序列包括設(shè)定給定簽名字的多個比特的第一子集,以對交錯序列中在給定簽名字之前的數(shù)據(jù)字進(jìn)行簽名,以及從錯誤檢測碼導(dǎo)出給定簽名字的所述比特的第二子集,其中,錯誤檢測碼是經(jīng)由數(shù)據(jù)字中的至少其中之一所計算,并存儲在存儲器中。
[0011]在一些實施例中,所述方法包括使用密碼函數(shù)以將給定簽名字中的多個比特位置加密指派至第一和第二子集。在其它實施例中,所述方法包括從接口接收交錯序列,從簽名字提取所述比特的第一和第二子集,使用第一子集以評估經(jīng)由接口傳送數(shù)據(jù)字的完整性,以及使用第二子集以評估將數(shù)據(jù)字存儲于存儲器中的完整性。
[0012]本發(fā)明的實施例另提供一種裝置,所述裝置包括存儲器和存儲器驗證單元。所述存儲器驗證單元經(jīng)配置以產(chǎn)生多個數(shù)據(jù)字的第一序列以經(jīng)由接口發(fā)送,計算多個簽名字的第二序列,并將第二序列交錯到第一序列中以產(chǎn)生交錯序列,其中,所述交錯序列中的每一給定簽名字累積地對交錯序列中由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名,以及經(jīng)由接口傳輸交錯序列。
[0013]本發(fā)明的實施例另提供一種方法,所述方法包括經(jīng)由接口接收由多個數(shù)據(jù)字的第一序列和多個簽名字的第二序列所形成的交錯序列,使得每一給定簽名字累積地對交錯序列中由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名,以及使用簽名字的第二序列來逐步地驗證數(shù)據(jù)字的第一序列。
[0014]本發(fā)明的實施例另提供一種裝置,所述裝置包括驗證單元和處理器。所述驗證單元經(jīng)配置以經(jīng)由接口接收由多個數(shù)據(jù)字的第一序列和多個簽名字的第二序列所形成的交錯序列,使得每一簽名字累積地對交錯序列中由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名,以及使用簽名字的第二序列來逐步地驗證所述數(shù)據(jù)字的所述第一序列。處理器經(jīng)配置以處理經(jīng)驗證的數(shù)據(jù)字。
[0015]為讓本發(fā)明的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合附圖作詳細(xì)說明如下。
【專利附圖】
【附圖說明】
[0016]圖1A為本發(fā)明一實施例所示的計算系統(tǒng)的方塊圖;
[0017]圖1B為本發(fā)明一實施例所示的經(jīng)由總線接口傳輸?shù)慕诲e序列的示意圖;
[0018]圖2為本發(fā)明的一實施例所示的用于對交錯序列進(jìn)行簽名以經(jīng)由總線接口進(jìn)行傳輸?shù)姆椒鞒虉D;
[0019]圖3為本發(fā)明的一實施例所示的用于驗證經(jīng)由總線接口所接收的經(jīng)簽名數(shù)據(jù)的方法流程圖;
[0020]圖4A為本發(fā)明的一實施例所示的完整性檢查引擎的第一實施方案的方塊圖;
[0021]圖4B為本發(fā)明的一替代實施例所示的完整性檢查引擎的第二實施方案的方塊圖;
[0022]圖5為本發(fā)明的一實施例所示的用于同時驗證經(jīng)由總線接口所接收的數(shù)據(jù)并查驗存儲在存儲器中的數(shù)據(jù)的方法流程圖。
[0023]附圖標(biāo)記說明:
[0024]10:系統(tǒng);
[0025]15:主機(jī);
[0026]20:存儲器裝置;
[0027]25:總線接口;
[0028]30:存儲器;
[0029]35:存儲器驗證單元;
[0030]40:加密器;
[0031]45:存儲器完整性檢查引擎;
[0032]50:交錯器;
[0033]60:處理器;
[0034]65:主機(jī)存儲器;
[0035]70:主機(jī)驗證單元;
[0036]75:解交錯器;
[0037]80:解密器;
[0038]85:主機(jī)完整性檢查引擎;
[0039]90:比較器;
[0040]100:交錯序列;
[0041]IKKD1 ?D12、Dj:數(shù)據(jù)字;
[0042]UCKSpSySpSlSiR:簽名字;
[0043]300、400:完整性檢查引擎;
[0044]305,405:線性反饋移位寄存器;
[0045]310、410:F 區(qū)塊;
[0046]415:F,區(qū)塊;
[0047]425:多工器;
[0048]CRC1:循環(huán)冗余校驗字;
[0049]F、F,:函數(shù);
[0050]F1、F,1:信號;
[0051]HS1:混合簽名字;
[0052]K:密鑰;
[0053]P/F:通過或失?。?br>
[0054]200 ?250、255 ?290、430 ?465:步驟。
【具體實施方式】
[0055][概述]
[0056]在許多安全存儲系統(tǒng)中,主機(jī)經(jīng)由存儲器總線接口與存儲器裝置通信,使得在傳輸過程中,數(shù)據(jù)可能會受到各種密碼攻擊。本發(fā)明實施例在此提供用于逐步驗證經(jīng)由總線接口通信的經(jīng)加密數(shù)據(jù)以及識別攻擊者是否篡改或危害到所通信的經(jīng)加密數(shù)據(jù)的改進(jìn)方法和系統(tǒng)。
[0057]在本文中描述的一些實施例中,一種存儲器裝置包括存儲器和存儲器驗證單元(memory authenticat1n unit,簡稱MAU)。當(dāng)存儲器裝置準(zhǔn)備經(jīng)由總線接口以將數(shù)據(jù)發(fā)送至主機(jī)時,存儲器驗證單元從存儲器提取數(shù)據(jù)且產(chǎn)生經(jīng)加密數(shù)據(jù)字的第一序列。同時,存儲器驗證單元基于所提取的數(shù)據(jù)來計算簽名字的第二序列。
[0058]存儲器驗證單元經(jīng)配置以將數(shù)據(jù)字的序列與簽名字的序列交錯以便經(jīng)由總線接口來傳輸,使得每一簽名字不斷地對交錯序列中在所述簽名字之前的數(shù)據(jù)字進(jìn)行簽名。換句話說,交錯序列中的每一給定簽名字(第一簽名字除外)對由先前簽名字所簽名的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字進(jìn)行簽名。因此,驗證強度隨著每一數(shù)據(jù)字序列被驗證而不斷變強。
[0059]主機(jī)使用主機(jī)驗證單元(host authenticat1n unit,簡稱HAU)來接收交錯序列、將數(shù)據(jù)字與簽名字分離以及對數(shù)據(jù)字解密。同時,主機(jī)驗證單元從所接收的解密數(shù)據(jù)計算簽名字,并將計算出的簽名字與對應(yīng)所接收的簽名字相比較,以便驗證數(shù)據(jù)字。換句話說,主機(jī)驗證單元使用交錯序列中的每一個簽名字來驗證由先前簽名字所驗證的數(shù)據(jù)字以及位于先前簽名字與給定簽名字之間的數(shù)據(jù)字。
[0060]換句話說,在所公開的技術(shù)中,存儲器裝置周期地發(fā)送簽名字,且這些簽名字對數(shù)目逐漸增加的數(shù)據(jù)字進(jìn)行簽名。序列中的第一簽名字可能僅提供中等的驗證性能,但是在后續(xù)的簽名字中,驗證性能大幅提高。同時,驗證過程導(dǎo)致的等待時間是非常低的,因為并不需要等到已累積了大區(qū)塊的數(shù)據(jù)字才來查驗簽名。對于實時代碼驗證而言(即,當(dāng)經(jīng)由接口所傳送的數(shù)據(jù)字傳達(dá)由主機(jī)實時運行的軟體代碼時),可靠驗證與低等待時間的此組合特別有用。
[0061]在一些實施例中,主機(jī)還可以用來遠(yuǎn)端查驗存儲在存儲器裝置自身上的數(shù)據(jù)的完整性。在這些實施例中,存儲器驗證單元將數(shù)據(jù)字的群組與對應(yīng)的錯誤檢測碼一起存儲在存儲器中,所述錯誤檢測碼檢測存儲在存儲器中的數(shù)據(jù)字的改變。如果攻擊者試圖篡改存儲器裝置中的數(shù)據(jù)和/或?qū)S眠壿嬰娐?所述數(shù)據(jù)和/或?qū)S眠壿嬰娐酚靡詸z驗所存儲的數(shù)據(jù)完整性),則無法再信任此存儲器裝置對存儲在其自身存儲器中的數(shù)據(jù)完整性的評估。在下文提出的一些實施例中,主機(jī)可用以遠(yuǎn)端查驗存儲在存儲器裝置上的數(shù)據(jù)的完整性。
[0062]在這些實施例中,存儲器驗證單元形成混合簽名字,其包括存儲器完整性比特與接口驗證比特二者的組合。接口驗證比特是從上述簽名字導(dǎo)出,而存儲器完整性比特是從與數(shù)據(jù)一起存儲在存儲器中的錯誤檢測碼導(dǎo)出。
[0063]在一實施例中,用接口驗證比特和存儲器完整性比特二者來加密計算混合簽名字中的比特。存儲器完整性比特自身通常不具有加密強度,并且可能易遭篡改。然而,所公開的技術(shù)通過使存儲器完整性比特?zé)o法與接口驗證比特區(qū)別,而可有效地隱藏存儲器完整性比特。因而,識別和修改存儲器完整性比特明顯更復(fù)雜。接著以如先前描述的相同方式(例如,在交錯序列中)經(jīng)由總線接口將混合簽名字發(fā)送給主機(jī)。接著,主機(jī)可提取接口驗證比特以驗證接口,以及提取存儲器完整性比特以驗證存儲在存儲器中的數(shù)據(jù)。
[0064][系統(tǒng)描述]
[0065]圖1A為本發(fā)明一實施例所示的計算系統(tǒng)的方塊圖。系統(tǒng)10包括主機(jī)15和存儲器裝置20。主機(jī)15和存儲器裝置20經(jīng)由總線接口 25相互通信。系統(tǒng)10例如可以包括電腦。主機(jī)15可以包括電腦的中央處理單元(Central Processing Unit,簡稱CPU)。存儲器裝置20可以包括外部存儲器裝置,所述外部存儲器裝置使用任何合適類型的存儲器,例如快閃存儲器或隨機(jī)存取存儲器。
[0066]在典型的流程中,主機(jī)15經(jīng)由總線接口 25將對于數(shù)據(jù)的請求發(fā)送至存儲器裝置
20。存儲器裝置20從存儲器30提取數(shù)據(jù)字。數(shù)據(jù)字以Dj表示,其中j用以表示交錯序列中第j個數(shù)據(jù)字的整數(shù),并將如稍后論述。數(shù)據(jù)字被中繼到與存儲器30連接的存儲器驗證單元35。存儲器驗證單元35中的加密器40對數(shù)據(jù)字Dj進(jìn)行加密。類似地,存儲器完整性檢查引擎(memory integrity check engine,簡稱ICE)45以數(shù)據(jù)字Dj作為輸入并計算簽名字Si,其中i用以表示第i個簽名字的整數(shù)。最后,交錯器50產(chǎn)生包括數(shù)據(jù)字Dj和簽名字Si的交錯序列,如圖1B所示。
[0067]主機(jī)15包括處理器60和主機(jī)存儲器65。主機(jī)存儲器65連接到主機(jī)驗證單元70。主機(jī)驗證單元70包括解交錯器75,所述解交錯器75可將所接收的交錯數(shù)據(jù)中經(jīng)加密的數(shù)據(jù)字與所接收的簽名字SiK分離,其中i表示交錯序列中第i個簽名字的整數(shù)。之后,解密器80從解交錯器75提取數(shù)據(jù)字Dj。
[0068]主機(jī)完整性檢查引擎85接收所提取的數(shù)據(jù)字Dj,以經(jīng)由數(shù)據(jù)字Dj來計算簽名字Sie0為了驗證數(shù)據(jù)字Dj與存儲器30中被簽名的數(shù)據(jù)字是相符的,比較器90通過向處理器60指示通過或失敗(如圖1A中所示的P/F)來評估簽名字Si是否與所接收的簽名字SiK相同。當(dāng)指示為通過時,對于給定的索引i而言,當(dāng)前接收到的簽名字SiK對在簽名字SiK之前的所有經(jīng)簽名的數(shù)據(jù)字進(jìn)行驗證。
[0069]圖1A中示出的系統(tǒng)10僅是舉例,而并非對本發(fā)明的實施例作出限制。舉例而言,存儲器完整性檢查引擎45和主機(jī)完整性檢查引擎85可經(jīng)配置以經(jīng)由經(jīng)加密的數(shù)據(jù)字(圖1A中未示出)來計算簽名字。主機(jī)15和存儲器裝置20的不同元件可以各自使用任何合適硬體來實現(xiàn),例如特殊應(yīng)用集成電路或可程式化邏輯閘陣列(FPGA)。在一些實施例中,所述功能可以使用印刷電路板上的離散元件或其組合,而以任何合適方式來實現(xiàn)。在其它實施例中,存儲器30和存儲器驗證單元35通常封裝在同一裝置封裝中,以便提供自含式安全存儲器裝置。
[0070]在一些實施例中,總線接口 25可以是經(jīng)由獨立的信號線以提供地址、數(shù)據(jù)和命令的平行接口。在其它實施例中,總線接口 25可以是串列接口,例如串列周邊接口(SPI)、內(nèi)置集成電路(I2C)、通用串列總線(USB)、多媒體卡(MMC)或安全數(shù)字(SD)接口??偩€接口25可以是實施在晶元和/或印刷電路板上的任何合適接口。存儲器30和主機(jī)存儲器65可以是隨機(jī)存取存儲器、非易失性存儲器或其二者。
[0071]在其它實施例中,主機(jī)15和/或存儲器裝置20的某些元件,例如存儲器驗證單元35、主機(jī)驗證單元70和處理器60,可以用通用型電腦來實施,并以軟件對所述通用型電腦進(jìn)行程式化來實現(xiàn)本文中描述的功能。軟件可以例如按電子形式而經(jīng)由網(wǎng)絡(luò)下載到電腦,或也可替代或附加地被提供和/或被存儲在非暫時性有形媒體(例如磁、光或電子存儲器)上。
[0072][通過將數(shù)據(jù)與簽名字進(jìn)行交錯以經(jīng)由安全存儲器接口進(jìn)行累積數(shù)據(jù)驗證]
[0073]在本文描述的實施例中,所公開的用于累積數(shù)據(jù)驗證的方法通常是針對主機(jī)15與存儲器裝置20為分離的情形。主機(jī)15所請求的數(shù)據(jù)經(jīng)由總線接口 25來發(fā)送。即使數(shù)據(jù)被加密了,攻擊者仍可能試圖經(jīng)由總線接口 25來更改數(shù)據(jù)流中的某些比特以獲取數(shù)據(jù),或以其它方式影響系統(tǒng)。
[0074]在一些實施例中,數(shù)字簽名用以對數(shù)據(jù)進(jìn)行驗證。數(shù)字簽名是可使用主機(jī)15和存儲器裝置20 二者都知道的專用秘密值(通常是秘密數(shù)字密鑰字)所計算出的數(shù)據(jù)的函數(shù)。在接收數(shù)據(jù)過程中,主機(jī)15必須知道用以產(chǎn)生存儲器裝置20中的簽名的專用秘密值以便用接收到的數(shù)據(jù)字來計算出相同簽名,由此檢驗所接收的簽名和計算出的簽名的匹配。這樣就驗證了經(jīng)簽名的數(shù)據(jù)字,并表示數(shù)據(jù)未曾經(jīng)由總線接口而遭到篡改。對于長的數(shù)據(jù)塊,首先對數(shù)據(jù)進(jìn)行散列運算,接著再將函數(shù)應(yīng)用于散列序列。
[0075]本文中描述的實施例特別是關(guān)于主機(jī)15運行從存儲器裝置20所實時提取出的代碼的情形。在這種情況中,因為與主機(jī)15驗證數(shù)據(jù)相關(guān)聯(lián)的等待時間非常長,故常規(guī)的區(qū)塊驗證方法通常是不合適的。此外,常規(guī)的加密簽名通常是至少8字節(jié)(byte)長,而經(jīng)由總線接口 25實時地傳送此類簽名將嚴(yán)重地降低通過總線接口 25的信道吞吐量。
[0076]在本文描述的實施例中,由于是使用從存儲器30傳遞到存儲器驗證單元35的數(shù)據(jù)而在存儲器驗證單元35中不斷地對簽名字進(jìn)行計算,故簽名過程是累積的。在示范性實施例中對此進(jìn)行說明,其中,每4個I字節(jié)數(shù)據(jù)字便添加并傳輸相應(yīng)的I字節(jié)簽名字,使得每一簽名字對序列中所有先前的數(shù)據(jù)字進(jìn)行簽名。
[0077]如果攻擊者修改了前4個數(shù)據(jù)字,那么第一簽名字可按P = 255/256的可能性而檢測到攻擊。此可能性對于常規(guī)的加密算法來說可能不夠高,但當(dāng)?shù)诙灻謱η?個數(shù)據(jù)字進(jìn)行簽名時,此時的誤檢測攻擊的可能性將是(1-P)2,且用第i個簽名字Si檢測到攻擊的可能性是Ι-α-ρ)、因此,可以非常精確地檢測攻擊者經(jīng)由總線接口 25對傳送中的數(shù)據(jù)字作出的任何改變。
[0078]圖1B為本發(fā)明一實施例所示的經(jīng)由總線接口傳輸?shù)慕诲e序列的示意圖。如先前所述,將表示為Dj的多個數(shù)據(jù)字110與表示為Si的簽名字120進(jìn)行交錯。在圖1B所示的示范性實例中,簽名字S1對數(shù)據(jù)字D1-D4進(jìn)行簽名,簽名字S2對數(shù)據(jù)字D1-D8進(jìn)行簽名,簽名字S3對數(shù)據(jù)字D1-D12進(jìn)行簽名,等等。需注意的是,在圖1B中,表示為(DpDfDj)的數(shù)據(jù)字110是圖1A所示的數(shù)據(jù)字Dj的經(jīng)加密版本。術(shù)語“簽名字”與“簽名”在此可以互換使用。
[0079]圖2為本發(fā)明一實施例所示的用于對交錯序列進(jìn)行簽名以經(jīng)由總線接口進(jìn)行傳輸?shù)姆椒鞒虉D。在發(fā)送步驟200中,主機(jī)15經(jīng)由總線接口 25以將對數(shù)據(jù)的請求發(fā)送至存儲器裝置20。存儲器裝置20從存儲器30讀取所請求的數(shù)據(jù)。在加密步驟210中,存儲器驗證單元35對數(shù)據(jù)字(例如,圖1B中所示的數(shù)據(jù)字110)的第一序列進(jìn)行加密。
[0080]在計算和交錯步驟220中,存儲器驗證單元35計算簽名字Si的第二序列(在圖1B中標(biāo)示為簽名字120),并將第一(Dj)與第二(Si)序列交錯,使每一簽名字Si對如圖1B所示的交錯序列100中在所述簽名字Si之前的數(shù)據(jù)字Dj進(jìn)行簽名。
[0081]在傳輸步驟230中,存儲器裝置20經(jīng)由總線接口 25將交錯序列100傳輸至主機(jī)15。在判定步驟240中,主機(jī)15評估存儲器裝置20是否已傳輸所有的經(jīng)簽名數(shù)據(jù)。如果不是,那么存儲器裝置20繼續(xù)從存儲器30讀取數(shù)據(jù),且存儲器驗證單元35繼續(xù)在加密步驟210中對所讀取的數(shù)據(jù)進(jìn)行加密。如果是,那么在終止步驟250中終止經(jīng)由總線接口 25的數(shù)據(jù)傳輸。
[0082]圖3為本發(fā)明一實施例所示的用于驗證經(jīng)由總線接口 25所接收的經(jīng)簽名數(shù)據(jù)的方法流程圖。在接收步驟255中,主機(jī)15接收簽名字30和經(jīng)加密數(shù)據(jù)字110的交錯序列100。解交錯器75將所接收的簽名字SiK與經(jīng)加密的數(shù)據(jù)字分離。在解密器80中經(jīng)加密的數(shù)據(jù)字被解密。
[0083]在使用步驟260中,主機(jī)完整性檢查引擎85使用解密的數(shù)據(jù)字Dj以計算簽名字
Si。在判定步驟270中,比較器90評估計算出的簽名字Si與所接收的簽名字SiK是否相等。如果不是,那么在失敗報告步驟280中,比較器90(通常是向處理器60)報告數(shù)據(jù)在總線接口 25上被篡改。否則,在成功報告步驟290中,比較器90 (通常是向處理器60)報告驗證成功。
[0084]圖2和圖3的流程圖中所公開的技術(shù)不限于驗證從存儲器裝置發(fā)送到主機(jī)的數(shù)據(jù)。所公開的累積驗證方案可用于驗證相反方向(即,驗證從主機(jī)發(fā)送到存儲器裝置)的數(shù)據(jù),和/或一般經(jīng)由任何其它合適接口所發(fā)送的數(shù)據(jù)。
[0085][計算用于累積驗證的簽名字]
[0086]在本發(fā)明的實施例中,其使用完整性檢查引擎(如分別在主機(jī)15和存儲器裝置20中的主機(jī)完整性檢查引擎85和存儲器完整性檢查引擎45)以在存儲器驗證單元35和主機(jī)驗證單元70 二者中計算簽名字120。完整性檢查引擎通常對輸入數(shù)據(jù)字Dj進(jìn)行散列運算以計算簽名字Si。散列寄存器用以計算并存儲經(jīng)由總線接口的數(shù)據(jù)字的散列序列。散列寄存器可例如以線性反饋移位寄存器(LFSR)來實現(xiàn)。
[0087]圖4A為本發(fā)明一實施例所示的完整性檢查引擎的第一實施方案的方塊圖。圖4A中的完整性檢查引擎300可以適用于圖1A所示的主機(jī)完整性檢查引擎85和存儲器完整性檢查引擎45。8比特數(shù)據(jù)字Dj [7:0]被輸入到線性反饋移位寄存器(LFSR)305。此示出的實例用密鑰K以對線性反饋移位寄存器305進(jìn)行初始化。線性反饋移位寄存器305被假定為足夠大(例如,至少64比特寬),使得攻擊者將無法通過密集的計算分析(例如,通過暴力)而估猜或評估線性反饋移位寄存器305的內(nèi)容。
[0088]將線性反饋移位寄存器305的輸出輸入到F區(qū)塊310,所述F區(qū)塊經(jīng)配置以應(yīng)用合適的非線性函數(shù)F,且所述非線性函數(shù)F用以經(jīng)由散列寄存器比特(例如,線性反饋移位寄存器305的比特)的子集來計算簽名字Si [7:0]的簽名比特?,F(xiàn)在假定線性反饋移位寄存器305在此示范性實施例中是以64比特來操作,且線性反饋移位寄存器305的輸出比特表示為LFSR[64:0]。在一些實施例中,可以用線性反饋移位寄存器305(其輸入數(shù)據(jù)為Dj[7:0])的輸出,并例如通過方程式(I)來計算出第i個簽名字Si [7:0]的簽名比特。所述方程式(I)如下:
[0089]F[7:0] = (LFSR[7:0]&LFSR[15:8])|(LFSR[15:8]&LFSR[23:16])|(LFSR[23:16]&LFSR[7:0])(I)
[0090]其中符號“&”表示按比特及運算(bitwise-and),且符號“I”表示按比特或運算(bitwise-or)。
[0091]圖4A和方程式⑴中所示的實施例僅用以使概念清楚,而非限制本發(fā)明的實施例。完整性檢查引擎可以通過使用任何合適算法的任何合適電路來實現(xiàn),以形成在圖1B所示出的交錯序列100中用以累積地對數(shù)據(jù)字進(jìn)行簽名的簽名字120。在其它實施例中,可以在主機(jī)15中使用完整性檢查引擎300來對讀取命令的請求命令和地址進(jìn)行散列運算,所述讀取命令可以在步驟200 (圖中未示出)中以安全的加密方式而發(fā)送到存儲器裝置20。隨后,可以使用與本文所述實施例相同的方法,以在系統(tǒng)10中對讀取命令和地址進(jìn)行簽名和驗證。
[0092]數(shù)據(jù)集包括來自經(jīng)由總線接口發(fā)送的所有數(shù)據(jù)字的數(shù)據(jù)。在一些實施例中,交錯序列100中的一些簽名字120可以由存儲器裝置20發(fā)送,以便在主機(jī)15已接收完所有數(shù)據(jù)字且進(jìn)行驗證之后對數(shù)據(jù)集進(jìn)行簽名。在其它實施例中,除了本文中描述的方法之外,在主機(jī)15已接收完數(shù)據(jù)集中的所有數(shù)據(jù)字之后,還可以使用其它驗證方法來驗證整個數(shù)據(jù)集。在其它實施例中,F(xiàn)區(qū)塊310可經(jīng)配置以選擇可使用簽名字120中的哪些比特來不斷地對數(shù)據(jù)字進(jìn)行簽名以及選擇哪些比特來對整個數(shù)據(jù)集進(jìn)行簽名。
[0093][用于經(jīng)由安全存儲器接口以進(jìn)行累積數(shù)據(jù)驗證以及評估存儲器完整性的簽名字]
[0094]在本文提供的其它實施例中,將簽名與數(shù)據(jù)字進(jìn)行交錯的方法不僅限于先前所描述的不斷地對經(jīng)由總線接口 25發(fā)送的數(shù)據(jù)字進(jìn)行簽名和驗證的方法。主機(jī)15還可以使用這些方法來在遠(yuǎn)端檢驗存儲在存儲器30中的數(shù)據(jù)的完整性。
[0095]在這些實施例中,存儲器驗證單元35將數(shù)據(jù)以陣列存儲在存儲器30中,且在所述陣列中,數(shù)據(jù)字的每一群組與經(jīng)由所述群組所計算出的相應(yīng)錯誤檢測碼(error detect1ncode,簡稱EDC)字一起存儲。錯誤檢測碼可例如包括32比特累積冗余校驗(CRC-32)碼或任何其它合適的錯誤檢測碼。存儲器裝置20中(可能在存儲器驗證單元35中)的專用邏輯電路通常通過用所存儲的數(shù)據(jù)重新計算錯誤檢測碼,并將計算出的錯誤檢測碼與存儲器30中的所存儲的錯誤檢測碼進(jìn)行比較,由此來檢驗數(shù)據(jù)完整性。
[0096]然而,在一些情況中,攻擊者可能會篡改存儲器裝置內(nèi)部電路,故此內(nèi)部驗證機(jī)制不完全可信。在本發(fā)明的實施例中,存儲器驗證單元35將使用錯誤檢測碼驗證所存儲的數(shù)據(jù)的任務(wù)委派給主機(jī)15。
[0097]在一些實施例中,存儲器驗證單元35形成混合簽名字,其包括用于不斷地對數(shù)據(jù)進(jìn)行簽名的簽名比特(例如,接口驗證比特)以及從存儲在存儲器30中的錯誤檢測碼字所導(dǎo)出的存儲器完整性比特二者,所述存儲器完整性比特用以檢驗存儲在存儲器30中的數(shù)據(jù)的完整性。本文中教示的實施例描述了存儲器裝置20形成混合簽名字的方法,并相對應(yīng)地描述了主機(jī)15以先前描述的類似方式來驗證經(jīng)簽名的數(shù)據(jù)字且對存儲在存儲器30中的數(shù)據(jù)的完整性進(jìn)行遠(yuǎn)端查驗的方法。
[0098]為了使用圖1A和圖1B以清楚解釋下述實施例的概念,混合簽名字可以用符號HSi表示并與符號Si互換?;旌虾灻忠部捎珊灻?20表示,且以類似于圖1B中的方式而在交錯序列100中與數(shù)據(jù)字110交錯,并經(jīng)由總線接口 25發(fā)送至主機(jī)15。術(shù)語“混合簽名字”與“混合簽名”在此可以互換使用。
[0099]圖4B為本發(fā)明一替代實施例所示的完整性檢查引擎的第二實施方案的方塊圖。完整性檢查引擎400用以在存儲器裝置20中產(chǎn)生表示為HSi的混合簽名字。
[0100]完整性檢查引擎400將數(shù)據(jù)字Dj [7:0]輸入至線性反饋移位寄存器(LFSR) 405的操作與完整性檢查引擎300類似。圖4B所示的實例通過密鑰(此處未示)來初始化線性反饋移位寄存器405,且假定線性反饋移位寄存器405是以64比特來操作。將線性反饋移位寄存器405的輸出LFSR[64:0]輸入到F區(qū)塊410,所述F區(qū)塊經(jīng)配置以應(yīng)用任何非線性函數(shù)F(例如方程式⑴所述),且所述非線性函數(shù)F用以經(jīng)由散列寄存器比特(例如,線性反饋移位寄存器405)的子集來計算簽名字Si [7:0]的簽名比特。
[0101]然而,第i個混合簽名字HSi [7:0]的混合簽名比特不僅是用線性反饋移位寄存器的輸出來計算,且還使用與數(shù)據(jù)字Dj [7:0] —起存儲在存儲器30中且與數(shù)據(jù)字Dj [7:0] —起提取出的錯誤檢測碼字(例如,CRC-32字)以進(jìn)行計算。在本文描述的實施例中,混合簽名字HSi的比特由接口驗證比特和用于檢驗存儲器完整性的存儲器完整性比特二者形成,并將于稍后描述。接口驗證比特是從方程式(I)導(dǎo)出,且用以如前所述般不斷地對數(shù)據(jù)字110進(jìn)行簽名。
[0102]除了數(shù)據(jù)字Dj[7:0]以外,完整性檢查引擎400還接收作為輸入且與數(shù)據(jù)字Dj [7:0] 一起存儲的錯誤檢測碼字,其中錯誤檢測碼字表示為CRCi [7:0]。數(shù)據(jù)字Dj [7:0]也被輸入至F’區(qū)塊415,且F’區(qū)塊415根據(jù)方程式(2)將函數(shù)F’ [7:0]應(yīng)用于散列寄存器比特(例如,LFSR[64:0])的子集。所述方程式(2)如下:
[0103]F,[7:0] = LFSR[39:32]&LFSR[31:24](2)
[0104]其中符號“&”表示按比特及運算(bitwise-and)。
[0105]基本上,F(xiàn)’[7:0]是應(yīng)用于多工器425的控制(比特選擇)終端的函數(shù),且Fi [7:0]和CRCi[7:0]被作為多工器425的信號輸入。整數(shù)k表示接口驗證比特F[k]、多工器控制比特F’ [k]和存儲器完整性比特CRC[k]中的第1^個比特,其中1^ = 0,1,2,...,?。形成8比特混合簽名字120的混合簽名比特HS[k]可由以下給出的方程式(3)來計算:
[0106]HS [k] = F[k](3)
[0107]其中,當(dāng)多工器控制比特F’ [k]為O時,混合簽名比特HS[k]等于接口驗證比特F[k],而當(dāng)多工器控制比特F’ [k]不為O時,混合簽名比特HS[k]則為存儲器完整性比特CRC[k]。
[0108]以此方式,形成混合簽名字的混合簽名比特HS[k]以幾乎隨機(jī)的方式共享由LFSR[64:0]計算出的接口驗證比特F[k]和存儲器完整性比特CRC[k],以使得在形成混合簽名字過程中,對此加密方法進(jìn)行解碼的攻擊幾乎不可能發(fā)生。
[0109]在一些實施例中,完整性檢查引擎400的修改配置可用以實現(xiàn)圖1A所示的主機(jī)完整性檢查引擎85。然而,在主機(jī)中,循環(huán)冗余校驗字CRCi則經(jīng)由所接收的數(shù)據(jù)字來計算。
[0110]圖5為本發(fā)明的一實施例所示的用于同時驗證經(jīng)由總線接口所接收的數(shù)據(jù)并查驗存儲在存儲器中的數(shù)據(jù)的方法流程圖。在接收步驟430中,主機(jī)15經(jīng)由總線接口 25從存儲器裝置20接收混合簽名字HSiK和經(jīng)加密數(shù)據(jù)字的交錯序列100。
[0111]在使用步驟435中,主機(jī)完整性檢查引擎85 (以完整性檢查引擎400來實現(xiàn))使用來自解密器80的數(shù)據(jù)字Dj,以由數(shù)據(jù)字Dj和循環(huán)冗余校驗字CRCi來計算混合簽名字HSi。對每一(混合)簽名字120 (所接收的混合簽名字HSiK和計算出的混合簽名字HSi)中的混合簽名比特HS[k]進(jìn)行分析,以便驗證經(jīng)由總線接口 25篡改的數(shù)據(jù)以及遠(yuǎn)端查驗存儲在存儲器30中的數(shù)據(jù)的完整性。
[0112]在判定步驟440中,比較器90通過評估以下方程式(4)中的邏輯相等性是否成立,由此評估所接收的簽名字和計算出的簽名字中的接口驗證比特(例如,F(xiàn)[k])是否相同。所述方程式(4)如下:
[0113](HS[k])&(?F,[k]) == F[k]&(?F,[k])(4)
[0114]其中,符號“&”表示按比特及運算(bitwise-and),符號“?”表示反運算(not),且符號“==“表示判斷邏輯相等性條件是否成立。
[0115]如果比較器90評估方程式(4)中的邏輯相等性成立,那么在報告步驟450中,t匕較器90報告所接收的數(shù)據(jù)在總線接口 25上被驗證。如果不是,那么在報告步驟445中,比較器90報告數(shù)據(jù)在總線接口 25上被篡改。換句話說,步驟450逐步地驗證交錯序列100中的數(shù)據(jù)字Dj 110。
[0116]在第二判定步驟455中,比較器90通過評估方程式(5)中的邏輯相等性是否成立,由此比較所接收的混合簽名字HSiR與計算出的混合簽名字HSi以評估存儲器完整性比特CRC[k]是否相同。所述方程式(5)如下:
[0117](HS[k])&(F,[k]) == F[k]&(F’ [k])(5)
[0118]其中,符號“&”表示按比特及運算(bitwise-and),且符號“ = = “表示判斷邏輯相等性條件是否成立。
[0119]如果比較器90評估方程式(5)中的邏輯相等性成立,那么在報告步驟465中,t匕較器90報告存儲在存儲器裝置20中的存儲器30中的數(shù)據(jù)未被篡改,即檢驗了存儲數(shù)據(jù)的完整性。如果不是,那么在報告步驟460中,比較器90報告存儲在存儲器裝置20中的數(shù)據(jù)被篡改。換句話說,步驟465逐步地檢驗存儲在存儲器30中的交錯序列100中的數(shù)據(jù)字Dj110的完整性。
[0120]最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)驗證方法,其特征在于,包括: 產(chǎn)生多個數(shù)據(jù)字的第一序列; 計算多個簽名字的第二序列,并將所述第二序列交錯至所述第一序列中以產(chǎn)生交錯序列,其中,所述交錯序列中的每一給定簽名字累積地對所述交錯序列中由先前簽名字所簽名的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字進(jìn)行簽名;以及 經(jīng)由接口傳輸所述交錯序列。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)驗證方法,其特征在于,還包括: 從所述接口接收所述交錯序列;以及 使用各所述簽名字逐步地驗證所述交錯序列中由所述先前簽名字所驗證的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)驗證方法,其特征在于,計算所述簽名字的所述第二序列包括: 應(yīng)用線性反饋移位寄存器于所述數(shù)據(jù)字;以及 應(yīng)用非線性函數(shù)于所述線性反饋移位寄存器的輸出。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)驗證方法,其特征在于,計算所述簽名字的所述第二序列包括: 設(shè)定所述給定簽名字的多個比特的第一子集,以對所述交錯序列中在所述給定簽名字之前的所述數(shù)據(jù)字進(jìn)行簽名;以及 從錯誤檢測碼導(dǎo)出所述給定簽名字的所述比特的第二子集, 其中,所述錯誤檢測碼是經(jīng)由所述數(shù)據(jù)字中的至少其中之一所計算,并存儲在存儲器中。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)驗證方法,其特征在于,還包括: 從所述接口接收所述交錯序列; 從所述簽名字提取所述比特的所述第一和第二子集; 使用所述第一子集以評估經(jīng)由所述接口傳送所述數(shù)據(jù)字的完整性;以及 使用所述第二子集以評估存儲所述數(shù)據(jù)字于所述存儲器中的所述完整性。
6.一種用于數(shù)據(jù)驗證的裝置,其特征在于,包括: 存儲器;以及 存儲器驗證單元,經(jīng)配置以產(chǎn)生多個數(shù)據(jù)字的第一序列以經(jīng)由接口發(fā)送,計算多個簽名字的第二序列,并將所述第二序列交錯至所述第一序列中以產(chǎn)生交錯序列,其中,所述交錯序列中的每一給定簽名字累積地對所述交錯序列中由先前簽名字所簽名的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字進(jìn)行簽名,以及經(jīng)由所述接口傳輸所述交錯序列。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括: 主機(jī),經(jīng)配置以從所述接口接收所述交錯序列,且使用各所述給定簽名字以驗證所述交錯序列中由所述先前簽名字所驗證的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述存儲器驗證單元經(jīng)配置以通過應(yīng)用線性反饋移位寄存器于所述數(shù)據(jù)字,以及應(yīng)用非線性函數(shù)于所述線性反饋移位寄存器的輸出,以計算所述簽名字的所述第二序列。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述存儲器驗證單元經(jīng)配置以設(shè)定所述給定簽名字中的多個比特的第一子集,以對所述交錯序列中在所述給定簽名字之前的所述數(shù)據(jù)字進(jìn)行簽名,以及從錯誤檢測碼導(dǎo)出所述給定簽名字的所述比特的第二子集,其中,所述錯誤檢測碼是經(jīng)由所述數(shù)據(jù)字中的至少其中之一所計算,并存儲在所述存儲器中。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括: 主機(jī),所述主機(jī)經(jīng)配置以從所述接口接收所述交錯序列,且從所述簽名字提取所述比特的所述第一子集和所述第二子集,并使用所述第一子集以評估經(jīng)由所述接口傳送所述數(shù)據(jù)字的完整性,以及使用所述第二子集以評估存儲所述數(shù)據(jù)字于所述存儲器中的所述完整性。
11.一種數(shù)據(jù)驗證方法,其特征在于,包括: 經(jīng)由接口接收由多個數(shù)據(jù)字的第一序列和多個簽名字的第二序列所形成的交錯序列,使得每一給定簽名字累積地對所述交錯序列中由先前簽名字所簽名的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字進(jìn)行簽名;以及 使用所述簽名字的所述第二序列來逐步地驗證所述數(shù)據(jù)字的所述第一序列。
12.一種用于數(shù)據(jù)驗證的裝置,其特征在于,包括: 驗證單元,經(jīng)配置以經(jīng)由接口接收由多個數(shù)據(jù)字的第一序列和多個簽名字的第二序列所形成的交錯序列,使得每一簽名字累積地對所述交錯序列中由先前簽名字所簽名的所述數(shù)據(jù)字以及位于所述先前簽名字與所述給定簽名字之間的所述數(shù)據(jù)字進(jìn)行簽名;以及使用所述簽名字的所述第二序列來逐步地驗證所述數(shù)據(jù)字的所述第一序列;以及 處理器,所述處理器經(jīng)配置以處理所述經(jīng)驗證的數(shù)據(jù)字。
【文檔編號】G06F21/62GK104463007SQ201410482525
【公開日】2015年3月25日 申請日期:2014年9月19日 優(yōu)先權(quán)日:2013年9月22日
【發(fā)明者】厄瑞·卡路茲尼, 尼爾·塔莎 申請人:華邦電子股份有限公司