本發(fā)明涉及諸如智能卡之類的安全元件領(lǐng)域。特別地,本發(fā)明提供用于使將數(shù)據(jù)加載到安全元件的非易失性存儲(chǔ)器中安全的方法和設(shè)備。
背景技術(shù):
安全元件,例如智能卡,典型地以微型電路的形式呈現(xiàn),以可移除的方式被集成在主電子設(shè)備中,或者作為變型被嵌入(例如焊接)到這種電子設(shè)備中。以示例的方式,安全元件可以是eSE(“embedded secure element”,嵌入式安全元件)或eUICC(“embedded Universal Integrated Circuit Card”,嵌入式通用集成電路卡)。
安全元件包括其專有的處理器(該處理器與在其中集成或嵌入了安全元件的主電子設(shè)備的處理器是不同的)并包括用于存儲(chǔ)處理器可執(zhí)行的計(jì)算機(jī)程序的非易失性存儲(chǔ)器。
非易失性存儲(chǔ)器的不可修改區(qū)域存儲(chǔ)通常為小尺寸的稱作“初始”或“基礎(chǔ)”的程序,例如由安全元件的制造商存儲(chǔ)的引導(dǎo)加載程序(Boot Loader)。初始程序提供允許諸如運(yùn)營(yíng)商或向用戶供應(yīng)安全元件的供應(yīng)商之類的中介通過(guò)將軟件元件加載到由初始程序定義的非易失性存儲(chǔ)器的特別區(qū)域中來(lái)使安全元件個(gè)性化的功能,所述軟件元件通常由經(jīng)編譯或解釋的代碼構(gòu)成(即,使用處理器直接可執(zhí)行的語(yǔ)言或機(jī)器碼的碼字或字節(jié)碼(“bytecodes”)),例如操作系統(tǒng)或應(yīng)用。該初始程序例如與具體操作系統(tǒng)相關(guān)聯(lián),該具體操作系統(tǒng)尤其包括允許與該初始程序通信的端口管理模塊、存儲(chǔ)器的更新管理模塊、命令解釋器、和保證該初始程序安全的安全模塊。由安全元件的制造商來(lái)使該具體操作系統(tǒng)個(gè)性化,并且在其個(gè)性化完成后不允許對(duì)其進(jìn)行修改。
一般地,該初始程序是在安全元件的啟動(dòng)期間實(shí)施的第一個(gè)程序,即在可能將出現(xiàn)在安全元件的存儲(chǔ)器中的所有其他程序之前。該程序是實(shí)施安全元件的其他程序所必要的。
上述非易失性存儲(chǔ)器的特別區(qū)域全部由該初始程序管理,只有該初始程序能夠修改該特別區(qū)域的界限及其內(nèi)容。
更確切地,這些界限可以被存儲(chǔ)在初始程序的寄存器中,或可替換地,為由初始程序執(zhí)行定義這些界限的命令的結(jié)果。在全部情況中,界限的定義以及全部修改只能夠由初始程序的動(dòng)作引起。
此外,只有初始程序能夠啟用(或禁用)該特別區(qū)域使得允許(或禁止)其內(nèi)容的執(zhí)行。
一般地,上述區(qū)域?qū)S糜诮?jīng)編譯或解釋的代碼的存儲(chǔ),為此,在下文中該區(qū)域被稱作“代碼存儲(chǔ)區(qū)域”。特別重要的是,代碼存儲(chǔ)區(qū)域在其包含的軟件元件的執(zhí)行期間不被修改,以便確保在安全元件中這些軟件元件實(shí)施的應(yīng)用和操作系統(tǒng)的完整性。
在安全元件的壽命期間,其他軟件元件可以被加載到代碼存儲(chǔ)區(qū)域中。這涉及例如已存儲(chǔ)的軟件元件的新版本(軟件元件的更新)或新數(shù)據(jù)。為了在啟用之前(即在允許執(zhí)行之前)確保今后被加載在代碼存儲(chǔ)區(qū)域中的這些軟件元件的完整性和合法性,典型地由初始程序?qū)嵤z驗(yàn)機(jī)制。
例如,文件FR 2 993 682描述了在安全元件啟動(dòng)期間執(zhí)行的引導(dǎo)加載程序,其允許當(dāng)安裝的操作系統(tǒng)變得過(guò)期時(shí),從更新設(shè)備獲得操作系統(tǒng)新版本的代碼。在允許啟用操作系統(tǒng)的新版本之前,由引導(dǎo)加載程序逐代碼塊以及針對(duì)全部代碼檢驗(yàn)操作系統(tǒng)的該新版本的代碼的完整性。
然而,完整性檢驗(yàn)只涉及所接收并加載的新的軟件元件。
因此,因?yàn)橥暾詸z驗(yàn)僅針對(duì)新加載的軟件元件,所以由攻擊者在加載新軟件元件之前存儲(chǔ)到代碼存儲(chǔ)區(qū)域中的惡意軟件(malware)類型的軟件元件,在該完整性檢驗(yàn)期間未被引導(dǎo)加載程序檢測(cè)到。因此存在安全缺陷。
同樣地,當(dāng)攻擊者修改或損壞(例如通過(guò)攻擊激光)已經(jīng)存儲(chǔ)在該代碼存儲(chǔ)區(qū)域中的軟件元件時(shí),存在安全缺陷。事實(shí)上,針對(duì)加載的新軟件元件的完整性檢驗(yàn)不允許識(shí)破該代碼存儲(chǔ)區(qū)域的內(nèi)容的修改或損壞。
因此存在改善安全元件的安全保護(hù)控制,并且尤其是在將數(shù)據(jù)加載到該存儲(chǔ)區(qū)域中期間軟件元件完整性的需要。
技術(shù)實(shí)現(xiàn)要素:
因此,本發(fā)明的目的是克服這些缺點(diǎn)中的至少一個(gè)缺點(diǎn)。
在該背景下,本發(fā)明的第一方面涉及一種使數(shù)據(jù)到安全元件的非易失性存儲(chǔ)器中的加載安全的方法,所述非易失性存儲(chǔ)器包括稱作代碼存儲(chǔ)區(qū)域的存儲(chǔ)區(qū)域,該代碼存儲(chǔ)區(qū)域由安全元件的初始程序定義并且其任何修改僅由所述初始程序控制,所述方法包括由安全元件的外部設(shè)備實(shí)施的以下步驟:
-獲得待傳送到安全元件的數(shù)據(jù);
-模擬通過(guò)將所獲得的數(shù)據(jù)加載到安全元件的該代碼存儲(chǔ)區(qū)域而被修改代碼存儲(chǔ)區(qū)域的圖像;
-計(jì)算整個(gè)代碼存儲(chǔ)區(qū)域的模擬的圖像的簽名;和
-向所述安全元件傳送所獲得的數(shù)據(jù)和所計(jì)算的簽名。
相應(yīng)地,本發(fā)明的第二方面涉及一種使數(shù)據(jù)到安全元件的非易失性存儲(chǔ)器中的加載安全的方法,所述非易失性存儲(chǔ)器包括稱作代碼存儲(chǔ)區(qū)域的存儲(chǔ)區(qū)域,該代碼存儲(chǔ)區(qū)域由安全元件的初始程序定義并且其任何修改僅由所述初始程序控制,所述方法包括由安全元件實(shí)施的以下步驟:
-從外部設(shè)備接收數(shù)據(jù)和簽名;
-將從外部設(shè)備接收的數(shù)據(jù)加載到代碼存儲(chǔ)區(qū)域的一部分中;
-數(shù)據(jù)加載后,計(jì)算整個(gè)代碼存儲(chǔ)區(qū)域的簽名;和
-借助所接收的簽名檢驗(yàn)所計(jì)算的簽名,使得僅在這兩個(gè)簽名相同的情況下準(zhǔn)許執(zhí)行代碼存儲(chǔ)區(qū)域的內(nèi)容。
因此,本發(fā)明允許控制加載到安全元件中的數(shù)據(jù)的完整性,以及在這些數(shù)據(jù)加載之后代碼存儲(chǔ)區(qū)域的完整性,所述數(shù)據(jù)只占據(jù)該存儲(chǔ)區(qū)域的僅一部分。
該優(yōu)點(diǎn)是借助以下獲得的:基于針對(duì)整個(gè)存儲(chǔ)區(qū)域的圖像的模擬來(lái)計(jì)算簽名,該整個(gè)存儲(chǔ)區(qū)域可能得自由全部數(shù)據(jù)的加載,而不是如現(xiàn)有技術(shù)中的僅考慮所加載的數(shù)據(jù)獲得的。
因此外部設(shè)備模擬代碼存儲(chǔ)區(qū)域的比特中的每個(gè)比特的位置和值,所述每個(gè)比特可能通過(guò)加載待加載的數(shù)據(jù)修改或者未被修改。
因?yàn)榇嬖谄渲岛?或其位置非期待的代碼,這導(dǎo)致在外部設(shè)備處針對(duì)所模擬的圖像計(jì)算的簽名與由安全元件自己在數(shù)據(jù)有效加載之后針對(duì)存儲(chǔ)區(qū)域計(jì)算的簽名不同,所以在代碼存儲(chǔ)區(qū)域內(nèi)可以檢測(cè)到代碼存儲(chǔ)區(qū)域中的其值和/或其位置非期待的代碼。
因此,當(dāng)由設(shè)備根據(jù)對(duì)應(yīng)于數(shù)據(jù)加載之后存儲(chǔ)器狀態(tài)的代碼存儲(chǔ)區(qū)域的模擬的圖像所計(jì)算的簽名,與這些數(shù)據(jù)有效加載之后的代碼存儲(chǔ)區(qū)域的簽名不同的情況下,代碼存儲(chǔ)區(qū)域的啟用,即其內(nèi)容的執(zhí)行、和因此特別地,加載到安全元件中的數(shù)據(jù)的執(zhí)行是不可能的(即被禁止)。因此使得加載數(shù)據(jù)以執(zhí)行該數(shù)據(jù)變得安全。
本發(fā)明因此允許檢測(cè)出經(jīng)編譯或解釋的代碼的僅一部分(或者更一般的,非期待的數(shù)據(jù))已經(jīng)被存儲(chǔ)在了代碼存儲(chǔ)區(qū)域的非期待的位置處,或者其不具有所期待的值。
例如,由安全元件的初始程序在檢驗(yàn)針對(duì)在所述加載之后獲得的整個(gè)存儲(chǔ)區(qū)域計(jì)算的簽名期間,借助從外部設(shè)備接收的預(yù)先的簽名來(lái)檢測(cè)惡意軟件元件的存在,或者甚至在數(shù)據(jù)加載期間已經(jīng)在存儲(chǔ)器中的軟件元件的修改或損壞。
根據(jù)本發(fā)明的實(shí)施方式的其他特征在從屬權(quán)利要求中描述。
在本發(fā)明的具體實(shí)施方式中,響應(yīng)于數(shù)據(jù)獲得請(qǐng)求,所述數(shù)據(jù)被傳送到安全元件,并且獲得請(qǐng)求包括識(shí)別安全元件的信息。
在本發(fā)明的具體實(shí)施方式中,響應(yīng)于數(shù)據(jù)獲得請(qǐng)求,所述數(shù)據(jù)被傳送到安全元件,并且獲得請(qǐng)求包括代表安全元件的代碼存儲(chǔ)區(qū)域的當(dāng)前圖像的軟件配置的唯一標(biāo)識(shí)符。
因此,外部設(shè)備能夠收回該當(dāng)前圖像并有效地進(jìn)行由數(shù)據(jù)加載修改的存儲(chǔ)器的圖像的模擬。實(shí)際上,代碼存儲(chǔ)區(qū)域的比特的設(shè)置及實(shí)際值可以是準(zhǔn)確已知的。
在本發(fā)明的具體實(shí)施方式中,在來(lái)自外部設(shè)備的加密命令中,簽名與所獲得的數(shù)據(jù)的啟用要求(即,允許執(zhí)行的要求)一起被傳送到安全元件。
因?yàn)閱⒂靡蠛驮趩⒂?即允許執(zhí)行)之前的檢驗(yàn)所必需的簽名被聯(lián)合地保護(hù),所以該設(shè)備使允許執(zhí)行的過(guò)程安全。
要注意的是,可以在正確的簽名檢驗(yàn)之后立即實(shí)現(xiàn)啟用,或者在以后例如在安全元件的下一次啟動(dòng)時(shí)啟用。后一個(gè)啟用允許尤其是當(dāng)所提及的數(shù)據(jù)對(duì)應(yīng)于其操作系統(tǒng)或操作系統(tǒng)的一部分的更新時(shí)不中斷安全元件的運(yùn)行。
可替換地,啟用可以由初始程序自動(dòng)實(shí)施,無(wú)需接收到啟用要求。啟用涉及由請(qǐng)求在需要時(shí)要求的數(shù)據(jù)或者整個(gè)代碼存儲(chǔ)區(qū)域。
在該代替辦法中,簽名仍然是由外部設(shè)備加密的,以便將其傳送到安全元件。
在本發(fā)明的具體實(shí)施方式中,所獲得的數(shù)據(jù)與所獲得的數(shù)據(jù)應(yīng)當(dāng)被加載到的代碼存儲(chǔ)區(qū)域中的一個(gè)位置或更多個(gè)位置的指示一起被外部設(shè)備傳送。
因此,由外部設(shè)備定義代碼存儲(chǔ)區(qū)域的每個(gè)比特的位置,這確保安全元件將進(jìn)行與外部設(shè)備按照這些補(bǔ)充指示的說(shuō)明將模擬的數(shù)據(jù)加載一致的數(shù)據(jù)加載。從所模擬的圖像獲得的簽名因此必須與在加載所述數(shù)據(jù)之后安全元件的初始程序應(yīng)當(dāng)計(jì)算的簽名一致。
在本發(fā)明的具體實(shí)施方式中,代碼存儲(chǔ)區(qū)域被劃分成P個(gè)子區(qū)域,并且簽名計(jì)算步驟包括獲得針對(duì)每個(gè)子區(qū)域的基礎(chǔ)簽名,和通過(guò)組合P個(gè)基礎(chǔ)簽名來(lái)獲得針對(duì)模擬的或非模擬的整個(gè)代碼存儲(chǔ)區(qū)域的簽名。
在該配置中,一個(gè)基礎(chǔ)簽名的計(jì)算與另一個(gè)基礎(chǔ)簽名的計(jì)算無(wú)關(guān),這允許借助限制在被修改的子區(qū)域的(基礎(chǔ)簽名)整體性計(jì)算,實(shí)現(xiàn)代碼存儲(chǔ)區(qū)域模塊化(例如按照子區(qū)域)的更新。
在本發(fā)明的具體實(shí)施方式中,組合P個(gè)基礎(chǔ)簽名包括應(yīng)用雙射函數(shù)。
例如,其可以涉及異或(XOR)類型的函數(shù)。這種函數(shù)允許解除子區(qū)域順序上的限制,以便通過(guò)組合基礎(chǔ)簽名來(lái)計(jì)算簽名。因此,外部設(shè)備和安全元件可以向組成代碼存儲(chǔ)區(qū)域的子區(qū)域不同地分配待加載的數(shù)據(jù)的部分。
在本發(fā)明的具體實(shí)施方式中,簽名計(jì)算包括將P個(gè)基礎(chǔ)簽名按其相對(duì)應(yīng)的子區(qū)域的預(yù)先定義的順序組合。該順序可以例如通過(guò)子區(qū)域特有的標(biāo)識(shí)符或這些子區(qū)域內(nèi)容(即,子區(qū)域的全部比特,有時(shí)稱作模塊)的特有的標(biāo)識(shí)符確定,例如為標(biāo)識(shí)符的升序或降序。
在本發(fā)明的具體實(shí)施方式中,數(shù)據(jù)包括用于由安全元件實(shí)施以下步驟的腳本:將從外部設(shè)備接收的數(shù)據(jù)加載到代碼存儲(chǔ)區(qū)域的一部分中的步驟,在所接收的數(shù)據(jù)加載后計(jì)算整個(gè)代碼存儲(chǔ)區(qū)域的簽名的步驟,和借助從外部設(shè)備接收的簽名檢驗(yàn)所計(jì)算的簽名使得僅在這兩個(gè)簽名一致的情況下準(zhǔn)許執(zhí)行代碼存儲(chǔ)區(qū)域的內(nèi)容的步驟。
在本發(fā)明的具體實(shí)施方式中,代碼存儲(chǔ)區(qū)域包括在加載(由外部設(shè)備獲得并由安全元件從外部設(shè)備接收的)所述數(shù)據(jù)之前的軟件元件。
因此,在加載之后代碼存儲(chǔ)區(qū)域的模擬的圖像考慮了在代碼存儲(chǔ)區(qū)域的初始狀態(tài)(本文提到的二進(jìn)制圖案)期間或者在安全元件的運(yùn)行期間,可能已經(jīng)被預(yù)先加載到代碼存儲(chǔ)區(qū)域中的數(shù)據(jù)。
在本發(fā)明的具體實(shí)施方式中,待加載到代碼存儲(chǔ)區(qū)域中的所述數(shù)據(jù)僅表示在代碼存儲(chǔ)區(qū)域中可用空間的一部分。
例如,待加載的數(shù)據(jù)(全部代碼塊)可以僅占據(jù)構(gòu)成代碼存儲(chǔ)區(qū)域的比特的一半或四分之一。本發(fā)明的第三方面涉及一種使數(shù)據(jù)到安全元件的非易失性存儲(chǔ)器中的加載安全的安全設(shè)備,所述非易失性存儲(chǔ)器包括稱作代碼存儲(chǔ)區(qū)域的存儲(chǔ)區(qū)域,該代碼存儲(chǔ)區(qū)域由安全元件的初始程序定義并且任何修改僅由所述初始程序控制,所述設(shè)備位于安全元件的外部并包括:
-獲得模塊,獲得待傳送到安全元件的數(shù)據(jù);
-模擬模塊,模擬通過(guò)將所獲得的數(shù)據(jù)加載到安全元件的該代碼存儲(chǔ)區(qū)域中而被修改的代碼存儲(chǔ)區(qū)域的圖像;
-計(jì)算模塊,計(jì)算整個(gè)代碼存儲(chǔ)區(qū)域的模擬的圖像的簽名;和
-傳送模塊,向所述安全元件傳送所獲得的數(shù)據(jù)和所計(jì)算的簽名。
在本發(fā)明的具體實(shí)施方式中,前述方法的不同步驟由計(jì)算機(jī)程序指令確定。
因此,本發(fā)明還涉及在信息載體上的計(jì)算機(jī)程序,該程序可以由微處理器實(shí)施,該程序包括適于實(shí)施如以上提及的方法的步驟。該程序涉及例如諸如上述的初始程序。
該程序可以使用任何編程語(yǔ)言并且以源代碼、目標(biāo)代碼、或源代碼與目標(biāo)代碼之間的中間代碼,諸如以經(jīng)部分編譯的形式、或以任何其他適當(dāng)?shù)男问健?/p>
本發(fā)明還涉及微處理器可讀的信息載體,并且包括諸如以上所提及的計(jì)算機(jī)程序的指令。
信息載體可以是任何能夠存儲(chǔ)程序的實(shí)體或設(shè)備。例如,載體可以包括諸如ROM,例如微電路的ROM之類的存儲(chǔ)裝置、或者甚至磁記錄裝置,例如硬盤、或者甚至閃存。
另一方面,信息載體可以是諸如電信號(hào)或光信號(hào)之類的可傳送載體,其可以經(jīng)由電纜或光纜,通過(guò)無(wú)線電或其他手段被發(fā)送。特別地,根據(jù)本發(fā)明的程序可以被上傳到英特網(wǎng)類型的網(wǎng)絡(luò)存儲(chǔ)平臺(tái)上。
可替換地,信息載體可以是其中編入程序的集成電路,該電路適于執(zhí)行所提及的方法或用于在所提及的方法的執(zhí)行中被使用。
本發(fā)明的第四方面涉及包括微處理器并且在存儲(chǔ)器中包括如前述的初始程序的安全元件。安全元件例如符合ISO/IEC 7816標(biāo)準(zhǔn)、通用準(zhǔn)則(Common Criteria)規(guī)范和/或全球平臺(tái)卡規(guī)范版本2.1.1(GlobalPlatform Card Specification v 2.1.1)。
本發(fā)明的第五方面涉及包括這種安全元件和如以上所提及的安全設(shè)備的系統(tǒng),用于安全元件的外部設(shè)備為所述安全設(shè)備。
前述安全設(shè)備、安全元件、系統(tǒng)、信息載體和計(jì)算機(jī)程序的具體的優(yōu)點(diǎn)、目的和特征與其所實(shí)施的方法的具體的優(yōu)點(diǎn)、目的和特征類似。
附圖說(shuō)明
本發(fā)明的其他特征和優(yōu)點(diǎn)將在由附圖示出的以下描述中變得更清楚,附圖示出沒(méi)有任何限制特性的實(shí)施例。在附圖上:
-圖1a和1b示出實(shí)施方式的實(shí)施背景示例;
-圖2表示用于在圖1a和1b上表示的設(shè)備的架構(gòu)示例;
-圖3由以程序方框圖的形式表示根據(jù)實(shí)施方式的安全方法的主要步驟的圖3a和3b組成。
具體實(shí)施方式
以一般的方式,本發(fā)明涉及將來(lái)自外部設(shè)備的數(shù)據(jù)加載到安全元件的非易失性存儲(chǔ)器中,特別是加載到稱作代碼存儲(chǔ)區(qū)域的存儲(chǔ)區(qū)域中的安全保護(hù),所述代碼存儲(chǔ)區(qū)域由安全元件的初始程序定義并且其任何修改僅被該初始程序控制,并且可能包含經(jīng)編譯或解釋的代碼。
經(jīng)編譯或解釋的代碼,意指包含程序并因此由系統(tǒng)(此處為安全元件)識(shí)別的全部數(shù)據(jù)整體,并且所述程序尤其是其命令或碼字(字節(jié)碼或二進(jìn)制碼)由系統(tǒng)的處理器直接執(zhí)行的機(jī)器語(yǔ)言程序。
如上述,代碼存儲(chǔ)區(qū)域,尤其是其尺寸由安全元件的初始或“基礎(chǔ)”程序管理。要注意的是,初始程序一般采用系統(tǒng)(此處為安全元件)制造商特有的操作系統(tǒng)形式,該特定操作系統(tǒng)不依賴受根據(jù)本發(fā)明的安全保護(hù)約束的代碼存儲(chǔ)區(qū)域運(yùn)行。
按照本發(fā)明,當(dāng)外部設(shè)備獲得待傳送到安全元件的數(shù)據(jù)時(shí)(例如針對(duì)安全元件的請(qǐng)求),因?yàn)檫@些數(shù)據(jù)典型地由外部設(shè)備(有時(shí)稱作更新設(shè)備)交付,所以外部設(shè)備模擬安全元件的代碼存儲(chǔ)區(qū)域的圖像,使得該圖像可能由所提及數(shù)據(jù)的完整加載修改。存儲(chǔ)區(qū)域的“圖像”定義該存儲(chǔ)區(qū)域的每個(gè)比特的值及位置。隨后根據(jù)該模擬的圖像計(jì)算出簽名,然后該簽名與所述數(shù)據(jù)一起被發(fā)送到安全元件。
隨后該簽名被安全元件使用以便數(shù)據(jù)加載一結(jié)束,就針對(duì)整個(gè)代碼存儲(chǔ)區(qū)域檢驗(yàn)代碼存儲(chǔ)區(qū)域是完整的。事實(shí)上,該代碼存儲(chǔ)區(qū)域與由外部設(shè)備模擬的圖像基本一致。因此根據(jù)本發(fā)明,在完整加載在需要時(shí)要求的數(shù)據(jù)之后,安全元件的初始程序自己也針對(duì)整個(gè)代碼存儲(chǔ)區(qū)域計(jì)算簽名,以便將其與所接收的簽名做比較。
分別由外部設(shè)備在所提及數(shù)據(jù)加載之后針對(duì)代碼存儲(chǔ)區(qū)域的期待(模擬)圖像計(jì)算的簽名,與由安全元件的初始程序在所提及數(shù)據(jù)有效加載之后針對(duì)存儲(chǔ)區(qū)域計(jì)算的簽名之間的一致性,允許由此保證代碼存儲(chǔ)區(qū)域良好地符合由外部設(shè)備模擬的圖像,并因此是完整的。
圖1a和1b示意性地示出實(shí)施方式的實(shí)施背景示例。
在圖1a上,集成或嵌入到主設(shè)備10a中的安全元件12a被配置用于與外部設(shè)備16a交換數(shù)據(jù)。
安全元件12a例如符合ISO/IEC7816標(biāo)準(zhǔn)、通用準(zhǔn)則規(guī)范和/或全球平臺(tái)卡規(guī)范版本2.1.1。
安全元件12a例如為網(wǎng)絡(luò)14a的訂戶的識(shí)別模塊,為SIM卡類型或UICC卡類型。主設(shè)備10a例如為移動(dòng)終端,尤其是智能移動(dòng)電話或智能電話(Smartphone)。外部設(shè)備16a為連接到網(wǎng)絡(luò)14a的(更新)服務(wù)器。
網(wǎng)絡(luò)14a例如為支持?jǐn)?shù)據(jù)通信和/或英特網(wǎng)的移動(dòng)網(wǎng)絡(luò)。因此,在該背景示例中,移動(dòng)終端10a和服務(wù)器16b經(jīng)由網(wǎng)絡(luò)14a借助識(shí)別模塊12a通信。
圖1b示出實(shí)施方式的另一個(gè)實(shí)施背景,在實(shí)施方式中,卡10b(尤其是銀行卡或電子訪問(wèn)卡)的安全元件12b被配置用于與外部設(shè)備16b交換數(shù)據(jù)。
在該示例中,安全元件12b包括根據(jù)NFC近場(chǎng)通信協(xié)議的通信裝置(RFID標(biāo)簽類型),并且外部設(shè)備16b是同樣能夠根據(jù)NFC協(xié)議通信的讀卡器(RFID讀取器類型)。
作為變型,安全元件和外部設(shè)備可以通過(guò)藍(lán)牙或紅外線來(lái)通信。
由圖1a和1b所示出的背景并非是不兼容的。在一個(gè)背景中呈現(xiàn)的特征可以在另一個(gè)背景中被實(shí)施。而且,本發(fā)明不限制于上面描述的背景。例如,本發(fā)明還可以有利地在其中安全元件被嵌入或集成到配備有根據(jù)NFC協(xié)議的通信裝置的主設(shè)備中,而且外部設(shè)備自身配備有類似通信裝置的背景中被使用。嵌入或集成的安全元件還可以包括根據(jù)NFC協(xié)議的用于與主設(shè)備通信的通信裝置。
根據(jù)本發(fā)明的實(shí)施方式,安全元件向外部設(shè)備發(fā)送數(shù)據(jù)(例如應(yīng)用或應(yīng)用的一部分,尤其是更新)獲得請(qǐng)求。響應(yīng)于該請(qǐng)求,外部設(shè)備向安全元件發(fā)送所要求的數(shù)據(jù),例如,通過(guò)主設(shè)備發(fā)送,該安全元件被集成或嵌入在主設(shè)備中。這些數(shù)據(jù)可以是敏感的或非敏感的,即其可以允許在其執(zhí)行期間例如操縱用戶數(shù)據(jù)。
這些數(shù)據(jù)旨在被存儲(chǔ)(加載)到安全元件的非易失性存儲(chǔ)器的被稱作代碼存儲(chǔ)區(qū)域的部分中,該代碼存儲(chǔ)區(qū)域由安全元件的初始程序定義并且其任何修改僅由該初始程序控制,并可能包含經(jīng)編譯或解釋的代碼。
由外部設(shè)備計(jì)算的簽名和所要求的數(shù)據(jù)一起被發(fā)送。根據(jù)本發(fā)明,該簽名具有反映整個(gè)代碼存儲(chǔ)區(qū)域的圖像的特性,所述圖像在所要求數(shù)據(jù)的完整加載之后可得到。
優(yōu)選地,在任何第一次數(shù)據(jù)加載之前,代碼區(qū)域?yàn)椤半S機(jī)化的”。換句話說(shuō),隨機(jī)值以隨機(jī)的方式被記錄在代碼區(qū)域中。代碼區(qū)域的該狀態(tài)是外部設(shè)備已知的,以便外部設(shè)備能夠計(jì)算反映整個(gè)代碼存儲(chǔ)區(qū)域的圖像的簽名,所述圖像在數(shù)據(jù)的完整加載之后應(yīng)當(dāng)可能得到。
一旦進(jìn)行了所要求數(shù)據(jù)的加載,安全元件的初始程序就自己針對(duì)可能由所要求數(shù)據(jù)的加載實(shí)際修改的代碼存儲(chǔ)區(qū)域計(jì)算簽名,以便保證整個(gè)代碼存儲(chǔ)區(qū)域具有良好符合期待的外觀,即是完整的。
圖2表示用于在圖1a或1b上所表示的設(shè)備的架構(gòu)示例,所述設(shè)備即安全元件12a或12b、外部設(shè)備16a或16b和/或主設(shè)備10a或10b。
根據(jù)該架構(gòu),設(shè)備可以包括連接到以下元件的通信總線2:
-處理單元20,記作CPU(Central Processing Unit,中央處理單元),可以具有一個(gè)或更多個(gè)處理器;
-讀寫(xiě)存儲(chǔ)器22或緩存或易失性存儲(chǔ)器,例如RAM(Random Access Memory,隨機(jī)存取存儲(chǔ)器);
-一個(gè)或更多個(gè)非易失性存儲(chǔ)器24;和
-通信接口26。
讀寫(xiě)存儲(chǔ)器22包括適于記錄在計(jì)算機(jī)程序執(zhí)行期間創(chuàng)建和修改的變量及參數(shù),該計(jì)算機(jī)程序包括用于在本發(fā)明實(shí)施期間實(shí)施根據(jù)本發(fā)明的方法的指令。存儲(chǔ)在非易失性存儲(chǔ)器中的程序的指令代碼被加載到存儲(chǔ)器RAM中以便由處理單元CPU執(zhí)行。
非易失性存儲(chǔ)器24例如為EEPROM類型或Flash存儲(chǔ)器的可錄存儲(chǔ)器,能夠構(gòu)成本發(fā)明意義上的載體,即能夠包括包含用于實(shí)施根據(jù)本發(fā)明的方法的指令的計(jì)算機(jī)程序。
根據(jù)本發(fā)明,在安全元件的情況下,ROM存儲(chǔ)器24例如可以被分成三個(gè)存儲(chǔ)區(qū)域24a、24b、24c。存儲(chǔ)區(qū)域24a包括例如諸如Java應(yīng)用(applets)、JavaCard虛擬機(jī)的配置數(shù)據(jù)、密碼、電話號(hào)碼、應(yīng)用、或各種個(gè)性化參數(shù)之類的用戶數(shù)據(jù)。
存儲(chǔ)區(qū)域24b對(duì)應(yīng)于前面提及的代碼存儲(chǔ)區(qū)域并且因此專用于存儲(chǔ)數(shù)據(jù)和使用經(jīng)編譯或解釋的代碼的程序,例如安全元件的操作系統(tǒng)或使用經(jīng)編譯或解釋的代碼的任何類型的應(yīng)用。其涉及例如JavaCard虛擬機(jī)、JavaCard執(zhí)行環(huán)境(JavaCard Runtime Execution)、本地(native)應(yīng)用或GSM(“Global System for Mobile Communications”framework,“全球移動(dòng)通信系統(tǒng)”框架)平臺(tái)。該存儲(chǔ)區(qū)域在其包含的經(jīng)編譯或解釋的代碼執(zhí)行期間不能被修改,以便避免執(zhí)行錯(cuò)誤。由安全元件的初始程序確保存儲(chǔ)區(qū)域24b的這種鎖定,該安全元件的初始程序是唯一可能在臨時(shí)禁用存儲(chǔ)區(qū)域24b之后為其帶來(lái)修改的程序。
存儲(chǔ)區(qū)域24b在其初始狀態(tài)中,即在其制造期間是空白的。在經(jīng)編譯或解釋的代碼的任何加載或安裝之前,二進(jìn)制圖案被應(yīng)用到處于初始狀態(tài)中的存儲(chǔ)區(qū)域24b。該二進(jìn)制圖案例如由全部等于零或者全部等于一的比特構(gòu)成。作為變型,該圖案可以由一些為零的比特和另一些為一的比特構(gòu)成,因此允許使處于初始狀態(tài)中的存儲(chǔ)區(qū)域24b的比特的圖像復(fù)雜化,并改善該存儲(chǔ)區(qū)域的安全。尤其,可以應(yīng)用如前述的隨機(jī)圖案。
該初始圖像尤其被外部更新設(shè)備16a/16b已知,這允許其準(zhǔn)確地追蹤存儲(chǔ)區(qū)域24b的比特的變化、并因而追蹤由存儲(chǔ)區(qū)域24b的全部比特構(gòu)成的該存儲(chǔ)區(qū)域24b的圖像的變化,所述變化是隨著使用經(jīng)編譯或解釋的代碼的新軟件元件在該存儲(chǔ)區(qū)域中的加載而產(chǎn)生的。
按照本發(fā)明,不可修改的存儲(chǔ)區(qū)域24c包括安全元件的初始程序,該初始程序被配置用于控制代碼存儲(chǔ)區(qū)域24b的尺寸及完整性。初始程序例如通過(guò)定義區(qū)域24b的起始存儲(chǔ)器地址和區(qū)域24b的結(jié)尾存儲(chǔ)器地址來(lái)固定代碼存儲(chǔ)區(qū)域24b的尺寸。這些地址例如被存儲(chǔ)在初始程序的寄存器的密鑰中。
初始程序還控制代碼存儲(chǔ)區(qū)域24b的以經(jīng)解釋的代碼形式的軟件元件的啟用和禁用。換句話說(shuō),只有初始程序能夠允許或禁止執(zhí)行存儲(chǔ)在存儲(chǔ)區(qū)域24b中的經(jīng)編譯或解釋的代碼。尤其,當(dāng)軟件元件之一應(yīng)當(dāng)被更新時(shí)或者當(dāng)新數(shù)據(jù)應(yīng)當(dāng)被加載到存儲(chǔ)區(qū)域24b中時(shí),初始程序禁用在存儲(chǔ)區(qū)域24b中的任何執(zhí)行。
初始程序還包括代碼存儲(chǔ)區(qū)域24b的更新機(jī)制,所述機(jī)制被配置用于執(zhí)行更新的命令或腳本以便將以經(jīng)解釋的代碼形式的二進(jìn)制塊加載到該代碼存儲(chǔ)區(qū)域24b中。
ROM存儲(chǔ)器可以被分成多于三個(gè)區(qū)域,盡管如此,安全元件的以經(jīng)編譯或解釋的代碼形式的全部軟件元件必須存儲(chǔ)在專用代碼存儲(chǔ)區(qū)域24b中。
通信接口26適于傳輸并接收數(shù)據(jù),例如經(jīng)由電信網(wǎng)絡(luò)或讀/寫(xiě)接口。例如,外部設(shè)備和安全元件正是經(jīng)由該接口來(lái)發(fā)送/接收數(shù)據(jù)以及它們的簽名。同樣是經(jīng)由該接口,主設(shè)備可以傳送來(lái)自安全元件的數(shù)據(jù)獲得請(qǐng)求并從接收來(lái)自外部設(shè)備的以安全元件為目的端的這些數(shù)據(jù)。
以可選的方式,該架構(gòu)(典型地用于主設(shè)備10a)還包括I/O(Input/Output)輸入/輸出接口28,例如屏幕、鍵盤、鼠標(biāo)或諸如觸摸屏之類的指示設(shè)備。該接口例如允許用戶要求更新已經(jīng)在存儲(chǔ)器中的操作系統(tǒng)或以經(jīng)編譯或解釋的代碼形式的應(yīng)用,或者要求加載新操作系統(tǒng)或以經(jīng)編譯或解釋的代碼形式的新應(yīng)用。
以可選的方式,該架構(gòu)(典型地用于外部設(shè)備16a或16b,以及安全元件12a或12b)還包括從處理單元20接收指令的加密處理器29,用于加密/解密包括例如簽名或者經(jīng)編譯或解釋的可執(zhí)行文件的數(shù)據(jù)的消息。該加密方法使數(shù)據(jù)和簽名在網(wǎng)絡(luò)14a上的傳輸安全。
通信總線允許包括在設(shè)備中或連接到該設(shè)備的不同元件之間的通信和聯(lián)合操作性??偩€的表示不是限制性的,尤其是,處理單元可以將指令直接或通過(guò)該設(shè)備的另一個(gè)元件傳送到該設(shè)備的任何元件。
圖3a表示符合實(shí)施方式的安全方法的主要步驟,這些步驟由外部設(shè)備(例如,圖1的設(shè)備16a或16b)實(shí)施。圖3b表示符合這些實(shí)施方式的安全方法的主要步驟,這些步驟由安全元件(例如,圖1的安全元件12a或12b)尤其通過(guò)初始程序或設(shè)置在初始程序中的加載模塊來(lái)實(shí)施。
在圖3a上,在步驟30期間,外部設(shè)備接收由安全元件發(fā)送的數(shù)據(jù)獲得請(qǐng)求。
多個(gè)機(jī)制導(dǎo)致可以考慮發(fā)送該請(qǐng)求,一些機(jī)制是自動(dòng)的而另一些得自由用戶的自發(fā)動(dòng)作。
以非限制性示例的方式,并且如前文參考圖2所述,主設(shè)備(例如,圖1a的移動(dòng)終端10a)的用戶發(fā)起該請(qǐng)求的生成及發(fā)送。例如,用戶可以通過(guò)移動(dòng)終端10a的鍵盤或觸摸屏要求移動(dòng)終端檢驗(yàn)在外部更新設(shè)備上是否存在比當(dāng)前安裝在設(shè)置于移動(dòng)終端中的SIM上的版本更加新的應(yīng)用或操作系統(tǒng)的版本。在這個(gè)背景下,移動(dòng)終端10a詢問(wèn)安全元件以便知道該操作系統(tǒng)或該應(yīng)用的當(dāng)前版本,例如,通過(guò)“Select(程序)”命令(其中程序?qū)?yīng)于待檢驗(yàn)的操作系統(tǒng)或應(yīng)用)和“GetData(9F7Fh)”命令,其中9F7Fh為描述可追溯性數(shù)據(jù)特征的參數(shù),可追溯性數(shù)據(jù)例如稱作“卡產(chǎn)品生命周期”(“Card Production Life Cycle”)的數(shù)據(jù),然后將該信息傳送到外部更新設(shè)備以便通過(guò)反饋來(lái)被通知是否存在更加新的版本,例如以自發(fā)的方式使用PING命令。
作為變型,涉及相同交換的版本檢驗(yàn),可以是在終端啟動(dòng)時(shí)自動(dòng)進(jìn)行。
在另一個(gè)變型中,外部設(shè)備可以通過(guò)推送(push)機(jī)制自發(fā)地通知終端和安全元件存在操作系統(tǒng)或應(yīng)用的新版本。
一旦被更新設(shè)備通知存在更加新的版本,終端就將該信息傳送到安全元件,因此安全元件可以發(fā)送操作系統(tǒng)或應(yīng)用的一部分代碼或全部代碼的更加新版本的獲得請(qǐng)求(即更新)。
可替換地,對(duì)于以下全部描述,安全元件與外部設(shè)備之間的通信是直接的。因此,終端充當(dāng)簡(jiǎn)單的傳遞角色來(lái)傳送交換的數(shù)據(jù)和消息(尤其是根據(jù)該信息,更新是可用的)而不對(duì)其進(jìn)行解釋。
在實(shí)施方式中,該獲得請(qǐng)求包括允許識(shí)別安全元件的信息,例如安全元件的唯一標(biāo)識(shí)符。該唯一標(biāo)識(shí)符例如允許更新設(shè)備借助相關(guān)聯(lián)的數(shù)據(jù)庫(kù)找到安全元件的當(dāng)前或“目前”軟件配置,以及尤其是代碼存儲(chǔ)區(qū)域24b。實(shí)際上,這種數(shù)據(jù)庫(kù)可以被用于存儲(chǔ)安全元件的實(shí)施的安裝歷史和更新歷史、以及這些安裝和更新的實(shí)施指示。該指示例如為指示待加載的數(shù)據(jù)的存儲(chǔ)器地址或存儲(chǔ)位置的安裝腳本。
作為變型,獲得請(qǐng)求包括安全元件的代碼存儲(chǔ)區(qū)域24b的目前軟件配置標(biāo)識(shí)符。
其涉及,例如軟件配置的唯一標(biāo)識(shí)符,在與外部設(shè)備相關(guān)聯(lián)的數(shù)據(jù)庫(kù)中具有在安全元件的存儲(chǔ)區(qū)域24b中進(jìn)行的加載的歷史,該歷史與該唯一標(biāo)識(shí)符相關(guān)聯(lián)。
借助該標(biāo)識(shí)符,并且因此借助相關(guān)聯(lián)的歷史,可以知道目前存儲(chǔ)在存儲(chǔ)區(qū)域24b中的軟件元件、和預(yù)先加載并且后來(lái)被刪除的軟件元件、以及在代碼存儲(chǔ)區(qū)域24b內(nèi)這些軟件元件的接續(xù)順序。
借助該歷史,可以找回在代碼存儲(chǔ)區(qū)域24b的不同位置、特別地在整個(gè)存儲(chǔ)區(qū)域24b中的每個(gè)比特處前后相接的全部信息。因此,由該唯一標(biāo)識(shí)符識(shí)別的軟件配置代表安全元件的代碼存儲(chǔ)區(qū)域24b的當(dāng)前圖像,即尤其考慮了歷史上加載過(guò)但是后來(lái)被刪除的然而未被覆寫(xiě)的(因此其還在存儲(chǔ)器中)軟件元件的比特中每個(gè)比特的值和位置。
以示例的方式,該軟件配置標(biāo)識(shí)符可以來(lái)自于從安全元件收集的CPLC(Card Production Life Cycle,卡產(chǎn)品生命周期)數(shù)據(jù),并且可以借助PING命令被定期地傳送到外部設(shè)備。CPLC數(shù)據(jù)尤其包括安全元件的制造商標(biāo)識(shí)符、安全元件的類型、操作系統(tǒng)標(biāo)識(shí)符、和操作系統(tǒng)的目前版本。CPLC數(shù)據(jù)允許外部設(shè)備找回從其中收回這些信息的安全元件的代碼存儲(chǔ)區(qū)域24b的當(dāng)前圖像。
作為變型,獲得請(qǐng)求可以包括足夠用于無(wú)需借助收回在相關(guān)聯(lián)的數(shù)據(jù)庫(kù)中的補(bǔ)充數(shù)據(jù)就能重建存儲(chǔ)區(qū)域的圖像所必需的信息。
在步驟31期間,外部設(shè)備收回所要求的數(shù)據(jù)(例如,從內(nèi)部存儲(chǔ)區(qū)域或第三設(shè)備),然后模擬代碼存儲(chǔ)區(qū)域24b的比特的圖像,所述比特應(yīng)當(dāng)可能為在加載所要求的數(shù)據(jù)之后的比特。換句話說(shuō),外部設(shè)備模擬代碼存儲(chǔ)區(qū)域24b的比特中的每個(gè)比特的位置和值,這些比特可能通過(guò)加載構(gòu)成所要求的數(shù)據(jù)的經(jīng)編譯或解釋的代碼修改或者未被修改。
尤其可以按照安裝或加載腳本(可能由外部設(shè)備生成)來(lái)加載所要求的數(shù)據(jù),所述腳本由安全元件接收,并包括定義針對(duì)全部或部分所要求的數(shù)據(jù)的特定位置的命令集。以舉例的方式,安裝腳本可以包括指示其中應(yīng)當(dāng)存儲(chǔ)的數(shù)據(jù)(值)的位置(存儲(chǔ)器地址及長(zhǎng)度)的ALV(address-length-value,地址-長(zhǎng)度-值)文件。因此,外部設(shè)備能夠通過(guò)模擬,以與安全元件在接收安裝腳本時(shí)所進(jìn)行的操作相同的方式,再現(xiàn)所要求數(shù)據(jù)的安裝或加載。
因此,所模擬的圖像考慮了將由加載所要求的數(shù)據(jù)修改的比特,以及不由該加載修改的比特。
實(shí)際上,由外部設(shè)備建立的安裝腳本可以包括旨在修改代碼存儲(chǔ)區(qū)域24b內(nèi)容的命令集,例如修改其尺寸以便擴(kuò)展或減小存儲(chǔ)經(jīng)編譯或解釋的代碼的能力、和/或修改所要求的數(shù)據(jù)的安裝參數(shù)(上面提到的ALV文件),因此允許將數(shù)據(jù)的每個(gè)比特加載到代碼存儲(chǔ)區(qū)域的準(zhǔn)確位置(即,準(zhǔn)確地址)。外部設(shè)備因此可以為數(shù)據(jù)的每個(gè)比特賦予位置之間的優(yōu)先級(jí),例如為了通過(guò)軟件元件的新版本的比特來(lái)替換該軟件元件的舊版本的比特。
盡管安裝腳本與待加載的數(shù)據(jù)分開(kāi)呈現(xiàn),但是這些待加載的數(shù)據(jù)可以是安裝腳本的不可缺少的部分。因此,腳本在上面提到的ALV文件的值處可以包括一個(gè)或更多個(gè)塊或者甚至構(gòu)成所述數(shù)據(jù)的全部經(jīng)編譯或解釋的代碼。
而且,安裝腳本可以包括用于建立主機(jī)終端與安全元件之間的安全信道并提供其互相認(rèn)證的命令。以示例的方式,這些命令符合于GP2.2.1Amd D v1.1(SCP03)規(guī)范,以便基于根據(jù)偽隨機(jī)值(典型地,偽隨機(jī)值基于以上CPLC數(shù)據(jù)的標(biāo)識(shí)符)生成的會(huì)話密鑰的安全信道在加載所要求的數(shù)據(jù)期間被實(shí)施。事實(shí)上,根據(jù)該規(guī)范建立的安全信道具有允許預(yù)先生成用于傳送之前提及的元件(簽名、經(jīng)編譯或解釋的代碼塊等)的一系列命令的優(yōu)點(diǎn),該一系列命令尤其是用于ALV文件的每個(gè)輸入的“Store Data”命令。
隨后,在步驟32期間,由外部設(shè)備計(jì)算代碼存儲(chǔ)區(qū)域24b的全部比特的模擬的圖像的簽名。該簽名取決于由加載所要求的數(shù)據(jù)修改的新比特值,并同樣取決于位于被該加載修改的位置之外的代碼存儲(chǔ)區(qū)域的比特。被該加載修改的位置可以包含之前加載的其他數(shù)據(jù)(軟件元件)的經(jīng)解釋的代碼或者甚至初始二進(jìn)制圖案,即對(duì)應(yīng)于處于初始狀態(tài)中的代碼存儲(chǔ)區(qū)域(即,在其為空白時(shí))的比特的圖像。
要注意的是,在安全元件的代碼存儲(chǔ)區(qū)域24b中可能發(fā)生的在先加載與所要求數(shù)據(jù)的有效加載之間,位于被修改的位置之外的比特相對(duì)于代碼存儲(chǔ)區(qū)域不應(yīng)當(dāng)經(jīng)受值或位置的修改。這些修改、異常(在執(zhí)行加載腳本期間的惡意攻擊或邏輯錯(cuò)誤后果)可能導(dǎo)致相對(duì)于期待值修改由安全元件計(jì)算的代碼存儲(chǔ)區(qū)域24b的簽名(下文描述),所述期待值是針對(duì)存儲(chǔ)區(qū)域24b的模擬的圖像計(jì)算的,并體現(xiàn)出不具有這種修改的存儲(chǔ)區(qū)域的圖像的特征。
實(shí)際上,該簽名為例如MAC(Massage Authentification Code,消息認(rèn)證碼)消息的認(rèn)證碼、Hash-MAC、例如SHA-2類型的哈希(hash)函數(shù)的結(jié)果、或者甚至循環(huán)冗余碼應(yīng)用的結(jié)果。簽名可以針對(duì)單一代碼塊的比特的模擬的圖像被計(jì)算,或者針對(duì)描繪整個(gè)存儲(chǔ)區(qū)域24b的比特的模擬的圖像輪廓的二進(jìn)制部分被計(jì)算。
在具體實(shí)施方式中,外部設(shè)備虛擬地將代碼存儲(chǔ)區(qū)域劃分成P個(gè)子區(qū)域,并針對(duì)對(duì)應(yīng)于P個(gè)子區(qū)域中的一個(gè)子區(qū)域的每個(gè)圖像部分計(jì)算基礎(chǔ)簽名。隨后通過(guò)組合所計(jì)算的P個(gè)基礎(chǔ)簽名來(lái)獲得整個(gè)代碼存儲(chǔ)區(qū)域的圖像的簽名。
因此,外部設(shè)備可以有利地僅計(jì)算對(duì)應(yīng)于通過(guò)加載修改的子區(qū)域的基礎(chǔ)簽名,并在先前已經(jīng)計(jì)算了基礎(chǔ)簽名的情況下,再使用未改變的子區(qū)域的基礎(chǔ)簽名。
尤其,外部設(shè)備可以以獨(dú)立于其他子區(qū)域的內(nèi)容的方式管理所考慮的每個(gè)子區(qū)域的內(nèi)容,即構(gòu)成每個(gè)子區(qū)域的全部比特(稱作模塊)。換句話說(shuō),外部設(shè)備可以指示在一個(gè)或更多個(gè)模塊內(nèi)部的所要求數(shù)據(jù)的部分的加載位置,而無(wú)需指示在代碼存儲(chǔ)區(qū)域24b內(nèi)這些模塊彼此之間應(yīng)當(dāng)如何相對(duì)設(shè)置。
可以借助應(yīng)用于P個(gè)子區(qū)域的P個(gè)基礎(chǔ)簽名的雙射函數(shù)實(shí)施基礎(chǔ)簽名的組合。這允許不考慮子區(qū)域可能的順序(并且因而允許不考慮相對(duì)應(yīng)的基礎(chǔ)簽名)。該雙射函數(shù)可以是外部設(shè)備與安全元件之間的共享秘密函數(shù)。因此,根據(jù)僅基礎(chǔ)簽名,即不知道雙射函數(shù)或該函數(shù)的秘密參數(shù),不可能獲得整個(gè)存儲(chǔ)區(qū)域的簽名。
例如,可以使用異或(XOR),或者可以針對(duì)全部基礎(chǔ)簽名計(jì)算MAC碼。
作為變型,整個(gè)代碼存儲(chǔ)區(qū)域的圖像的簽名可以通過(guò)按預(yù)先定義的例如與相對(duì)應(yīng)的子區(qū)域的順序有關(guān)的順序,或者按其內(nèi)容(稱作模塊)順序組合基礎(chǔ)簽名來(lái)獲得。該預(yù)先定義的順序可以作為外部設(shè)備與安全元件之間的共享秘密被預(yù)先存儲(chǔ)。以示例的方式,子區(qū)域可以具有標(biāo)識(shí)符(其可以隨時(shí)間變化)并且順序可以是子區(qū)域的所述標(biāo)識(shí)符的升序或降序。
在步驟33期間,所要求的數(shù)據(jù)與由外部設(shè)備生成的并允許建立安全信道以及加載所要求的數(shù)據(jù)的安裝腳本以及在步驟32計(jì)算的簽名一起,被發(fā)送到主機(jī)終端以便被執(zhí)行,即以便將數(shù)據(jù)加載到安全元件中。
實(shí)際上,在加密的命令中發(fā)送簽名,以便避免在被安全元件接收之前,該簽名被修改或攔截。在這種方式中,所要求的數(shù)據(jù)、安裝腳本和簽名在相同的加密的命令中被發(fā)送。
在其他方式中,在加密的命令中數(shù)據(jù)啟用要求與簽名一起被發(fā)送。
實(shí)際上,所要求的數(shù)據(jù)、簽名和在需要時(shí)的啟用要求可以通過(guò)SMS(Over-The-Air,空中)、通過(guò)英特網(wǎng)、NFC、藍(lán)牙、通過(guò)有線連接或由外部設(shè)備和由這些元件(即安全元件和/或主設(shè)備)的目的端管理的任何其他通信方式被發(fā)送。
至于由安全元件進(jìn)行的操作,上文中已經(jīng)提到,數(shù)據(jù)獲得請(qǐng)求伴隨標(biāo)識(shí)符被發(fā)送,以允許外部設(shè)備模擬安全元件的整個(gè)代碼存儲(chǔ)區(qū)域24b的比特的圖像。
一般地,由存儲(chǔ)在存儲(chǔ)區(qū)域24c中的初始程序發(fā)送該獲得請(qǐng)求。例如,借助命令(例如“chmod”),初始程序禁用存儲(chǔ)在代碼存儲(chǔ)區(qū)域24b中的全部數(shù)據(jù)(操作系統(tǒng)或應(yīng)用),使得進(jìn)行其更新或新數(shù)據(jù)的安裝。
在下文中,除非明確指出,考慮由初始程序(或該初始程序的加載模塊)實(shí)現(xiàn)所描述的步驟。
還如以上關(guān)于外部設(shè)備所提及的,主機(jī)終端接收安裝腳本、待加載的數(shù)據(jù)(包括或不包括在腳本中)以及由外部設(shè)備所計(jì)算的簽名。
所接收到的安裝腳本由主機(jī)終端執(zhí)行,導(dǎo)致如以下關(guān)聯(lián)圖3b描述的主機(jī)終端與安全元件之間的交換。
在關(guān)于由安全元件的初始程序進(jìn)行的后續(xù)步驟的圖3b上,在步驟34期間,安全元件接收由外部設(shè)備在步驟33發(fā)送的以下內(nèi)容:在獲得請(qǐng)求中所要求的數(shù)據(jù)以及由外部設(shè)備在步驟32計(jì)算的簽名和在需要時(shí)所要求的數(shù)據(jù)的啟用請(qǐng)求。
實(shí)際上,主機(jī)終端執(zhí)行安裝腳本,導(dǎo)致主機(jī)終端與安全元件尤其是安全元件的初始程序之間的互相認(rèn)證、隨后這兩個(gè)實(shí)體之間安全通信信道的實(shí)施、所要求數(shù)據(jù)以及最終由外部設(shè)備計(jì)算的數(shù)字簽名的傳輸。
互相認(rèn)證例如可以包括以下步驟:
-主機(jī)終端向初始程序發(fā)送終端的標(biāo)識(shí)符IDterm;
-初始程序向終端發(fā)送隨機(jī)數(shù)R1;
-終端計(jì)算并向初始程序傳送密文C1=f(IDterm,R2);
-終端向初始程序傳送隨機(jī)數(shù)R2;和
-初始程序再發(fā)送密文C2=f(IDterm,R2)。
分別由初始程序和主機(jī)終端對(duì)C1和C2的驗(yàn)證允許這兩個(gè)實(shí)體的互相認(rèn)證。
于是例如借助由外部設(shè)備在安裝腳本中提供的隨機(jī)值和/或偽隨機(jī)值(基于隨機(jī)值和CPLC數(shù)據(jù))實(shí)施根據(jù)GP 2.2.1 Amd D v1.1(SCP03)的安全信道。
于是待加載的數(shù)據(jù)和簽名在主機(jī)終端與初始程序之間的相同通信會(huì)話期間被發(fā)送。可以單片塊或作為變型以多個(gè)獨(dú)立塊,借助例如代表三元組ALV的SCP03的一個(gè)或多個(gè)命令“Store Data”傳送所述數(shù)據(jù)。
要注意的是,從主機(jī)終端向安全元件中安全地加載所要求的數(shù)據(jù),可以不依賴外部設(shè)備,即主機(jī)終端并非必須連接到外部設(shè)備。借助由外部設(shè)備傳送的安裝腳本這是可能的,并且終端可以按與接收安裝腳本不相關(guān)的方式執(zhí)行,例如當(dāng)初始程序接管安裝腳本時(shí)在安全元件的下一次啟動(dòng)期間執(zhí)行。
被提供在安裝腳本中的其他命令也可以被傳送到安全元件以便執(zhí)行例如旨在減小或擴(kuò)展代碼存儲(chǔ)區(qū)域24b的命令,和旨在啟用被加載的數(shù)據(jù)的命令。
在步驟35期間,所要求的數(shù)據(jù)隨后以單片或塊的形式被加載到安全元件的代碼存儲(chǔ)區(qū)域24b中。實(shí)際上,上述安裝腳本由初始程序的加載器執(zhí)行,導(dǎo)致通過(guò)加載單片塊,或者通過(guò)按照存儲(chǔ)位置指令A(yù)LV逐漸地加載連續(xù)的塊來(lái)加載及安裝所要求的數(shù)據(jù)。
在根據(jù)安裝腳本的內(nèi)容,代碼存儲(chǔ)區(qū)域被劃分成如上述的P個(gè)子區(qū)域的情況下,可以通過(guò)加載構(gòu)成待加載數(shù)據(jù)的經(jīng)編譯或解釋的代碼的一個(gè)塊或更多個(gè)塊來(lái)修改子區(qū)域。其他子區(qū)域不能被修改,即,在所要求的數(shù)據(jù)的當(dāng)前加載操作期間,在這些子區(qū)域中未實(shí)現(xiàn)任何加載。在代碼存儲(chǔ)區(qū)域被劃分成子區(qū)域的情況下,用于加載塊的存儲(chǔ)器地址可以相對(duì)于具體子區(qū)域的起始存儲(chǔ)器地址而被表達(dá)。
逐塊加載的優(yōu)點(diǎn)是每個(gè)塊可以獨(dú)立于其他塊被加載。
加載例如可以包括直接將塊存儲(chǔ)在安裝腳本中指示的存儲(chǔ)器地址處。因此,在更新軟件元件期間,這種加載類型包括待更新塊的直接替換。
作為變型,待加載的塊在被定位并存儲(chǔ)到由安裝腳本提供的位置處之前,其可以在專用于臨時(shí)存儲(chǔ)的代碼存儲(chǔ)區(qū)域24b的一部分中(備用存儲(chǔ)區(qū)域)被設(shè)為等待。
外部設(shè)備已知由初始程序?qū)嵤┑挠糜诟麓a存儲(chǔ)區(qū)域24b的加載方法(直接或延遲),以便外部設(shè)備能夠知道形成代碼存儲(chǔ)區(qū)域24b的部分的備用區(qū)域的比特的狀態(tài)。這確保在步驟32計(jì)算的簽名符合在安全元件中的存儲(chǔ)區(qū)域24b的實(shí)時(shí)變化。
當(dāng)所要求的數(shù)據(jù)被完整加載時(shí)(即,根據(jù)情況當(dāng)單片塊被加載或代碼的全部塊被加載),即當(dāng)加載會(huì)話結(jié)束時(shí)(要注意的是,會(huì)話可以覆蓋安全元件的多個(gè)供電和不供電周期),由安全元件的初始程序?qū)嵤┖灻挠?jì)算步驟(步驟36)。
以一般地方式,除了簽名是針對(duì)整個(gè)代碼存儲(chǔ)區(qū)域的比特的當(dāng)前圖像計(jì)算的,即所要求的數(shù)據(jù)加載一結(jié)束就針對(duì)代碼存儲(chǔ)區(qū)域24b的比特的值計(jì)算之外,該步驟與由外部設(shè)備實(shí)施的步驟32類似。
與由外部設(shè)備根據(jù)代碼存儲(chǔ)區(qū)域的比特(這些比特在加載所要求的數(shù)據(jù)之后原則上可能被修改)的模擬計(jì)算的簽名不同,由初始程序計(jì)算的簽名考慮代碼存儲(chǔ)區(qū)域24b的全部比特,并且因此包括可能已經(jīng)被賦予到區(qū)域24b的可能的修改(惡意攻擊或由于加載錯(cuò)誤)。
在步驟34接收的簽名來(lái)自如前述的子區(qū)域的基礎(chǔ)簽名組合的情況下,基礎(chǔ)簽名也由安全元件的初始程序在步驟36計(jì)算,總是在有效加載針對(duì)所考慮的子區(qū)域的代碼塊之后。
有利地,待加載到相對(duì)應(yīng)的子區(qū)域中的代碼塊(如果存在)一旦被有效加載,就可以計(jì)算每個(gè)基礎(chǔ)簽名。
在這種情況下,事實(shí)上,所考慮的子區(qū)域的內(nèi)容(也稱作模塊)與外部設(shè)備所期待的內(nèi)容一致。因此,不需要等待所要求數(shù)據(jù)的完整加載(因而在其他子區(qū)域中的加載)以計(jì)算所考慮的子區(qū)域的基礎(chǔ)簽名。由此可知,在執(zhí)行數(shù)據(jù)加載腳本期間,可以各自計(jì)算基礎(chǔ)簽名,從而當(dāng)加載結(jié)束時(shí),減少整體的簽名計(jì)算時(shí)間。
隨后,這些基礎(chǔ)簽名以與步驟32相同的方式被組合,即根據(jù)在步驟32使用的組合方法借助雙射函數(shù)或按預(yù)先定義的順序的組合。初始程序和外部設(shè)備被配置用于實(shí)現(xiàn)相同組合。在需要時(shí),初始程序和外部設(shè)備可以交換指令以便約定待實(shí)施用于簽名計(jì)算的組合方法。
因此獲得了反映整個(gè)代碼存儲(chǔ)區(qū)域的當(dāng)前圖像的代碼存儲(chǔ)區(qū)域的簽名,所述圖像在完整加載所要求的數(shù)據(jù)之后實(shí)際得到。因此,該簽名整合了在代碼存儲(chǔ)區(qū)域24b中所操作的非預(yù)期的可能的修改。
在步驟37期間,通過(guò)比較由安全元件在步驟36計(jì)算的簽名和在步驟34從外部設(shè)備接收的簽名,檢驗(yàn)代碼存儲(chǔ)區(qū)域24b的完整性。因此其涉及整個(gè)代碼存儲(chǔ)區(qū)域具有良好符合期待的外觀,即所加載的數(shù)據(jù)的代碼的每個(gè)比特具有位于由外部設(shè)備提供的位置處的所期待的值,并且存儲(chǔ)器的其他比特就值以及位置而言未經(jīng)改變。
當(dāng)所計(jì)算的簽名不同時(shí),這意味著存儲(chǔ)器的至少一個(gè)比特相對(duì)于由外部設(shè)備實(shí)現(xiàn)的代碼存儲(chǔ)區(qū)域(即整個(gè)代碼存儲(chǔ)區(qū)域的比特)的模擬已經(jīng)被改變(增加、刪除或修改)。在這種情況下,安全元件的初始程序考慮代碼存儲(chǔ)區(qū)域24b不完整并因此不允許執(zhí)行,即不啟用如此加載的數(shù)據(jù)。
安全元件因此可以例如向外部設(shè)備示意異常,作為響應(yīng),外部設(shè)備可以再次發(fā)送新數(shù)據(jù)以便嘗試改正完整性故障(如果已接收到有錯(cuò)誤的代碼塊),或者在該故障是由于識(shí)別的邏輯技能障礙的情況下,例如在經(jīng)編譯或解釋的代碼被持久地記錄在備用區(qū)域中,而該區(qū)域只應(yīng)當(dāng)被能在局部地用作緩沖區(qū)域(buffer)的情況下,安裝用于避免該缺陷重現(xiàn)的邏輯規(guī)則。作為變型,簽名可以由初始程序重新計(jì)算,然后安全元件在安全元件的新的啟動(dòng)之后重新檢驗(yàn)。
當(dāng)由安全元件計(jì)算的簽名與從外部設(shè)備接收的簽名一致時(shí),安全元件的初始程序允許執(zhí)行,即啟用如此加載的數(shù)據(jù)(步驟38)。以示例的方式,初始程序可以執(zhí)行模式改變指令“chmod”以便修改執(zhí)行中的權(quán)限(例如“chmod+x”)。
根據(jù)各種實(shí)施方式,所加載的數(shù)據(jù)可以被立即啟用(即使其可執(zhí)行),或者在下一次啟動(dòng)安全元件時(shí)啟用。后一種模式具有在所提及的數(shù)據(jù)對(duì)應(yīng)于其操作系統(tǒng)的更新的情況下不中斷安全元件運(yùn)行的優(yōu)點(diǎn)。
在實(shí)施方式中,在安全元件運(yùn)行期間(例如,不管安全元件未被供電,定期地)實(shí)施簽名計(jì)算(步驟36)和檢驗(yàn)(步驟37)的新步驟,以便連續(xù)地檢驗(yàn)代碼存儲(chǔ)區(qū)域總是完整的。這允許標(biāo)記在最后一個(gè)加載會(huì)話之后可能突然發(fā)生的代碼存儲(chǔ)區(qū)域的可能的惡意修改。這些新的完整性修改可以在每次為安全元件供電時(shí)、針對(duì)第三方(例如外部設(shè)備或網(wǎng)絡(luò)操作者)的要求、或甚至在每次預(yù)先定義的事件(例如,用戶的請(qǐng)求、計(jì)數(shù)器超過(guò)期限、特定命令的接收、處理器的較弱使用)發(fā)生時(shí)發(fā)生。
在檢測(cè)到代碼存儲(chǔ)區(qū)域24b的完整性故障時(shí),初始程序可以決定禁用該存儲(chǔ)區(qū)域的經(jīng)解釋的代碼并通知外部設(shè)備。僅在整個(gè)代碼存儲(chǔ)區(qū)域24b恢復(fù)完整性后,進(jìn)行再次啟用經(jīng)解釋的代碼的操作。
以上示例僅為本發(fā)明非限制性的實(shí)施方式。
例如,如前所述,可以借助用于所要求的數(shù)據(jù)的每個(gè)塊的命令“Store Data”向初始程序傳送所要求的數(shù)據(jù)的塊,然后,這些塊可以被直接或者經(jīng)由備用存儲(chǔ)區(qū)域中的臨時(shí)存儲(chǔ)加載到預(yù)先準(zhǔn)備的存儲(chǔ)位置處(步驟35)。
在變型中,主機(jī)終端可以傳送初始程序?qū)?zhí)行的稱作更新腳本的新腳本,該更新腳本包括所要求的數(shù)據(jù)的經(jīng)解釋的代碼的不同塊以及所提供的加載位置的指示。該更新腳本在由初始程序執(zhí)行之前,被存儲(chǔ)在區(qū)域24b的備用存儲(chǔ)區(qū)域中,以便通過(guò)逐漸加載所要求的數(shù)據(jù)的經(jīng)解釋的代碼的不同塊來(lái)修改代碼存儲(chǔ)區(qū)域24b。
此外,在前面的示例中,安全元件發(fā)送獲得請(qǐng)求(步驟30)。在本發(fā)明的變型中,根據(jù)已知的“推送”(“push”)機(jī)制,外部設(shè)備將數(shù)據(jù)推送到安全元件,該“推送”機(jī)制不需要上面提到的請(qǐng)求。在這些變型中,外部設(shè)備知道安全元件的加載歷史(例如借助所提及的數(shù)據(jù)庫(kù))并且,當(dāng)例如為安全元件設(shè)置恰當(dāng)?shù)母聲r(shí),外部設(shè)備能夠?qū)崿F(xiàn)模擬代碼存儲(chǔ)區(qū)域的圖像、計(jì)算簽名(如有必要,經(jīng)由基礎(chǔ)簽名)以及在“推送”模式下向安全元件傳送全部?jī)?nèi)容。