国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向資源受限安全芯片的開放式運(yùn)行環(huán)境設(shè)計(jì)*

2022-05-20 02:12王志宇席劍霄鄭江東
信息安全與通信保密 2022年4期
關(guān)鍵詞:指令集常量字節(jié)

王志宇,席劍霄,張 瑩,鄭江東,羅 迎

(1.公安部第一研究所,北京 100048;2.北京握奇數(shù)據(jù)股份有限公司,北京 100102)

0 引 言

集成電路芯片的安全等級(jí)能力是對(duì)芯片進(jìn)行評(píng)估的重要維度,安全芯片須通過高標(biāo)準(zhǔn)認(rèn)證以符合商用密碼產(chǎn)品對(duì)芯片安全能力的要求。由于成本和應(yīng)用場(chǎng)景等原因,能夠達(dá)到此類安全認(rèn)證級(jí)別的集成電路芯片基本都屬于硬件資源受限的芯片[1-2]。資源受限安全芯片(以下簡(jiǎn)稱“安全芯片”)操作系統(tǒng)作為安全芯片的運(yùn)行支撐平臺(tái),發(fā)展至今形成了開放式(Open)架構(gòu)和封閉式(Closed)架構(gòu)2 種技術(shù)路線。其中,開放式架構(gòu)實(shí)現(xiàn)了用戶程序和操作系統(tǒng)的分離,降低了應(yīng)用程序的編寫、編譯、下載、執(zhí)行與芯片操作系統(tǒng)的耦合性。但是,開放式架構(gòu)也存在如下劣勢(shì)。

(1)現(xiàn)有主流開放式架構(gòu)主要采用國(guó)外廠商專利技術(shù),需要繳納專利費(fèi)用,國(guó)內(nèi)廠商目前還缺少自主可控的技術(shù)主導(dǎo)力。

(2)開放式架構(gòu)主要采用棧幀結(jié)構(gòu),在方法調(diào)用過程中涉及入棧和出棧,在字節(jié)碼執(zhí)行過程中也涉及操作數(shù)棧的入棧和出棧,解釋執(zhí)行效率較低。

(3)棧幀結(jié)構(gòu)易導(dǎo)致內(nèi)存泄露,存在安全隱患。

(4)指令集源于通用指令集,與行業(yè)應(yīng)用結(jié)合度不高,精簡(jiǎn)度不夠。

針對(duì)上述原因,本文提出了一種安全芯片開放式運(yùn)行環(huán)境設(shè)計(jì)方案,通過對(duì)現(xiàn)有主流運(yùn)行環(huán)境重新進(jìn)行設(shè)計(jì),并結(jié)合行業(yè)安全應(yīng)用需求擴(kuò)展指令集,使運(yùn)行環(huán)境中的執(zhí)行效率、應(yīng)用開發(fā)便捷、安全性等方面得到提升,具有較好的應(yīng)用前景。

1 開放式運(yùn)行環(huán)境定位

安全芯片內(nèi)部嵌入式操作系統(tǒng)架構(gòu)如圖1所示。

嵌入式操作系統(tǒng)分為3 層,即應(yīng)用層、安全運(yùn)行環(huán)境和硬件驅(qū)動(dòng)層。其中,安全運(yùn)行環(huán)境是一個(gè)運(yùn)行在硬件驅(qū)動(dòng)層和應(yīng)用層之間的中間平臺(tái)層,安全運(yùn)行環(huán)境與硬件驅(qū)動(dòng)層分離,便于安全運(yùn)行環(huán)境在不同芯片硬件平臺(tái)之間移植切換;安全運(yùn)行環(huán)境提供一系列應(yīng)用程序接口(Application Programming Interface,API)給應(yīng)用層,供應(yīng)用開發(fā)者開發(fā)各種行業(yè)應(yīng)用,這些應(yīng)用在產(chǎn)品發(fā)行后也可以下載到安全運(yùn)行環(huán)境進(jìn)行加載、運(yùn)行。安全運(yùn)行環(huán)境負(fù)責(zé)對(duì)芯片中的應(yīng)用進(jìn)行管理,保護(hù)應(yīng)用本身以及應(yīng)用相關(guān)數(shù)據(jù)信息的安全。

2 開放式運(yùn)行環(huán)境總體架構(gòu)

本文提出的面向資源受限安全芯片的開放式運(yùn)行環(huán)境包括芯片外部的上位機(jī)編譯器和芯片內(nèi)部的虛擬機(jī)解釋器2 個(gè)部分,總體架構(gòu)如圖2所示。在總體架構(gòu)中,芯片外部的上位機(jī)編譯器將源文件編譯轉(zhuǎn)換成可執(zhí)行二進(jìn)制文件,芯片內(nèi)部的虛擬機(jī)解釋器加載并解釋執(zhí)行該可執(zhí)行二進(jìn)制文件。架構(gòu)中各模塊定義如下:(1)源文件是指基于通用語言規(guī)范限定編寫的源代碼;(2)編譯轉(zhuǎn)換是指將源代碼編譯為中間指令集;(3)可執(zhí)行二進(jìn)制文件是指包含方法組件的特定格式文件;(4)解釋執(zhí)行是指加載可執(zhí)行二進(jìn)制文件中的字節(jié)碼,在虛擬機(jī)中解釋執(zhí)行。

2.1 通用語言規(guī)范限定

資源受限安全芯片因Flash 空間和隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)空間受限,只能運(yùn)行基于16 位操作指令的虛擬機(jī),不能基于通用語言規(guī)范來編寫應(yīng)用源代碼,因此,需要對(duì)通用語言規(guī)范做以下限定。

(1)數(shù)據(jù)類型支持限定。支持布爾類型(boolean)和數(shù)值類型,數(shù)值類型包括字節(jié)型(byte)、短整型(short)及整型(int)等,不支持字符型(char)、長(zhǎng)整型(long)和浮點(diǎn)型。

(2)操作指令限定。在虛擬機(jī)中運(yùn)行的基本數(shù)據(jù)單元為16 位數(shù)據(jù),boolean 類型、byte 類型、short 類型及引用類型的存儲(chǔ)參數(shù)、局部變量和中間運(yùn)算結(jié)果占用1 個(gè)基本數(shù)據(jù)單元,int類型的存儲(chǔ)參數(shù)、局部變量和中間運(yùn)算結(jié)果占用2 個(gè)基本數(shù)據(jù)單元,boolean 和byte 類型的數(shù)值在算術(shù)運(yùn)算時(shí)先將數(shù)值類型提升為short 類型,若其中一個(gè)操作數(shù)類型為int 類型,則再將數(shù)值類型提升為int 類型。

(3)數(shù)值類型提升限定。應(yīng)用于算術(shù)運(yùn)算符的操作數(shù)包括一元數(shù)值類型提升和二元數(shù)值類型提升,比如:當(dāng)操作數(shù)在編譯時(shí)的類型為byte,則須通過寬化類型轉(zhuǎn)換方法將其轉(zhuǎn)換為short 類型;若其中一個(gè)操作數(shù)類型為int 類型,另一個(gè)操作數(shù)類型也轉(zhuǎn)換為int 類型。

(4)數(shù)組創(chuàng)建和訪問限定。數(shù)組類型和索引為short 類型,只支持一維數(shù)組。

(5)關(guān)鍵字限定。不支持復(fù)雜關(guān)鍵字,例如,線程同步synchronized、枚舉enum、斷言assert 等。

2.2 編譯轉(zhuǎn)換

編譯轉(zhuǎn)換過程如圖3所示。

編譯器將源文件編譯轉(zhuǎn)換為可執(zhí)行二進(jìn)制文件,轉(zhuǎn)換過程包括詞法分析、語法分析、語義分析以及代碼生成4 個(gè)階段。其中,詞法分析階段是將源代碼轉(zhuǎn)換為索引流;語法分析階段是將詞法分析后形成的索引流中的索引組合成符合語法規(guī)范的語法節(jié)點(diǎn),形成一棵基本的抽象語法樹(Abstract Syntax Tree,AST);語義分析階段依據(jù)語言規(guī)范對(duì)AST 進(jìn)行嚴(yán)格語法檢查,還需要為后續(xù)的代碼生成階段準(zhǔn)備各種數(shù)據(jù);代碼生成階段將AST 轉(zhuǎn)換為字節(jié)碼。

中間指令集是代碼生成階段中的一種中間指令,中間指令集格式經(jīng)各種技術(shù)優(yōu)化后,可生成最終的優(yōu)化指令碼。部分中間指令集如表1所示。

表1 中間指令集

針對(duì)通用語言規(guī)范限定要求,編譯器在處理字面量時(shí)需按照值大小確定類型,例如,在short 類型表示范圍內(nèi),則按short 類型處理,在超出short 類型表示范圍時(shí),則按int 類型處理;編譯器在處理操作符表達(dá)式時(shí)須做類型提升,運(yùn)算符對(duì)應(yīng)的表達(dá)式類型是其操作數(shù)提升后的類型,只能是short 類型或int 類型;編譯器在生成棧和局部變量操作、類型轉(zhuǎn)換、操作符表達(dá)式、方法調(diào)動(dòng)返回等中間指令集的過程中,boolean類型、byte 類型、short 類型及引用類型的局部變量編譯后占用1 個(gè)索引位置,int 類型編譯后則占用2 個(gè)索引位置。

2.3 常量池組件

中間指令集通過壓縮轉(zhuǎn)換,生成目標(biāo)指令并以可執(zhí)行二進(jìn)制文件的格式存儲(chǔ)??蓤?zhí)行二進(jìn)制文件中的常量池組件,將每種引用類型放在一起形成一個(gè)子常量池,具體包括:(1)將所有的類引用類型放在一起形成類子常量池;(2)將所有的靜態(tài)方法引用類型放在一起形成靜態(tài)方法子常量池;(3)將所有的虛方法引用類型放在一起形成虛方法子常量池;(4)將所有的super 方法引用類型放在一起形成super 方法子常量池;(5)將所有的靜態(tài)域引用類型放在一起形成靜態(tài)域子常量池;(6)將所有的實(shí)例域引用類型放在一起形成實(shí)例域子常量池。

通過上述過程,常量池形成6 個(gè)子常量池,包括:(1)類引用;(2)靜態(tài)方法引用;(3)虛方法引用;(4)super 方法引用;(5)靜態(tài)域引用;(6)實(shí)例域引用。

2.4 解釋執(zhí)行

芯片內(nèi)部的虛擬機(jī)解釋器解釋執(zhí)行可執(zhí)行二進(jìn)制文件中的指令集,指令集的解釋執(zhí)行過程如圖4所示。

指令由一個(gè)字節(jié)長(zhǎng)度的操作碼組成,操作碼指定要執(zhí)行的操作,并由零個(gè)或多個(gè)操作數(shù)表示要操作的值。與基于棧幀的指令集相比,本文所設(shè)計(jì)的基于寄存器的指令集在指令執(zhí)行性能上更優(yōu),同時(shí),結(jié)合行業(yè)應(yīng)用需求,將應(yīng)用實(shí)現(xiàn)過程中使用頻率較高的基礎(chǔ)API 封裝成宏指令,通過隱含參數(shù)信息、定義多種操作格式、單字節(jié)常量索引、宏指令等方法精簡(jiǎn)設(shè)計(jì)后形成6 類指令。

一是隱含參數(shù)信息指令。如表2所示,將操作數(shù)和寄存器編號(hào)都隱含到操作碼的常量賦值指令中。

表2 常量賦值指令

二是具有多種操作格式的高頻指令。如表3所示為常用算術(shù)加操作指令。

表3 加操作指令

三是基于不同參數(shù)個(gè)數(shù)、具有不同指令格式的指令。如表4所示為靜態(tài)方法調(diào)用指令。

表4 靜態(tài)方法調(diào)用指令

四是常用數(shù)據(jù)類型指令和不常用數(shù)據(jù)類型指令。例如,short 數(shù)據(jù)類型指令和int 數(shù)據(jù)類型指令。

五是具有單字節(jié)常量池索引的指令。如表5所示為靜態(tài)域訪問指令。

表5 靜態(tài)域訪問指令

六是宏指令。如表6所示為數(shù)組拷貝宏指令。

表6 數(shù)組拷貝宏指令

3 指令集性能提升

指令集解釋執(zhí)行時(shí)采用了寄存器結(jié)構(gòu),甚至宏指令,在字節(jié)碼執(zhí)行過程中不涉及操作數(shù)棧的入棧和出棧,與棧幀結(jié)構(gòu)相比,解釋執(zhí)行的效率較高。通過對(duì)比Java 智能卡(JavaCard)的實(shí)現(xiàn)來分析性能,部分字節(jié)碼指令性能的比對(duì)結(jié)果如表7所示。

表7 部分字節(jié)碼指令性能比對(duì)

如表8所示,以參考代碼“short totalLen=(short)(len+recLen);”的加操作指令為例,通過字節(jié)碼、操作數(shù)棧和計(jì)算過程的比對(duì),進(jìn)一步分析性能。

表8 加操作指令性能比對(duì)

如表9所示,以交通電子存折和電子錢包應(yīng)用(Electronic Deposit & Electronic Purse,EDEP)的交易過程為例,從應(yīng)用層面進(jìn)一步分析本文設(shè)計(jì)指令集的性能。

表9 EDEP 應(yīng)用性能比對(duì)

4 虛擬機(jī)安全分析

虛擬機(jī)運(yùn)行在安全芯片中,針對(duì)物理層的攻擊與防護(hù)更多依賴于芯片本身,而對(duì)虛擬機(jī)本身的攻擊與防護(hù)更多是依靠邏輯層實(shí)現(xiàn)[3]。針對(duì)虛擬機(jī)邏輯層的常用攻擊手段是通過修改字節(jié)碼,使得應(yīng)用運(yùn)行過程中發(fā)生內(nèi)存泄露,從而非法獲取芯片內(nèi)部機(jī)密數(shù)據(jù)和其他應(yīng)用數(shù)據(jù)[4]。本文所設(shè)計(jì)的安全芯片開放式運(yùn)行環(huán)境具備較好的字節(jié)碼指令集安全能力。以JavaCard 的棧幀訪問為例來分析本文設(shè)計(jì)的字節(jié)碼指令集的安全性。針對(duì)JavaCard 棧幀的常用攻擊手段是替換或刪除某些字節(jié)碼,打亂棧幀結(jié)構(gòu),使得棧幀溢出導(dǎo)致內(nèi)存泄露[5]。本文以刪除字節(jié)碼的方式作為示例,進(jìn)行了詳細(xì)的安全對(duì)比分析。

以源代碼“var=0;”為例,給局部變量var賦值0,對(duì)應(yīng)JavaCard 的字節(jié)碼如下所示:

sconst_0;

sstore_3;

sconst_0 的操作數(shù)棧過程如下所示:

… -> …, 0

將一個(gè)short 值0 壓入棧中,將sconst_0 刪掉之后,對(duì)于操作數(shù)棧來說,少了一次壓棧操作,即少了將0 壓入棧中的過程。

后續(xù)字節(jié)碼是sstore_3,操作數(shù)棧過程如下所示:

…, value -> …

將棧頂?shù)囊粋€(gè)short 值彈出,并將該值賦給第3 個(gè)局部變量,結(jié)合sconst_0,在原來執(zhí)行sstore_3 時(shí),應(yīng)將0 從棧頂彈出,賦給第3 個(gè)局部變量,完成var=0的過程。將sconst_0刪掉之后,當(dāng)繼續(xù)執(zhí)行sstore_3 時(shí),從棧頂彈出某一個(gè)值,該值存在較大的不可控性,會(huì)影響本方法中的邏輯正確性,在極端的情況下,該值會(huì)從上一個(gè)棧幀中彈出,直接導(dǎo)致上一棧幀內(nèi)存泄露。如果虛擬機(jī)棧幀不做安全防護(hù)就會(huì)存在極大的安全隱患。

本文設(shè)計(jì)的指令集,同樣以源代碼“var=0;”為例,對(duì)應(yīng)字節(jié)碼如下所示:

const-0/r3;

const-0/r3 的操作數(shù)棧過程如下所示:

…, r3 -> …, r3

將一個(gè)short 值0 賦值給寄存器r3 中。如果將const-0/r3 刪掉之后,只是少了r3=0 的賦值過程,同樣會(huì)影響本方法中的邏輯正確性,但不會(huì)直接導(dǎo)致上一棧幀內(nèi)存泄露,安全性相對(duì)較高。

如表10 所示,列出了安全認(rèn)證實(shí)驗(yàn)室測(cè)試報(bào)告中對(duì)開放式運(yùn)行環(huán)境的安全檢測(cè)項(xiàng)[6],以及本文提出的開放式運(yùn)行環(huán)境的實(shí)際測(cè)試結(jié)果,依據(jù)中國(guó)銀聯(lián)股份有限公司發(fā)布的Q/CUP 040.2—2011《銀聯(lián)卡芯片安全規(guī)范 第2 部分:嵌入式軟件規(guī)范》。

表10 安全檢測(cè)項(xiàng)及測(cè)試結(jié)果

5 面向多應(yīng)用的設(shè)計(jì)

資源受限安全芯片中的開放式運(yùn)行環(huán)境在技術(shù)上能支持多應(yīng)用、產(chǎn)品發(fā)行后新應(yīng)用的下載和應(yīng)用遠(yuǎn)程管理,開放式運(yùn)行環(huán)境中的多應(yīng)用架構(gòu)如圖5所示。

由于同一個(gè)硬件平臺(tái)上的應(yīng)用可能來自不同的所有者,因此,在不同應(yīng)用之間需要利用安全機(jī)制進(jìn)行應(yīng)用的隔離,以保護(hù)應(yīng)用所有者的商業(yè)數(shù)據(jù)。

5.1 應(yīng)用防火墻

防火墻是應(yīng)用運(yùn)行時(shí)的強(qiáng)制保護(hù),允許虛擬機(jī)在運(yùn)行時(shí)自動(dòng)進(jìn)行額外的安全檢查。應(yīng)用通過防火墻隔離,形成單獨(dú)的受保護(hù)空間環(huán)境,單個(gè)包中的所有應(yīng)用共享同一個(gè)空間環(huán)境。應(yīng)用中任何給定的數(shù)據(jù)和方法都有一個(gè)單獨(dú)的受保護(hù)空間環(huán)境。

任何時(shí)刻,虛擬機(jī)內(nèi)部只有一個(gè)受保護(hù)空間環(huán)境處于激活狀態(tài)。當(dāng)滿足特定訪問規(guī)則時(shí),調(diào)用某些方法、從某些方法返回或異常退出時(shí),虛擬機(jī)允許環(huán)境切換。在環(huán)境切換期間,之前的環(huán)境被推送到內(nèi)部虛擬機(jī)棧上,新的環(huán)境成為當(dāng)前激活環(huán)境,被調(diào)用的方法在新的環(huán)境中執(zhí)行。從該方法退出后,虛擬機(jī)將執(zhí)行環(huán)境恢復(fù),恢復(fù)為切換之前的環(huán)境。

5.2 應(yīng)用協(xié)同訪問

應(yīng)用通過防火墻隔離,單個(gè)包中的所有應(yīng)用共享同一個(gè)受保護(hù)空間環(huán)境,并允許同一個(gè)包內(nèi)的應(yīng)用相互進(jìn)行數(shù)據(jù)訪問。不同包之間的應(yīng)用需滿足特定規(guī)則(例如共享接口)才能跨過防火墻訪問對(duì)方應(yīng)用允許訪問的數(shù)據(jù)和方法。

5.3 應(yīng)用場(chǎng)景融合

隨著移動(dòng)智能終端的普及,告別“一個(gè)應(yīng)用一張卡”的多卡時(shí)代,一卡多用、多應(yīng)用融合已成為新的發(fā)展趨勢(shì)。在“一卡多用”產(chǎn)品發(fā)行過程中,由專門機(jī)構(gòu)的管理者對(duì)基礎(chǔ)、通用類型的信息進(jìn)行統(tǒng)一管理,完成原始信息錄入、確保信息真實(shí)性、維護(hù)變更信息等工作,是實(shí)現(xiàn)數(shù)據(jù)被多應(yīng)用共享的最安全、經(jīng)濟(jì)的智能卡解決方案。

6 開放式運(yùn)行環(huán)境創(chuàng)新和提升

安全芯片產(chǎn)品廣泛應(yīng)用于數(shù)字身份、金融、電信、社保、交通、水電燃?xì)?、車載、密碼鑰匙等領(lǐng)域,提供身份識(shí)別、密鑰生成、安全存儲(chǔ)、數(shù)據(jù)保護(hù)等功能。本文設(shè)計(jì)的面向資源受限安全芯片的開放式安全運(yùn)行環(huán)境的創(chuàng)新和提升體現(xiàn)為以下幾點(diǎn)。

(1)支持更實(shí)用的指令集。精簡(jiǎn)指令集和應(yīng)用向擴(kuò)展指令集具有更高效的實(shí)用性,可廣泛應(yīng)用于智能卡、安全元件(Secure Element,SE)或安全微控制單元(Microcontroller Unit,MCU)等芯片。

(2)支持多應(yīng)用融合。通過單芯片實(shí)現(xiàn)多個(gè)業(yè)務(wù)應(yīng)用,改變了需要多顆芯片耦合實(shí)現(xiàn)業(yè)務(wù)功能的情況,大大降低了設(shè)備芯片成本和研發(fā)難度。

(3)支持內(nèi)核化??上鲁恋桨踩酒鳛閮?nèi)核(Kernel),各設(shè)備廠家和行業(yè)用戶只需關(guān)注應(yīng)用,便于產(chǎn)品快速落地和迭代。

(4)支持國(guó)產(chǎn)自主可控。具備打破國(guó)外廠商技術(shù)壟斷的能力,可在安全芯片操作系統(tǒng)領(lǐng)域?qū)崿F(xiàn)自主可控的目標(biāo)。

7 結(jié) 語

安全芯片在商用密碼產(chǎn)品中的使用非常廣泛,在一些特定行業(yè)中,對(duì)于技術(shù)自主可控的需求是合理現(xiàn)實(shí)的,以前面對(duì)這類需求時(shí),多是采用封閉架構(gòu)(Closed)技術(shù)來實(shí)現(xiàn)的。這類技術(shù)難以支持業(yè)務(wù)功能變化快、多應(yīng)用融合的使用場(chǎng)景,難以適應(yīng)萬物互聯(lián)場(chǎng)景下的產(chǎn)品技術(shù)需求。本文設(shè)計(jì)的安全芯片運(yùn)行環(huán)境,可以提供一個(gè)面向資源受限安全芯片的支持多應(yīng)用和應(yīng)用后下載的開放式架構(gòu)解決方案。在保障數(shù)據(jù)安全的前提下,有效促進(jìn)行業(yè)應(yīng)用的發(fā)展。

猜你喜歡
指令集常量字節(jié)
基于Kubernetes的RISC-V異構(gòu)集群云任務(wù)調(diào)度系統(tǒng)①
科學(xué)照亮世界
——卡文迪什測(cè)定萬有引力常量
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
3DNow指令集被Linux淘汰
No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
一次函數(shù)的學(xué)習(xí)引導(dǎo)
基于Dais—CMX模型機(jī)的斐波那契數(shù)列指令集設(shè)計(jì)
VHDL中常用的數(shù)據(jù)對(duì)象
什么是AMD64
人類進(jìn)入“澤它時(shí)代”
泸水县| 五原县| 南昌县| 招远市| 冷水江市| 湖口县| 措美县| 南陵县| 墨玉县| 湖南省| 靖边县| 朔州市| 溧阳市| 长葛市| 余庆县| 榆中县| 竹北市| 隆化县| 稷山县| 大城县| 手机| 澎湖县| 昭觉县| 鹤山市| 宁化县| 滨州市| 循化| 宁明县| 灵山县| 莒南县| 栾城县| 盐城市| 洪江市| 盖州市| 廉江市| 称多县| 郎溪县| 望城县| 鹤壁市| 岳阳县| 临湘市|