用于對數(shù)據(jù)進(jìn)行加密和解密的方法和架構(gòu)的制作方法
【技術(shù)領(lǐng)域】
[0001]本公開描述了使用密鑰對在計算機(jī)可讀存儲器上存儲的數(shù)據(jù)進(jìn)行加密和解密的方法。具體地,公開了對數(shù)據(jù)進(jìn)行加密和解密的方法,其中密鑰的有效性與計算機(jī)可讀存儲器中存儲的數(shù)據(jù)的可靠性相關(guān)聯(lián)。
【背景技術(shù)】
[0002]當(dāng)前銷售的許多設(shè)備是單一管芯集成電路(稱為1C),其中精簡指令集計算(RISC)微控制器(例如ARM)或復(fù)雜指令集計算(CISC)微控制器(例如8051核)控制例如串行鏈路、通用輸入/輸出(GP1)之類的多個外部設(shè)備。在內(nèi)部計算機(jī)可讀存儲器(例如閃存、EEPROM或ROM中)存儲微控制器數(shù)據(jù)和代碼。這些設(shè)備中的一些在安全性重要的應(yīng)用中(例如在涉及例如電表、信用卡等匯款的情況下)使用。對于這些系統(tǒng)中的一些,重要的是確保保護(hù)在內(nèi)部存儲器中存儲的代碼不受對它的保密性、完整性和可靠性的攻擊。
[0003]為了保護(hù)代碼的保密性,通常使用閃存的加密,使得即使經(jīng)由調(diào)試能力或故障分析工具來下載存儲器的整個內(nèi)容,內(nèi)容仍然保密。然而,僅當(dāng)用于加密的密鑰也可以保密的時候這才適用。如果將密鑰按照與密鑰所保護(hù)的數(shù)據(jù)相同的技術(shù)存儲,則這可能難于實現(xiàn)。一種解決方案是使用模糊,或者使用例如物理不可克隆功能(PUF)的不同技術(shù)來保護(hù)加密密鑰,但是這或者由于密鑰可能必須由CPU處理而不總有效,或者它可能太昂貴以致于不能實施。
[0004]保護(hù)數(shù)據(jù)的完整性和可靠性的其他方法可以包括使用帶符號的散列。在這種方法中,公鑰在不可變的存儲器(例如ROM)中存儲,并用于驗證散列。將這種散列與CPU在引導(dǎo)時間計算出的散列相比較,所述引導(dǎo)時間將仔細(xì)校驗存儲器。如果不存在匹配,則將停止引導(dǎo)過程。這種方法的一個缺點是散列計算很昂貴,通常需要100次循環(huán)來計算每個字節(jié),并將減慢引導(dǎo)過程。此外,可能足以引入錯誤來跳過有福好的散列和計算出的散列之間的比較。這也將不會保護(hù)源代碼的修改,通過故障產(chǎn)生或者通過引導(dǎo)之后的源代碼插入引起所述源代碼的修改。由于簽名驗證和散列昂貴,它們在引導(dǎo)之后通常不重復(fù)。
[0005]總之,即使在系統(tǒng)中使用加密,仍存在以下問題:如何維持加密密鑰保密性和如何保護(hù)源代碼的完整性和可靠性,而不會由于在引導(dǎo)時以及一旦系統(tǒng)啟動時使用簽名和散列而引起高計算時間消耗。以下公開目的在于解決這些問題。
【發(fā)明內(nèi)容】
[0006]根據(jù)發(fā)明的第一方面,提供了一種對在設(shè)備的計算機(jī)可讀存儲器內(nèi)存儲的數(shù)據(jù)進(jìn)行加密的方法,所述方法包括以下步驟:提供密鑰;使用所述密鑰對在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)進(jìn)行加密;基于在所述計算機(jī)可讀存儲器中存儲的參數(shù)來產(chǎn)生驗證代碼;使用所述驗證代碼來包裝密鑰以生成包裝后的密鑰;以及將所述包裝后的密鑰存儲在計算機(jī)可讀存儲器中,其中所述包裝后的密鑰的有效性與在所述計算機(jī)可讀存儲器中存儲的數(shù)據(jù)的可靠性相關(guān)聯(lián)。
[0007]上述方法可以應(yīng)用于基于微控制器的集成電路,用于控制多個外部設(shè)備,以及應(yīng)用于在應(yīng)用需要一些安全性的情況下(例如當(dāng)涉及金錢時,例如在用于電表的微控制器和在安全元件(例如信用卡)中)。
[0008]所述設(shè)備可以是微控制器和/或微處理器。所述設(shè)備可以是包括硬件加速度計的微控制器(例如存儲器加密單元)。
[0009]使用密鑰對計算機(jī)可讀存儲器中存儲的數(shù)據(jù)進(jìn)行加密包括以下步驟:使用位于計算機(jī)可讀存儲器內(nèi)的至少一個存儲器位置的密鑰來生成密文??梢曰诩用芊椒ㄊ褂糜嫈?shù)器來生成密文??梢圆捎玫钠渌椒òㄝ敵龇答伝蛎艽a反饋。還可以使用XTS模式(基于“異或加密-“異或”的密文竊取算法的可調(diào)整的密碼本模式)。允許隨機(jī)訪問的其他模式也適用。如果要求從微控制器執(zhí)行的隨機(jī)訪問,則具有反饋的模式更難于使用,但是如果在引導(dǎo)時執(zhí)行所述存儲器向另一個存儲器的復(fù)制,則可以執(zhí)行。
[0010]用于生成驗證代碼的參數(shù)可以包括在使用密鑰加密的存儲器中的至少一個存儲器位置的密文。這將驗證代碼的值與加密存儲器的內(nèi)容完整性聯(lián)系起來。因此,數(shù)據(jù)內(nèi)容中任意調(diào)整導(dǎo)致不同的驗證代碼。此外,這增加了加密的安全性,因為僅可以通過確定存儲器中的(加密)數(shù)據(jù)的內(nèi)容來生成正確的驗證代碼。如果存儲器的整個內(nèi)容用于生成驗證代碼,則必須知曉存儲器的整個內(nèi)容來重新生成正確的驗證代碼。
[0011]在實施例中,使用密鑰對在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)加密還包括:對存儲器中至少一個位置的密文執(zhí)行消息驗證代碼的步驟。這提高了在計算機(jī)可讀存儲器中加密的數(shù)據(jù)的安全性。
[0012]此外,使用驗證代碼來包裝存儲器中的至少一個位置的密文可以包括以下步驟:對密文執(zhí)行消息驗證代碼。經(jīng)歷這種步驟確保了由計算機(jī)可讀存儲器提供的密文與使用由計算機(jī)可讀存儲器供應(yīng)的參數(shù)所生成的期望密文相匹配。
[0013]使用驗證代碼來包裝密鑰以生成包裝后的密鑰可以包括:使用消息驗證代碼來對密鑰進(jìn)行加密的步驟。如以上提及的,這一步驟提供附加的驗證步驟,以確保生成的密鑰與供應(yīng)的密鑰相匹配。
[0014]在這些實施例中,消息驗證代碼(MAC)可以是基于密文的消息驗證代碼(例如CMAC),或者是加密塊鏈消息驗證代碼(稱為CBC-MAC),或者是可并行消息驗證代碼(稱為PMAC)。還可以是基于散列算法的其他結(jié)構(gòu)。
[0015]因此,包裝后的密鑰可以看作是使用代碼加密的密鑰,例如由加密模式產(chǎn)生的驗證代碼或驗證標(biāo)簽(例如CMAC)。
[0016]與提供密鑰有關(guān)的另外實施例可以包括步驟:將密鑰存儲在存儲器加密單元(稱為MEU)中。MEU可以與設(shè)備(例如微處理器的核)一體化。備選地,MEU可以設(shè)置為單獨的微處理器。在這些實施例中,可以通過MEU進(jìn)行使用密鑰對計算機(jī)可讀存儲器中存儲的數(shù)據(jù)加密的步驟。MEU進(jìn)行的其他步驟可以包括步驟:要求將MAC應(yīng)用于加密的數(shù)據(jù)和密鑰。具體地,可以在MEU上進(jìn)行使用驗證代碼包裝密鑰以便生成包裝后的密鑰的步驟??梢栽谠O(shè)備的上電序列期間在MEU內(nèi)臨時存儲密鑰。可以從閃存中獲取密鑰,可以在設(shè)備的斷電期間在閃存中存儲密鑰。
[0017]計算機(jī)可讀存儲器的示例是非易失存儲器(例如EEPR0M、閃存和ROM)??梢允褂玫挠嬎銠C(jī)可讀存儲器的其他示例包括RAM和基于磁性的存儲器。
[0018]根據(jù)第二方面,描述了一種對在設(shè)備的計算機(jī)可讀存儲器內(nèi)存儲的數(shù)據(jù)進(jìn)行解密的方法,所述方法包括以下步驟:從計算機(jī)可讀存儲器中獲取第一包裝后的密鑰;基于計算機(jī)可讀存儲器中存儲的參數(shù)來計算第一驗證代碼;使用所述驗證代碼對第一包裝后的密鑰去包裝以獲取密鑰;以及使用密鑰對加密的數(shù)據(jù)進(jìn)行解密以提供解密的數(shù)據(jù),其中密鑰的有效性與在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)的可靠性相關(guān)聯(lián)。
[0019]在第二方面的實施例中,所述方法還可以包括以下步驟:從計算機(jī)可讀存儲器獲取第二包裝后的密鑰;基于依據(jù)計算機(jī)可讀存儲器的每個位置的參數(shù)來計算第二驗證代碼;以及對計算機(jī)可讀存儲器中存儲的所有數(shù)據(jù)進(jìn)行解密,使得在計算機(jī)可讀存儲器中存儲的所有解密數(shù)據(jù)的有效性與在計算機(jī)可讀存儲器中存儲的所有數(shù)據(jù)的可靠性相關(guān)聯(lián)。
[0020]優(yōu)選地,可以通過在關(guān)于第一方面描述的任意實施例中描述的加密方法來提供第一和/或第二包裝后的密鑰。
[0021]根據(jù)第三方面,描述了一種存儲器加密單元,用于對在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)進(jìn)行加密,所述存儲器加密單元包括:多個緩沖器和多個單元,其中所述緩沖器包括:密鑰寄存器,用于接收密鑰;基于密文的消息驗證代碼寄存器,用于接收和存儲驗證代碼,所述驗證代碼與在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)相關(guān)聯(lián);以及包裝后的密鑰寄存器,用于接收和發(fā)送包裝后的密鑰,其中所述包裝后的密鑰是用驗證代碼進(jìn)行加密的密鑰,并且其中所述單元包括:加密核,用于使用密鑰對在計算機(jī)可讀存儲器中存儲的數(shù)據(jù)進(jìn)行加密和解密;以及操作模塊,用于實現(xiàn)驗證代碼。
[0022]在第三方面,實施例還可以包括地址解碼和生成單元,用于向加密核提供密鑰,以及向操作模塊提供驗證代碼。所述操作模塊可以是數(shù)據(jù)“異或”門(稱為“X0R”),其可以進(jìn)行對驗證代碼(例如由加密核提供的數(shù)據(jù))的邏輯“異或”操作。
[0023]上述方法保護(hù)包裝后的密鑰的保密性。因為密鑰用加密的形式在計算機(jī)可讀存儲器內(nèi)存儲,CPU是否訪問密鑰不重要。可以僅與驗證代碼結(jié)合地使用密鑰。此外,由于驗證代碼的有效性取決于計算機(jī)可讀存儲器的可靠性,必須下載計算機(jī)可讀存儲器以正確地計算驗證代碼。CPU本身不能計算驗證代碼,原因在于僅向它提供對計算機(jī)可讀存儲器的加密內(nèi)容的訪問。
[0024]此外,保護(hù)了加密過程的完整性。例如對計算機(jī)可讀存儲器的單個