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

?

基于iRAM 的抗物理內(nèi)存泄露攻擊密碼算法輕量化實現(xiàn)

2022-12-19 09:23李彥初荊繼武雷靈光王躍武王平建
關(guān)鍵詞:敏感數(shù)據(jù)數(shù)字簽名內(nèi)存

李彥初 荊繼武 雷靈光 王躍武 王平建

1.中國科學院大學計算機科學與技術(shù)學院, 北京 100049; 2.中國科學院大學密碼學院, 北京 100049; 3.北京大學軟件與微電子學院, 北京 100871; 4.中國科學院信息工程研究所信息安全國家重點實驗室, 北京 100093; 5.中國科學院大學網(wǎng)絡空間安全學院, 北京 100049; ? 通信作者, E-mail: leilingguang@iie.ac.cn

ARM 平臺廣泛應用于個人移動終端、物聯(lián)網(wǎng)和工業(yè)控制系統(tǒng)等場景[1]。相對于桌面系統(tǒng)或服務器, 移動終端設備更容易丟失或被竊取, 而物聯(lián)網(wǎng)和工業(yè)控制系統(tǒng)經(jīng)常需要在無人值守的非受控場景下工作, 因此這類平臺的安全機制更容易遭受物理內(nèi)存泄露攻擊。因此, 如何構(gòu)建 ARM 平臺抗物理內(nèi)存泄露攻擊的密碼機制成為目前系統(tǒng)安全研究的熱點。

物理內(nèi)存泄露攻擊的根源在于普通的 DRAM(dynamic random access memory)內(nèi)存芯片獨立于ARM 的 SoC (system on a chip)芯片, 需要通過內(nèi)存總線與 SoC 芯片進行雙向數(shù)據(jù)傳輸。當數(shù)據(jù)存儲在內(nèi)存中時, 攻擊者可通過如下3種方式發(fā)起物理內(nèi)存泄露攻擊。1) 冷啟動攻擊[2–3]: 利用內(nèi)存的剩磁效應, 將正在運行的設備斷電, 然后將內(nèi)存接入攻擊者控制的系統(tǒng)中, 讀取其中殘留的數(shù)據(jù)。2) 總線監(jiān)聽攻擊[4–5]: 當內(nèi)存芯片與SoC芯片通過內(nèi)存總線傳輸數(shù)據(jù)時, 攻擊者通過監(jiān)聽該總線, 竊取內(nèi)存中的敏感數(shù)據(jù), 相關(guān)的攻擊工具[6–7]可以很容易地獲取。3) DMA (direct memory access)攻擊[8–10]: 攻擊者控制特定 I/O 設備并發(fā)起 DMA 請求, 在處理器不參與的情況下, 直接從內(nèi)存中拷貝敏感數(shù)據(jù)。因此, 避免直接在內(nèi)存中存儲敏感計算輸入、輸出和中間結(jié)果數(shù)據(jù)成為當前抗物理內(nèi)存泄露攻擊的主要技術(shù)途徑。

現(xiàn)階段應對物理內(nèi)存泄露攻擊的技術(shù)途徑主要包括以 Cache (高速緩存)、寄存器和iRAM為基礎的 3種方案。

Cache 方案[11–13]基于 Cache 的敏感計算抗物理攻擊方法存在幾個問題: 1) 對系統(tǒng)性能影響比較大, 比如, 60%的Cache被占用后, 系統(tǒng)性能急劇降低[13]; 2) 難以進行軟件編程調(diào)度, 操控性差; 3) 無法與 I/O 設備直接進行數(shù)據(jù)交互。

寄存器方案[14–15]通過引入安全機制, 確保敏感數(shù)據(jù)在計算過程中只存儲在 SoC 芯片內(nèi)的寄存器中, 不出現(xiàn)在內(nèi)存中, 但因空間有限面臨性能挑戰(zhàn),此外, 不同 SoC 平臺上的可用寄存器類型存在較大的差異, 方案的可移植性較差。

iRAM 方案[16–19]將敏感計算結(jié)果及中間值存儲在iRAM中, 實現(xiàn)抗物理泄露內(nèi)存攻擊。不同于SoC 外部的 DRAM 內(nèi)存, iRAM 剩磁效應小, 并且在SoC 芯片內(nèi)部, 與 CPU 單元通過片內(nèi)總線連接, 具有良好的抗物理內(nèi)存泄露攻擊特性。此外, iRAM尋址方式與 DRAM 一致, 更易操控, 并能夠直接與I/O 設備交互。iRAM 方案工程實現(xiàn)優(yōu)勢明顯。

輕量化實現(xiàn)是目前 iRAM 方案面臨的主要技術(shù)挑戰(zhàn)。移動終端上的大部分 iRAM 資源會被操作系統(tǒng)使用, 只有少量空閑的 iRAM。比如, FreeScale i.MX6Quad 系列 SoC 的空閑 iRAM 只有 32 KB。然而, 當前方案[16–19]使用的iRAM 空間都超過了系統(tǒng)空閑 iRAM 的大小, 從而會影響普通世界操作系統(tǒng)的正常功能。因此, 亟需一個輕量高效的密碼算法來實現(xiàn)方案, 以便降低iRAM資源消耗。

本文通過對密碼運算過程中敏感數(shù)據(jù)的細粒度劃分, 盡量縮小保護數(shù)據(jù)規(guī)模, 實現(xiàn) iRAM 資源消耗的減少。首先, 通過修改系統(tǒng)應用加載器, 將程序棧段加載到iRAM; 然后, 通過密碼算法計算過程分析, 標識出密碼算法敏感變量的最小集合; 隨后, 重新設計密碼算法實現(xiàn)程序, 將敏感數(shù)據(jù)向程序棧段集中, 以便簡化iRAM調(diào)度; 最后, 必要時通過輔助可信應用引入, 將棧段中的非敏感數(shù)據(jù)移除, 進一步降低 iRAM 消耗。此外, 該方案通過ARM TrustZone實現(xiàn)iRAM的抗軟件攻擊保護。本研究在 FreeScale 的 i.MX6Quad 開發(fā)板上對 SM2/3/4以及 RSA, AES, SHA3 等主流的密碼算法進行原型系統(tǒng)實現(xiàn), 并開展方案驗證評估。

1 相關(guān)工作

研究人員提出一些針對物理內(nèi)存泄露攻擊的防御方案, 主要針對冷啟動攻擊[2–3]以及總線監(jiān)聽攻擊[4–5]。這些方案通過構(gòu)建以 SoC 為邊界的執(zhí)行環(huán)境, 將敏感數(shù)據(jù)保存在 SoC 內(nèi)部, 有效地阻止攻擊。例如, TRESOR[14]將密鑰存儲在 x86 調(diào)試寄存器中,并利用 Intel 的 AES-NI 擴展指令, 在微處理器中運行 AES 算法, 避免 DRAM 的使用, 從而阻止物理攻擊。PRIME[15]將RSA算法中的私鑰操作限制在Intel 多媒體寄存器(共 16個 256 bit 的寄存器)中, 保護了 RSA-2048 算法。Copker[11]將密碼運算的密鑰和所有中間結(jié)果保存在 Cache 中, 確保敏感信息不會進入 DRAM, 實現(xiàn)抗物理攻擊的 AES 算法和RSA 算 法 。Sentry[16]和 CryptMe[17]借 助 iRAM 來 保護AES算法中的敏感數(shù)據(jù)。

另外一種物理內(nèi)存泄露攻擊是 DMA 攻擊[8–10],可利用系統(tǒng)的安全機制(如 TrustZone 的 DMA 隔離)來阻止。由于安全機制的引入也可同時阻止軟件攻擊, 所以綜合考慮上述 3種物理內(nèi)存泄漏攻擊和軟件攻擊, 研究人員提出了相關(guān)的敏感數(shù)據(jù)保護方案。CaSE[13]利用Cache和ARM TrustZone技術(shù)[20]構(gòu)建以 SoC 為邊界的可信執(zhí)行環(huán)境。Oath 機制[19]、OP-TEE 的 pager 機制[21]和 m-TEE[18]都是利用 iRAM和 TrustZone 機制保護敏感數(shù)據(jù), pager 機制和 m-TEE方案分別需要180 KB和100 KB的iRAM空間;Oath 通過分離敏感數(shù)據(jù)和非敏感數(shù)據(jù), 減少了對iRAM 的占用, 但所測試的 12個可信應用仍需使用平均 50.52 KB 的 iRAM 空間。本研究支持在系統(tǒng)空閑的 iRAM 上同時運行多個密碼算法, 其中單個算法對 iRAM 的使用量不超過 4.5 KB。

內(nèi)存受限場景下的密碼算法實現(xiàn)需要同時考慮密碼運算效率以及對內(nèi)存的使用量。研究人員提出許多減少內(nèi)存消耗且高效的密碼運算或密碼算法的實現(xiàn)方案, 包括對稱密碼算法[22]、基于橢圓曲線的非對稱密碼算法[23–25]和格密碼算法[26]等。本研究在 iRAM 內(nèi)存受限的條件下, 實現(xiàn)多種密碼算法。首先, 本文使用受限 iRAM 內(nèi)存實現(xiàn)抗物理內(nèi)存泄露攻擊的密碼算法, 而上述工作聚焦于密碼算法在減少內(nèi)存使用同時的高效實現(xiàn)。其次, 在相同的實現(xiàn)方式下, 減少內(nèi)存占用會導致性能的下降, 所以上述工作通過特殊處理器指令和硬件擴展等方式同時實現(xiàn)高效和輕量化兩個目標, 本文僅依賴 ARM平臺上廣泛部署的TrustZone安全擴展和通用組件iRAM來保護敏感數(shù)據(jù), 方案可移植性更好。此外,本文主要降低 iRAM 內(nèi)存的使用量, 而算法實際的內(nèi)存使用量(iRAM+DRAM)并未減少, 所以與未修改的實現(xiàn)相比, 密碼算法性能沒有明顯降低。

2 背景知識與相關(guān)工作

2.1 內(nèi)部隨機存取存儲器(iRAM)

內(nèi)部隨機存取存儲器(internal-RAM, iRAM)是一種片上隨機存取存儲器(on-chip random access memory, OCRAM), 是通用計算平臺(例如 ARM 處理器)中廣泛存在的組件, 比普通的 DRAM 讀寫速度更快。由于價格限制, iRAM在終端上的容量一般在幾十 KB 到幾百 KB 之間, 主要用于存儲系統(tǒng)中的特定信息(比如, 暫?;蚧謴拖到y(tǒng)的相關(guān)代碼)以及加速視頻播放等多媒體處理過程。

2.2 OP-TEE架構(gòu)

OP-TEE(open portable trusted execution environment)[27]是一個開源 TEE OS, 基于 TrustZone[20]運行。TrustZone是ARM公司推出的安全擴展, 將SoC 上的中央處理器、內(nèi)存和外設等資源劃分到普通世界或安全世界, 并基于硬件邏輯的訪問控制實現(xiàn)普通世界與安全世界的隔離。OP-TEE 架構(gòu)如圖1所示, 安全世界中運行用戶態(tài)的若干可信應用(trusted application, TA)以及內(nèi)核態(tài)的安全操作系統(tǒng)(OP-TEE OS); 普通世界中運行非敏感代碼, 包括用戶態(tài)的客戶端應用(client application, CA)以及內(nèi)核態(tài)的富操作系統(tǒng)(rich OS)??蛻舳藨猛ㄟ^用戶態(tài)的 TEE 客戶端(TEE client)來調(diào)用可信應用中的敏感功能。調(diào)用過程中, 富操作系統(tǒng)中的 TEE 驅(qū)動(TEE Driver)通過 SMC (secure monitor call)指令跳轉(zhuǎn)到安全世界中的安全監(jiān)控器模塊(Secure Monitor),從而與安全世界進行交互。

圖1 OP-TEE系統(tǒng)架構(gòu)Fig.1 Architecture of OP-TEE

2.3 可信應用(TA)的運行時數(shù)據(jù)段分配

OP-TEE 架構(gòu)中, 安全世界的可信應用以 ELF格式的形式存儲于文件系統(tǒng), 其代碼及代碼中的各類變量存放在 ELF 文件的不同可加載段。當 OPTEE OS 加載可信應用時, 會給每個可加載段分配一段內(nèi)存空間, 并將相應數(shù)據(jù)從可執(zhí)行文件拷貝到對應的內(nèi)存空間中。之后, 可信應用運行時, 各類變量的值(包括敏感數(shù)據(jù)及非敏感數(shù)據(jù))就存儲在變量所在的可加載段的對應內(nèi)存空間中。從總體上看, 可信應用的可加載段包括.ta_head段、.text段、.rodata 段、.data 段 、.bss段(可信應用從.bss段劃分堆空間, 所以堆變量也存放在.bss 段)和棧段等。其中,.ta_head 段存放可信應用的基本信息(可信應用的唯一標識符、棧段大小和入口函數(shù)地址等),.text 段存放可信應用的代碼,.rodata 段存放常量等信息,.data段存放已初始化的全局變量和局部靜態(tài)變量,.bss段存放未初始化或初始化為0的全局變量、局部靜態(tài)變量和由程序員分配/釋放的堆變量,棧段存放由編譯器自動分配/釋放的棧變量。本文通過將敏感數(shù)據(jù)集中在一個段中, 并為該段分配受TrustZone 保護的 iRAM 來實現(xiàn)敏感數(shù)據(jù)泄露保護。

算法1的代碼示例展示不同變量的定義方式及其對應的數(shù)據(jù)段。

其中, 第 1 行是存放在.rodata 段的常量; 第 2 行和第 6 行是.bss 段的全局變量和局部靜態(tài)變量;第 3 行和第 7 行是.data 段中的全局變量和局部靜態(tài)變量; 第 4 行的函數(shù)參數(shù)以及第 5 行的局部變量存放在棧段, 但客戶端應用傳遞過來的緩沖區(qū)形式的參數(shù)指向位于非安全 DRAM 的共享內(nèi)存中的一塊緩沖區(qū); 第 8 行動態(tài)地申請一塊堆空間, 并令一個存放在棧中的局部變量(指針)指向這塊空間, 堆空間中的數(shù)據(jù)存放在.bss 段, 第 10 行手動釋放了堆空間。

3 威脅模型與安全假設

假設敵手可以發(fā)起軟件攻擊和物理內(nèi)存泄露攻擊。1) 軟件攻擊: 利用各種系統(tǒng)漏洞攻擊控制普通世界的操作系統(tǒng), 進而無限制地訪問普通世界的資源, 包括寄存器、DRAM、iRAM、Cache以及其他設備, 但軟件攻擊無法破壞由TrustZone硬件隔離保護的安全資源。2) 物理內(nèi)存泄露攻擊: 可以物理訪問被保護設備, 并通過冷啟動攻擊[2–3]、監(jiān)聽SoC外部總線的總線監(jiān)聽攻擊[4–5]以及DMA攻擊[8–10],竊取DRAM 中的敏感數(shù)據(jù)。

本文假定物理內(nèi)存泄漏攻擊無法攻擊由 Trust-Zone 保護的安全 iRAM。1) 系統(tǒng)上電后, 引導時執(zhí)行的第一段代碼會將 iRAM 中的內(nèi)容清除, 而該代碼不能被繞過[16]; 并且 iRAM 及其使用的高級可擴展接口(advanced extensible interface, AXI)總線都在SoC 內(nèi)部, 無法被取出, 所以冷啟動攻擊和總線監(jiān)聽攻擊無法竊取 iRAM 中的敏感數(shù)據(jù)。2) TrustZone默認普通世界向安全世界發(fā)起的 DMA 請求被拒絕,很多廣泛使用的 SoC 中的 DMA 控制器[28–29]還可以拒絕特定 DMA 通道以及 DMA 設備發(fā)起的從安全世界傳輸數(shù)據(jù)的請求。所以 DMA 攻擊無法竊取被TrustZone 保護的安全 iRAM 中的敏感數(shù)據(jù)。進行密碼運算的可信應用運行在安全世界的 TEE OS 之上,側(cè)信道攻擊特征不明顯。

本研究旨在保護密碼算法運行時敏感數(shù)據(jù)的機密性。我們假設目標平臺支持并正確實現(xiàn)了 Trust-Zone 技術(shù); 安全世界的操作系統(tǒng)和可信應用不是惡意的, 沒有敵手可利用的漏洞, 并且被平臺可信啟動技術(shù)安全加載。

4 方案設計

4.1 方案架構(gòu)與內(nèi)存布局

本文提出的方案利用 iRAM 存儲密碼運算過程中的敏感數(shù)據(jù), 以便抵御物理內(nèi)存泄漏攻擊, 并盡量減少對 iRAM 的占用, 保證普通世界的功能不受影響。將密碼算法中的敏感數(shù)據(jù)限制在棧段中, 通過修改可信應用的加載方式, 僅給棧段分配安全iRAM, 給其他可加載段分配安全DRAM, 從而減少 iRAM 的使用量。此外, 方案還將棧段中的非敏感數(shù)據(jù)分離到其他可加載段, 進一步減少 iRAM 的使用量。方案的基本架構(gòu)和內(nèi)存布局見圖2。

圖2 實現(xiàn)密碼算法的可信應用及其輔助可信應用的代碼和數(shù)據(jù)在內(nèi)存中的位置Fig.2 Memory location of the TA and its assisted TA’s code and data

方案涉及的內(nèi)存包括 iRAM 和 DRAM, 利用ARM TrustZone 技術(shù)分別將其劃分為安全模式和非安全模式。密碼運算由在安全世界的可信應用完成??尚艖脧姆前踩?DRAM 的共享內(nèi)存獲得運行在普通世界的客戶端應用的輸入?yún)?shù), 執(zhí)行密碼運算, 并返回計算結(jié)果。方案通過修訂密碼算法實現(xiàn), 將敏感數(shù)據(jù)全部集中在棧段。隨后, 進一步修改可信應用加載程序, 將可信應用中除棧段外的其他可加載段全部放在安全 DRAM 中, 同時將棧段分配在安全 iRAM 中。此外, 棧段還包含密碼算法實現(xiàn)中的非敏感數(shù)據(jù), 為了進一步壓縮 iRAM 使用量,必要時引入輔助可信應用, 將棧段的非敏感數(shù)據(jù)轉(zhuǎn)移到其他可加載段和輔助可信應用的可加載段。輔助可信應用的所有可加載段分配在安全 DRAM中。這樣, 敏感數(shù)據(jù)僅存在于安全iRAM中, 能夠同時抵御物理內(nèi)存泄露攻擊和軟件攻擊。密碼算法的其他數(shù)據(jù)分配至安全 DRAM 中, 由 ARM Trust-Zone 隔離機制構(gòu)建與普通世界的邊界, 抵御軟件攻擊。

4.2 集中敏感數(shù)據(jù)到棧段

數(shù)字簽名算法的敏感數(shù)據(jù)包括私鑰, 非對稱加密算法的敏感數(shù)據(jù)有私鑰和明文, 密碼雜湊算法的輸入可能為敏感數(shù)據(jù), 對稱加密算法的敏感數(shù)據(jù)包括對稱密鑰和明文。此外, 算法計算過程中的一些數(shù)據(jù)可以用于恢復上述敏感數(shù)據(jù)或增加恢復的可能性, 也應當作為敏感數(shù)據(jù)加以保護。具體地, SM2數(shù)字簽名算法的簽名結(jié)果為(r,s), 計算s的方式為s= (1+dA)-1(k-r×dA) modn, 其中dA為私鑰,k為用于本次簽名運算產(chǎn)生的隨機數(shù),n為橢圓曲線基點G的階。由于s,r和n公開, 因而能獲取k的攻擊者可以通過上述公式來求解出私鑰dA, 所以k也應該屬于敏感數(shù)據(jù)。當密碼雜湊算法的輸入為敏感數(shù)據(jù)時, 中間計算結(jié)果可用于降低恢復敏感輸入的難度, 所以也屬于敏感數(shù)據(jù)。對稱加密算法中擴展出的輪密鑰直接用來加密明文, 每輪中間結(jié)果的泄露相當于計算輪數(shù)的降低, 所以二者都屬于敏感數(shù)據(jù)。最后, 在密碼算法的實現(xiàn)中, 與敏感數(shù)據(jù)有關(guān)的中間計算結(jié)果也可能屬于敏感數(shù)據(jù), 比如SM2 數(shù)字簽名算法中的(1+dA)-1和(k-r×dA) modn等, 因為他們的泄露會極大地降低獲取算法中敏感數(shù)據(jù)的難度。

如2.3節(jié)所述, 密碼算法實現(xiàn)代碼可能包含多個數(shù)據(jù)段, 上述敏感數(shù)據(jù)可能存在于各種不同的段(包括存放未初始化的全局變量/靜態(tài)變量的.bss段、存放棧變量的棧段以及存放堆變量的堆段)中。為了抵御物理內(nèi)存泄露攻擊, 需要將敏感數(shù)據(jù)存儲在 iRAM 中。如果不對算法實現(xiàn)做修訂, 則需要將上述數(shù)據(jù)段都加載到安全 iRAM 中。但這幾類數(shù)據(jù)段同時還存放大量非敏感數(shù)據(jù), 比如未初始化的全局變量/靜態(tài)變量中可能會存放一些密碼算法中公開且固定的參數(shù)。這樣, 大量非敏感數(shù)據(jù)會造成不必要的 iRAM 消耗。棧段是密碼運算過程中間結(jié)果存儲的不可或缺的數(shù)據(jù)段。因此, 本文通過密碼算法實現(xiàn)代碼修訂, 將所有敏感參數(shù)集中到棧段。這樣, 就可以只給棧段分配安全iRAM空間,其他數(shù)據(jù)段依然使用安全DRAM, 從而減少iRAM消耗。

4.3 分離棧段非敏感數(shù)據(jù)到安全DRAM

敏感數(shù)據(jù)和非敏感數(shù)據(jù)處理都需要用到棧段,因此, 除敏感數(shù)據(jù)外, 棧段中還存在大量的非敏感數(shù)據(jù)。本文方案通過分離棧中的非敏感數(shù)據(jù), 進一步減少安全iRAM的使用量, 具體包括以下兩項內(nèi)容。

4.3.1 變量分離

密碼算法中的非敏感數(shù)據(jù)可分為如下 3 類: 1)取值固定且公開的系統(tǒng)參數(shù), 如 SM2算法中的橢圓曲線參數(shù)和 AES 算法中的 S 盒等; 2) 非敏感輸入/輸出參數(shù), 包括簽名算法中的待簽名消息、簽名值、公鑰以及其他公開信息(比如 SM2 數(shù)字簽名算法中的用戶可辨別標識), 密碼雜湊算法中的雜湊值以及非敏感的輸入, 加密算法中的密文等; 3) 密碼算法的實現(xiàn)中, 存在一些與敏感數(shù)據(jù)無關(guān)的臨時變量,這些變量無法用于恢復敏感數(shù)據(jù)或增加恢復的可能性, 將這類臨時變量中的數(shù)據(jù)也視為非敏感數(shù)據(jù)。

如圖2 所示, 我們將第 1 類非敏感數(shù)據(jù)存儲在全局變量和局部靜態(tài)變量(位于可信應用 ELF 文件中的.bss段或.data段)中, 將第2類非敏感數(shù)據(jù)存儲在客戶端應用傳遞過來的共享內(nèi)存緩沖區(qū)(位于非安全DRAM), 將第3類非敏感數(shù)據(jù)存儲在堆中的臨時變量(位于.bss段)中。.data段和.bss段被分配的是安全DRAM空間。

4.3.2 運算步驟分離

密碼算法中可能存在一些全程沒有敏感數(shù)據(jù)參與的步驟, 比如數(shù)字簽名算法中計算待簽名消息的雜湊值過程、數(shù)字簽名驗證的全過程以及當輸入為非敏感數(shù)據(jù)時的密碼雜湊算法的全過程等。針對這些運算步驟中的非敏感數(shù)據(jù), 一種分離方法是按照上述變量分離的方法修改密碼算法的實現(xiàn)代碼。但是, 密碼運算過程中涉及很多臨時變量(比如 SM2算法中橢圓曲線上點的運算), 手動給這些變量分配/釋放堆空間對算法實現(xiàn)的改動很多, 工作量大且容易出錯。此外, 密碼算法實現(xiàn)中涉及一些生命周期很短、被頻繁定義的臨時變量(比如 SM3 算法中被頻繁調(diào)用的壓縮函數(shù)中定義的臨時變量), 由于堆空間的申請和釋放是程序內(nèi)的代碼通過系統(tǒng)調(diào)用來實現(xiàn), 所以頻繁的申請/釋放操作會引入過多的用戶模式–內(nèi)核模式切換, 導致性能開銷過大。因此,我們采用圖2 所示的計算分離方法: 在一個輔助可信應用中實現(xiàn)這些步驟, 通過 OP-TEE 提供的進程間通信(inter-process communi-cation, IPC)接口與可信應用進行通信, 該輔助可信應用的所有數(shù)據(jù)都存儲在安全DRAM。

考慮到很多密碼算法的實現(xiàn)都將第 1 類非敏感數(shù)據(jù)存儲在全局變量中, 而這部分數(shù)據(jù)也占用一定的空間, 第 2 類非敏感數(shù)據(jù)的分離也符合可信應用的編程習慣, 為兼顧方案的實用性和通用性, 本文方案中對存放第 1 類和第 2 類非敏感數(shù)據(jù)的變量分離是必選項; 對存放第3類非敏感數(shù)據(jù)的變量分離以及部分運算步驟的分離這兩部分內(nèi)容, 對原始密碼算法實現(xiàn)有較明顯的改動, 將其作為可選項。

5 方案實現(xiàn)

我們基于 FreeScale i.MX6Quad SABRE 開發(fā)板實現(xiàn)方案原型系統(tǒng)。安全世界和普通世界中的操作系統(tǒng)分別為 OP-TEE 2.2.0 和 Android 6.0.1, Android系統(tǒng)基于Linux 4.1.15內(nèi)核。由于方案僅涉及對可信應用加載過程以及對密碼算法實現(xiàn)方式的修改,與操作系統(tǒng)的版本無關(guān), 因此具有很好的系統(tǒng)兼容性。雖然選擇在 i.MX6Quad 開發(fā)板實現(xiàn)原型系統(tǒng),但所依賴的 TrustZone 機制和 iRAM 都是在終端平臺較為普遍部署的硬件, 因此可以方便地移植到其他ARM硬件平臺。

5.1 構(gòu)建iRAM 輔助的可信應用執(zhí)行環(huán)境

為可信應用的棧段分配安全 iRAM 空間。OPTEE OS 加載可信應用時, 在其上下文結(jié)構(gòu)體中記錄了4塊物理內(nèi)存空間的信息(分別存儲可信應用的棧段、.ta_head/.text 段、.rodata/.got/...段以及.data/.bss 段中的數(shù)據(jù)), 包括物理地址、虛擬地址、段大小和段標識等。OP-TEE OS 首先分配 4 塊物理內(nèi)存空間并填充結(jié)構(gòu)體中的信息, 然后依次建立地址映射關(guān)系, 填寫虛擬地址。對于實現(xiàn)密碼算法的可信應用, 我們修改分配物理內(nèi)存空間的過程, 從安全iRAM 給棧段分配物理內(nèi)存空間, 從安全 DRAM 給其他段分配物理內(nèi)存空間。

管理安全 iRAM: 我們通過維護一個鏈表來管理固定范圍的安全 iRAM。鏈表中的結(jié)點代表已經(jīng)給某個可信應用分配的安全iRAM空間; 在鏈表中插入/刪除結(jié)點的操作對應分配/釋放安全 iRAM 空間; 在分配時, 使用首次適應算法搜索空閑的安全iRAM 空間。我們在安全世界操作系統(tǒng)中存儲一個實現(xiàn)密碼算法的可信應用列表, 內(nèi)容是所有可信應用的通用唯一識別碼(universally unique identifier,UUID)。以此為過濾條件, 僅給列表中的可信應用分配安全 iRAM 空間, 方案中的輔助可信應用以及系統(tǒng)中的其他可信應用仍使用安全DRAM。

5.2 密碼算法實現(xiàn)

我們實現(xiàn)了符合國家/國際標準的具有代表性的幾種密碼算法, 包括 SM2 數(shù)字簽名算法[30]、SM2公鑰加密算法[31]、SM3 密碼雜湊算法[32]、SM4 分組密碼算法[33]、RSASSA-PSS 數(shù)字簽名算法[34]、RSAES-OAEP 公鑰加密算法[35]、SHA3-256算法[36]和 AES-128算法[37]。 其中SM4算法及AES算法的工作模式為ECB模式。

集中敏感數(shù)據(jù)到棧段: 按照 4.2 節(jié)提出的方案,實現(xiàn)密碼算法時, 僅使用棧中的臨時變量存放敏感數(shù)據(jù)。

分離棧段非敏感數(shù)據(jù)到安全 DRAM: 這部分實現(xiàn)包括必選的變量分離以及可選的變量分離與運算步驟分離。

變量分離(必選項): 按照 4.3 節(jié)所述, 對存放第I 類非敏感數(shù)據(jù)(代碼中的全局變量)和第 II 類非敏感數(shù)據(jù)(非敏感的輸入/輸出參數(shù))的變量進行分離。我們實現(xiàn)的密碼算法中全局變量信息見表1。已初始化及未初始化的全局變量分別位于可信應用 ELF文件的.data 段和.bss 段, 被加載到安全 DRAM 中,不占用安全iRAM的空間。對于非敏感的輸入/輸出參數(shù), 在客戶端應用調(diào)用可信應用之前, 我們在客戶端應用中申請共享內(nèi)存緩沖區(qū), 寫入輸入?yún)?shù)并傳遞給可信應用??尚艖脠?zhí)行密碼運算后, 將輸出參數(shù)寫入緩沖區(qū), 返回給客戶端應用。由于共享內(nèi)存位于非安全 DRAM 中, 所以此類數(shù)據(jù)也不會使用安全iRAM空間。

表1 密碼算法實現(xiàn)中的全局變量Table 1 Global variables in the implementation of cryptographic algorithms

變量分離與運算步驟分離(可選項): 對于與敏感數(shù)據(jù)無關(guān)的臨時變量的分離以及沒有敏感數(shù)據(jù)參與的運算步驟的分離是可選項。對于 SM3, SM4,AES和SHA3-256算法, 其實現(xiàn)非常簡潔, 與敏感數(shù)據(jù)無關(guān)的臨時變量很少(比如 SM4/AES 算法中只有一個用于循環(huán)計數(shù)的int類型變量符合條件), 且全部步驟都有敏感數(shù)據(jù)參與。所以, 沒有對這些算法做可選分離。對于SM2算法和RSA算法, 進行如下的可選分離: 對 SM2 公鑰加密算法和 RSAESOAEP公鑰加密算法的實現(xiàn)進行變量分離; 對SM2數(shù)字簽名算法和 RSASSA-PSS 數(shù)字簽名算法的實現(xiàn)進行變量分離及運算步驟分離。

具體來說, 變量分離指算法實現(xiàn)中, 一些變量存儲了 4.3 節(jié)中第 3 類非敏感數(shù)據(jù)(表2)。我們將這些變量存儲到堆中, 由于 OP-TEE OS 從.bss段中給可信應用劃分堆空間,.bss 段被加載到安全 DRAM中, 所以這些變量不占用安全 iRAM 的空間。

表2 密碼算法實現(xiàn)中存放第3類非敏感數(shù)據(jù)的變量Table 2 Variables that store Type 3 non-sensitive data in the implementation of cryptographic algorithms

運算步驟分離是指, 將 SM2 數(shù)字簽名算法以及RSASSA-PSS 數(shù)字簽名算法的部分步驟放在輔助可信應用中實現(xiàn), 該可信應用僅使用安全DRAM而不使用安全 iRAM。圖3 和 4 分別展示實現(xiàn) SM2 數(shù)字簽名算法以及RSASSA-PSS 數(shù)字簽名算法的客戶端 應用、可信應用及其輔助可信應用的調(diào)用關(guān)系。在SM2 數(shù)字簽名生成算法中, 客戶端應用首先調(diào)用可 信應用來產(chǎn)生簽名, 并將待簽名的消息(Msg)傳遞 給可信應用; 可信應用調(diào)用輔助可信應用, 參數(shù)包 括 Msg、簽名者的公鑰(PbKey)及用戶可辨別標識 符(UserName); 輔助可信應用執(zhí)行算法的步驟①~③并返回結(jié)果; 可信應用執(zhí)行步驟④~⑧, 產(chǎn)生數(shù) 字簽名(Signature), 最終將簽名返回給客戶端應用。在 SM2 數(shù)字簽名驗證算法中, 普通世界的客戶端應用直接調(diào)用輔助可信應用進行簽名驗證; 輔助可信應用進行驗證后返回驗證結(jié)果。

圖3 實現(xiàn)SM2數(shù)字簽名算法的客戶端應用、可信應用及其輔助可信應用之間的調(diào)用關(guān)系Fig.3 Invocation between CA,TA and assisted TA which implement SM2 digital signature algorithm

圖4 實現(xiàn)RSASSA-PSS數(shù)字簽名算法的客戶端應用、可信應用及其輔助可信應用之間的調(diào)用關(guān)系Fig.4 Invocation between CA,TA and assisted TA which implement RSASSA-PSS digital signature algorithm

RSASSA-PSS 數(shù)字簽名生成算法包括以下 3 步:1) 計算待簽名消息的雜湊值; 2) 對雜湊值進行填充; 3) 對填充結(jié)果進行簽名運算。我們沒有使用輔助可信應用執(zhí)行步驟 1 和 2, 主要出于兩個原因: 一方面, 步驟 2 中填充數(shù)據(jù)的泄露會導致 RSA 算法的安全性降低[38], 所以步驟2涉及敏感數(shù)據(jù), 不能在輔助可信應用中執(zhí)行; 另一方面, 步驟 2 的填充過程同樣包括雜湊計算, 所以僅將步驟 1 放在輔助可信應用中不會明顯減少安全 iRAM 的使用量, 故未將步驟1放在輔助可信應用中。在 RSASSA-PSS數(shù)字簽名算法中, 普通世界的客戶端應用調(diào)用可信應用進行簽名, 調(diào)用輔助可信應用進行簽名驗證, 兩個可信應用執(zhí)行密碼運算后返回結(jié)果。

我們將多個密碼算法實現(xiàn)為安全世界的不同可信應用, 對應普通世界中的多個客戶端應用。由于普通世界和安全世界的操作系統(tǒng) Android (Linux 內(nèi)核)和 OP-TEE OS 都支持多線程調(diào)度, 且方案對操作系統(tǒng)的調(diào)度功能是透明的, 所以在多個客戶端應用同時發(fā)起密碼運算請求時, 多個可信應用(即多個密碼算法)可以自動實現(xiàn)并發(fā)執(zhí)行。

6 驗證評估

從 iRAM 使用量及性能兩個方面評估本文提出的方案。實驗平臺為 FreeScale 的 i.MX6Quad 開發(fā)板, 該開發(fā)板配備主頻 1.2 GHz 的四核 Cortex-A9 處理器, 系統(tǒng) DRAM 容量為 1 GB, iRAM 容量為 256 KB, 其中空閑的 iRAM 容量為 32 KB (扣除普通世界操作系統(tǒng)占用的iRAM空間)。

6.1 iRAM使用量評估

對于每個可信應用, 分別測試其棧段、堆段、.data段和.bss段(除堆以外的部分)的大小。經(jīng)過測試, 當輸入為 4, 64 和 256 KB 時, 各算法對 iRAM 的使用量相同。SM2 算法中用到的用戶可辨別標識為默認值“1234567812345678”; RSAES-OAEP算法中的標簽(Label)為空字符串。測量可信應用中各段實際大小的方法如下。

棧: 在可信應用中將棧的大小統(tǒng)一設置為 5 KB。通過在加載可信應用的過程中添加打印語句,了解到 OP-TEE OS 實際為可信應用分配了 8 KB 的??臻g。為測試可信應用實際使用的棧大小, 在可信應用調(diào)用密碼算法的功能前, 在全部棧空間中寫入特定的值(0x12345678); 在可信應用結(jié)束調(diào)用,關(guān)閉會話前, 找到??臻g中值不等于 0x12345678的最低地址, 進而計算出實際使用的棧大小。

.data/.bss 段: 可信應用在編譯后會生成后綴名為 map 的文件, 記錄 ELF 文件中各段的內(nèi)容、大小及偏移, 從該文件中獲取.data段和.bss段的大小。

堆: 在可信應用中, 將堆的大小統(tǒng)一設置為20 KB。在 map 文件中, 可以獲取堆的起始地址在.data/.bss 段中的偏移; 加載可信應用時, 可以從OP-TEE OS 中獲取.data/.bss 段的起始地址。使用與棧段相同的方法, 提前寫入特定值, 在可信應用結(jié)束運行后, 計算實際使用的堆大小。

我們分別對 SM2 數(shù)字簽名算法(SM2_SIG)、SM2公鑰加密算法(SM2_ENC)、SM3密碼雜湊算法(SM3)、SM4 分組密碼算法(SM4)、AES 算法(AES-128)、RSA 數(shù)字簽名算法(RSA_SIG)、RSA公鑰加密算法(RSA_ENC)和SHA3算法(SHA3-256)進行測試, 結(jié)果如表3 所示(其中 SM2 算法和 RSA算法未實現(xiàn)可選的非敏感數(shù)據(jù)分離)。Oath 方案[19]將可信應用的棧段和.data/.bss段存儲在安全iRAM中, 所以對iRAM 的使用量為所有可加載段的內(nèi)存使用量的和; 本方案對iRAM的使用量為棧的大小。表3最后一行數(shù)據(jù)展示本方案比Oath對iRAM使用量的減少率, 最大值為 SM2 公鑰加密算法的87.75%。

表3 密碼算法實現(xiàn)的內(nèi)存使用量(B)Table 3 Memory usage of the implementation of cryptographic algorithms (B)

我們還測試了實現(xiàn)可選的變量分離與運算步驟分離過后, SM2 算法和 RSA 算法對 iRAM 的使用量,結(jié)果如表4 所示。由于 SM2 和 RSA 的數(shù)字簽名驗證算法在輔助可信應用中實現(xiàn), 所以 iRAM 的使用量都為 0。可以看到, 可選的變量分離與運算步驟分離對減小 iRAM 的使用量有一定的作用。

表4 非敏感數(shù)據(jù)的可選分離前后SM2算法和RSA算法的iRAM使用量對比(B)Table 4 Comparison of iRAM usage of SM2 and RSA algorithm before and after the optional separation of non-sensitive data (B)

6.2 性能評估

本文方案對性能的影響包括兩方面: 第一是可信應用的加載時間, 這是由于本文方案修改了可信應用的加載方式; 第二是算法本身的性能。我們使用Cortex-A9 處理器中的性能監(jiān)控單元(performance monitoring unit, PMU)對這兩部分影響進行評估,對于每項測試重復運行 500 次并取平均值。

1) 可信應用加載時間評估。可信應用的加載時間指普通世界首次調(diào)用可信應用時, 將可信應用的 ELF 文件從文件系統(tǒng)加載到內(nèi)存所用的時間。經(jīng)過測試, 當可信應用的全部數(shù)據(jù)存儲在安全DRAM 中時, 平均加載時間為 82.22 ms, 基于本文方案實現(xiàn)的可信應用平均加載時間為85.23 ms, 增加3.66%。作為對比, Oath 方案[19]對10個不同種類的可信應用的加載時間增量為1.37%。

2) 密碼算法性能評估。我們分別評估原始的密碼算法實現(xiàn)(基于安全DRAM, 未經(jīng)本文方案的敏感數(shù)據(jù)集中非敏感數(shù)據(jù)及運算步驟分離)、基于Oath 及本文方案保護的密碼算法實現(xiàn)性能。對于 SM2 算法及 RSA 算法, 還評估包含可選分離時的性能。以原始的密碼算法實現(xiàn)性能為基準, 統(tǒng)計后 3種情況下各算法性能的相對值, 每個統(tǒng)計結(jié)果為不同大小輸入(16 B~1 MB)條件下相對值的平均數(shù)。統(tǒng)計結(jié)果如表5 所示。

由表5 的性能評估數(shù)據(jù)可以得出如下結(jié)論。

表5 不同保護方案下各密碼算法的性能與無保護時性能的比值(%)Table 5 Ratios of the cryptographic algorithms’ performance with different protection schemes to which without protection (%)

1) 與原始基于安全 DRAM 的密碼算法實現(xiàn)相比, 本文方案在不實現(xiàn)可選數(shù)據(jù)分離時引入的性能開銷很小, 各算法的平均性能開銷在-0.19%~2.25%之間(平均最小值和最大值分別為 RSA 簽名算法和SM3 算法)。在很多情況下, 本文方案的性能比原始情況更好, 主要是由于 iRAM 的讀寫速度大于DRAM。

2) 本文方案在不實現(xiàn)可選數(shù)據(jù)分離時, 相比Oath 在性能方面的差異幾乎可以忽略不計。

3) 可選數(shù)據(jù)分離對密碼算法的性能影響是可以接受的。對于 SM2 公鑰加密算法, 加密算法的平均性能開銷為 1.37%, 解密算法為 1.11%, 最大性能開銷為 2.75%, 出現(xiàn)在解密 900 KB 的消息時。對于SM2 數(shù)字簽名算法, 簽名算法的平均性能開銷為2.51%, 驗簽算法為 1.08%, 在對 4 KB 的消息進行簽名時產(chǎn)生最大開銷, 為4.29%; 對于不同大小的輸入, RSA 算法的性能開銷均未超過 1.2%。

7 結(jié)論

本文提出一種基于 iRAM 的 ARM 平臺密碼算法實現(xiàn)方案, 利用 iRAM 的物理特性實現(xiàn)密碼算法的抗物理內(nèi)存泄漏攻擊特性, 同時利用ARM Trust Zone 技術(shù)實現(xiàn)抗軟件攻擊特性。特別地, 本文通過對密碼運算過程中敏感數(shù)據(jù)細粒度的準確劃分以及執(zhí)行密碼運算可信應用數(shù)據(jù)段的控制調(diào)度, 降低了 iRAM 的消耗, 使得在 iRAM 的消耗降低 78%以上的情況下, 仍能達到與未修改的實現(xiàn)相近的性能。iRAM資源消耗的降低使得該方案能夠在不影響系統(tǒng)正常功能的條件下, 在當前主流 ARM 平臺部署。

猜你喜歡
敏感數(shù)據(jù)數(shù)字簽名內(nèi)存
干擾條件下可檢索數(shù)字版權(quán)管理環(huán)境敏感數(shù)據(jù)的加密方法
基于正交拉丁方理論的數(shù)字簽名分組批量驗證
基于大數(shù)據(jù)的智能數(shù)據(jù)脫敏系統(tǒng)
淺析計算機安全防護中數(shù)字簽名技術(shù)的應用
實現(xiàn)虛擬機敏感數(shù)據(jù)識別
基于透明加密的水下通信網(wǎng)絡敏感數(shù)據(jù)防泄露方法
筆記本內(nèi)存已經(jīng)在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內(nèi)存
基于數(shù)字簽名的QR碼水印認證系統(tǒng)
內(nèi)存搭配DDR4、DDR3L還是DDR3?