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