。標頭塊106可以用以存儲數(shù)據(jù)結(jié)構(gòu)(例如,元數(shù)據(jù)結(jié)構(gòu))。
[0034]處理電路102可以經(jīng)配置以實施MAC產(chǎn)生器112,所述MAC產(chǎn)生器針對每一標頭塊106或存儲器塊114計算MAC 110且將此MAC 110存儲在每一對應(yīng)標頭塊106中。在一個實例中,MAC產(chǎn)生器(例如,處理電路或模塊)可以實施具有多個循環(huán)或迭代的特定MAC算法116 (例如,基于散列的消息驗證代碼(HMAC)-安全散列算法I (SHA-1)、高級加密標準(AES)-基于密文的MAC(CMAC)及數(shù)據(jù)驗證算法(DAA)等)。
[0035]有時也稱為帶密鑰或加密散列函數(shù)的典型MAC算法116接受秘密密鑰118及待驗證的任意長度消息120作為輸入且輸出MAC值。MAC值通過允許檢驗者(此外擁有秘密密鑰的人)檢測對消息內(nèi)容(例如,標頭塊106及/或存儲器塊114)的任何改變而保護消息的數(shù)據(jù)完整性以及其真實性兩者。
[0036]在各種實例中,MAC算法116可以包含存儲器地址122作為“消息”輸入120的一部分,標頭塊開始于所述存儲器地址處、塊保留的存儲器空間開始于所述存儲器地址及/或數(shù)據(jù)結(jié)構(gòu)中的特定元數(shù)據(jù)保存在所述存儲器地址處。此MAC可以存儲在數(shù)據(jù)結(jié)構(gòu)中(標頭塊106中)且每當讀取或?qū)懭霐?shù)據(jù)結(jié)構(gòu)時進行檢查。另外,MAC算法116還可以包含其它輸入1...η 124作為“消息”輸入120的一部分,例如,標頭塊(例如,存儲在其中的數(shù)據(jù)結(jié)構(gòu))的內(nèi)容及/或命令。由于基于對應(yīng)標頭塊106a中的至少一些信息(例如,用于存儲器塊114a或塊保留的存儲器空間108a的存儲器地址、存儲器塊114a或塊保留的存儲器空間108a的大小等)計算MAC 110a,因此可以通過檢驗對應(yīng)MAC IlOa檢測篡改標頭塊106a、用于存儲器塊114a或塊保留的存儲器空間108a的地址及/或?qū)?yīng)存儲器塊114a及/或塊保留的存儲器空間108a的大小的任何嘗試。
[0037]然而,此方法具有計算量大的缺點,從而每當存取數(shù)據(jù)結(jié)構(gòu)(標頭塊106)時需要加密MAC運算。典型的加密MAC算法(例如,HMAC-SHA-1、AES-CMAC、DAA等)尋求通過在計算MAC時實施多個計算量大的循環(huán)及/或產(chǎn)生偽隨機掩模值而提供更大安全性。因此,典型的加密MAC運算是計算密集型的且每當計算加密MAC時可能消耗相當大的處理資源。
[0038]如果通常存取存儲器塊114 (例如,及/或?qū)?yīng)標頭塊106中的數(shù)據(jù)結(jié)構(gòu)),這在數(shù)據(jù)結(jié)構(gòu)保存關(guān)于例如堆存儲器結(jié)構(gòu)等的存儲器分配的信息的情況下是很可能的,那么MACllO的檢驗可能消耗不可接受的處理資源。
[0039]使用預(yù)先產(chǎn)生的密鑰及/或掩模的具有簡潔消息驗證代碼的示例性存儲器結(jié)構(gòu)
[0040]圖2是說明使用相較于圖1的加密MAC計算更高效的MAC-Lite產(chǎn)生器保護數(shù)據(jù)結(jié)構(gòu)的另一方法的方框圖。處理電路202可以耦合到及/或集成存儲器裝置204或存儲裝置。存儲器裝置204可以包含布置為存儲器塊214a、214b及/或214c的存儲器空間。每一存儲器塊214a、214b、214c可以包含標頭塊206a、206b及206c及對應(yīng)塊保留的存儲器空間208a、208b及208c。標頭塊206可以用以存儲數(shù)據(jù)結(jié)構(gòu)(例如,元數(shù)據(jù)結(jié)構(gòu))。
[0041]處理電路202可以經(jīng)配置以實施MAC Lite產(chǎn)生器212,其針對每一標頭塊206或存儲器塊214計算MAC 210且將此MAC 210存儲在每一對應(yīng)標頭塊206中。在一個實例中,MAC產(chǎn)生器212 (例如,MAC處理電路或模塊)可以實施特定MAC-Lite算法216,其中多個啟動產(chǎn)生的密鑰218及/或啟動產(chǎn)生的掩模217用于產(chǎn)生消息輸入220 (例如,數(shù)據(jù)結(jié)構(gòu))的 MAC。
[0042]多個啟動產(chǎn)生的密鑰218及/或啟動產(chǎn)生的掩模217可以用于在啟動之間或在應(yīng)用會話期間產(chǎn)生MAC。舉例來說,來自多個啟動產(chǎn)生的密鑰218及/或啟動產(chǎn)生的掩模217的選定密鑰及/或掩??梢杂糜谠谥芷诨驎捚陂g產(chǎn)生用于所有數(shù)據(jù)結(jié)構(gòu)的所有MAC。
[0043]在各種實例中,MAC-Lite算法216可以包含存儲器地址222作為“消息”輸入220的一部分,標頭塊開始于所述存儲器地址處、塊保留的存儲器空間開始于所述存儲器地址處及/或數(shù)據(jù)結(jié)構(gòu)的特定元數(shù)據(jù)保存在所述存儲器地址處。消息輸入(例如,存儲器地址等)中的至少一者可以用于從啟動產(chǎn)生的密鑰218選擇不同的多個一或多個密鑰及/或從啟動產(chǎn)生的掩模217選擇掩模。選定密鑰及/或掩模隨后用于產(chǎn)生MAC 210,同時在運行時避免多個計算量大的循環(huán)及/或偽隨機掩模值的計算。
[0044]另外,MAC算法216還可以包含其它輸入1...η 224作為“消息”輸入220的一部分,例如,標頭塊(例如,存儲在其中的數(shù)據(jù)結(jié)構(gòu))的內(nèi)容。由于基于對應(yīng)標頭塊206a中的至少一些信息(例如,用于存儲器塊214a或塊保留的存儲器空間208a的存儲器地址、存儲器塊214a或塊保留的存儲器空間208a的大小等)計算MAC 210a,因此可以通過檢驗對應(yīng)MAC 210a檢測篡改標頭塊206a、用于存儲器塊214a或塊保留的存儲器空間208a的地址及/或?qū)?yīng)存儲器塊214a及/或塊保留的存儲器空間208a的大小的任何嘗試。
[0045]此MAC 210可以存儲在數(shù)據(jù)結(jié)構(gòu)中(標頭塊206中)且每當存取(例如,讀取或?qū)懭氩僮?數(shù)據(jù)結(jié)構(gòu)時進行檢查。
[0046]圖3說明MAC-Lite算法302的實例,其相較于圖1的加密MAC計算更高效,同時相較于循環(huán)冗余檢查(CRC)或探測值具有更高安全性。此MAC-Lite算法302可以例如通過圖2中的MAC-Lite產(chǎn)生器212實施。
[0047]在此方法中,密鑰304及/或掩模306的集合可以在開機及/或啟動時預(yù)先產(chǎn)生且隨后可以用于(例如,在整個會話期間)產(chǎn)生一或多個存儲器塊的MAC。舉例來說,多個密鑰304k[0] [0]、…、k[n] [NK-1]可以隨機或偽隨機地產(chǎn)生(例如,基于隨機或偽隨機值產(chǎn)生)。在此實例中,多個密鑰304k[0] [0]、…、k[n][NK-l]已被分組成多個子集306a、306b及306c,包含密鑰的第一子集306a k[0][0]、…、k[0] [NK-1]、密鑰的第二子集306bk[l][0]、…、k[l] [NK-1],及密鑰的第三子集 306c k[N][0]、…、k[n] [NK-1]。這些密鑰值應(yīng)該是秘密的且不可由潛在攻擊者改變。
[0048]類似地,包含mask [O]、mask [I]、…、mask[NM_l]的多個掩模值308,可以在開機及/或啟動時預(yù)先產(chǎn)生且隨后可以用于(例如,在整個會話期間)產(chǎn)生一或多個存儲器塊的 MAC。
[0049]在此實例中,MAC-Lite算法302可以采用如下項作為輸入:多個輸入Input_l310a、Input_2 310b及Input_n 310c、可變存儲器地址312、預(yù)先選定或預(yù)定的質(zhì)數(shù)p 314、選定掩模316及/或選自密鑰304的集合的選定的多個密鑰318。在一個實例中,掩模值308,即mask[0]、mask[l]、.'maskliNM-l]可以各自與質(zhì)數(shù)P 314具有相同位長度。另外,在密鑰304的集合中的密鑰值k[O] [O]、…、k[n][NK-l]可以在O與p_l (包含的)之間。
[0050]對于給定存儲器塊,可以使用MAC Lite算法302產(chǎn)生MAC。多個密鑰318可以例如基于從可變存儲器地址312產(chǎn)生的一或多個索引選自密鑰304的集合。例如,函數(shù)f及可變存儲器地址312addr可以用以產(chǎn)生密鑰索引:f(addr) = key_index_0、…、key_index_no舉例來說,密鑰索引中的每一者可以在整數(shù)值O與NK-1之間。因此,密鑰318的選定集合可以選自多個密鑰304的子集306a、306b及306c中的每一者。
[0051]類似地,掩模316可以例如基于從可變存儲器地址312產(chǎn)生的索引選自多個掩模值308。例如,相同或不同函數(shù)f及可變存儲器地址312addr可以用以產(chǎn)生掩模索引:f (addr) = mask_index。舉例來說,mask_index 313可以在整數(shù)值O與NM-1之間。因此,掩模316可以選自多個掩模308。
[0052]選定的多個密鑰318、選定掩模316、質(zhì)數(shù)p 314及可變存儲器地址312、input,I310a、input_2 310b、…、input_n310可以通過產(chǎn)生難以預(yù)測的MAC輸出的方式組合。在存儲器管理的情況下,可變存儲器地址(addr)312可以例如是用于存儲器結(jié)構(gòu)的標頭塊的開始地址。同樣地,多個其它輸入變量input_l 310a、input_2 310b、…、input_n 310