最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

TEEOS基礎(chǔ)特性安全存儲(chǔ)技術(shù)簡介

2022-12-20 18:27 作者:內(nèi)核工匠  | 我要投稿

1、安全存儲(chǔ)簡介


安全存儲(chǔ)是TEEOS重要特性之一,安全存儲(chǔ)主要用來為用戶保存敏感數(shù)據(jù)如密鑰等信息。用戶在使用安全存儲(chǔ)功能保存數(shù)據(jù)時(shí)會(huì)在TEE內(nèi)對(duì)數(shù)據(jù)進(jìn)行加密,然后保存到REE側(cè)的相關(guān)存儲(chǔ)區(qū)域中。根據(jù)對(duì)數(shù)據(jù)存儲(chǔ)的安全性要求和使用場景TEE常見的安全存儲(chǔ)一般分為RPMB安全存儲(chǔ)、SFS安全存儲(chǔ)。RPMB安全存儲(chǔ)是eMMC中的一個(gè)具有安全特性的分區(qū),其特點(diǎn)是非安全世界不可見,可以防止重放和回滾攻擊,但是其容量較小所以一般對(duì)于安全性要求高的數(shù)據(jù)會(huì)使用RPMB存儲(chǔ)。SFS安全存儲(chǔ)是利用了REE側(cè)文件系統(tǒng)進(jìn)行存儲(chǔ)服務(wù),TEE加密后的數(shù)據(jù)會(huì)利用非安全側(cè)的文件系統(tǒng)存放到REE側(cè)的存儲(chǔ)介質(zhì)中,因此其容量很大可以存放較多的文件,但是由于其利用了非安全側(cè)的文件系統(tǒng),因此存放的文件是REE側(cè)可見的,安全性相比RPMB較低。


本文將對(duì)OPTEE3.18版本中的SFS安全存儲(chǔ)基本實(shí)現(xiàn)來進(jìn)行分析,后文中的安全存儲(chǔ)均指SFS安全存儲(chǔ),安全存儲(chǔ)的整體框架如圖1.1所示:


圖片

圖1.1 安全存儲(chǔ)框架


OPTEE在用戶態(tài)提供了GP安全存儲(chǔ)API,TA調(diào)用GP API來對(duì)需要保存的數(shù)據(jù)進(jìn)行操作,具體的功能實(shí)現(xiàn)在OPTEE內(nèi)核態(tài)的File system模塊中實(shí)現(xiàn),內(nèi)核態(tài)的File system模塊主要實(shí)現(xiàn)了數(shù)據(jù)加解密相關(guān)功能以及對(duì)應(yīng)密文數(shù)據(jù)RPC消息發(fā)送功能。REE側(cè)的守護(hù)進(jìn)程tee_supplicant主要完成的是RPC消息接收以及安全存儲(chǔ)文件在REE側(cè)的操作功能。


OPTEE 安全存儲(chǔ)所涉及到的主要文件如圖1.2所示:

圖片

圖1.2安全存儲(chǔ)文件目錄


2、安全存儲(chǔ)文件操作


圖2.1列出了安全存儲(chǔ)文件操作的GP接口及相關(guān)系統(tǒng)調(diào)用關(guān)系圖,syscall開頭的函數(shù)是安全存儲(chǔ)GP API功能在OPTEE內(nèi)核中的具體實(shí)現(xiàn)。接下來我們對(duì)安全存儲(chǔ)中的文件格式、基本數(shù)據(jù)結(jié)構(gòu)以及文件的創(chuàng)建過程進(jìn)行分析。

圖片

圖2.1 安全存儲(chǔ)api


2.1 安全存儲(chǔ)文件格式及主要數(shù)據(jù)結(jié)構(gòu)


安全存儲(chǔ)的文件格式如圖2.2所示,主要分為三個(gè)部分,分別是文件頭信息,文件節(jié)點(diǎn)描述信息,以及數(shù)據(jù)體信息,其中數(shù)據(jù)體data block是以4K大小粒度存儲(chǔ)的。OPTEE使用哈希二叉樹方式管理安全存儲(chǔ)的文件數(shù)據(jù),樹中的每個(gè)節(jié)點(diǎn)tee_fs_htree_node_image保護(hù)其兩個(gè)子節(jié)點(diǎn)和一個(gè)數(shù)據(jù)塊。元數(shù)據(jù)存儲(chǔ)在頭節(jié)點(diǎn)tee_fs_htree_image中,它也保護(hù)頂層節(jié)點(diǎn)。安全存儲(chǔ)的文件格式所有字段都使用兩個(gè)版本ver0 ver1進(jìn)行復(fù)制管理從而確保了原子更新。


圖片

圖2.2 文件格式


頭節(jié)點(diǎn)tee_fs_htree_ image結(jié)構(gòu)體具體定義如下,其中iv是加密head時(shí)使用的,tag是加密head后生成的,enc_fek是加密數(shù)據(jù)文件的密鑰fek的密文數(shù)據(jù),imeta是加密head后生成的,counter是ver信息,標(biāo)識(shí)存儲(chǔ)到ver0還是ver1中。


圖片

節(jié)點(diǎn)tee_fs_htree_node_image結(jié)構(gòu)體具體定義如下,hash是保存節(jié)點(diǎn)的hash值,該值主要作用是在文件操作時(shí)找到該文件head,iv是加密data bloc使用的,不同的data block對(duì)應(yīng)的iv值不同,tag是加密數(shù)據(jù)塊后生成的,flags標(biāo)識(shí)data block的版本號(hào)信息。

圖片

另一個(gè)主要的結(jié)構(gòu)體tee_fs_fd具體定義如下,主要存放對(duì)文件操作時(shí)使用的fd、dir、uuid等信息。

圖片


2.2 安全文件操作


本節(jié)主要對(duì)OPTEE安全存儲(chǔ)文件基本操作過程安全存儲(chǔ)文件的創(chuàng)建、打開、讀寫過程進(jìn)行分析。


(1)安全存儲(chǔ)文件創(chuàng)建:安全存儲(chǔ)文件創(chuàng)建流程是整個(gè)文件操作最復(fù)雜的流程,安全存儲(chǔ)文件創(chuàng)建流程如圖2.3所示。當(dāng)?shù)谝淮问褂冒踩鎯?chǔ)功能保存用戶文件時(shí),將會(huì)在/data/tee目錄中生成兩類文件分別是dirf.db文件和以數(shù)字命名的文件,數(shù)字命名的文件會(huì)根據(jù)創(chuàng)建的不同文件名稱進(jìn)行累加。dirf.db文件保存的是整個(gè)安全存儲(chǔ)功能管理的所有文件的目錄信息和節(jié)點(diǎn)信息,該文件只會(huì)被創(chuàng)建一次,后續(xù)對(duì)文件的操作將會(huì)更新dirf.db內(nèi)容,以數(shù)字命名的文件保存的是用戶文件信息。OPTEE對(duì)用戶文件進(jìn)行基本操作都需要通過對(duì)dirf.db文件進(jìn)行索引來找到所需要的具體用戶文件。syscall_storage_obj_create是安全存儲(chǔ)創(chuàng)建文件功能在內(nèi)核空間的主入口。下面對(duì)創(chuàng)建過程主要流程進(jìn)行分析。

  • 權(quán)限檢查:在創(chuàng)建安全文件之前會(huì)通過vm_check_access_rights函數(shù)對(duì)TA調(diào)用安全存儲(chǔ)操作的object權(quán)限進(jìn)行校驗(yàn),只有當(dāng)權(quán)限校驗(yàn)通過后才會(huì)執(zhí)行后續(xù)操作。


  • dirt.db文件創(chuàng)建:get_dirh是創(chuàng)建dirt.db主要實(shí)現(xiàn),tee_fs_rpc_create_dfh函數(shù)在首次創(chuàng)建dirt.db文件時(shí),通知ree側(cè)tee_supplicant創(chuàng)建該文件,tee_fs_htree_open建立文件節(jié)點(diǎn)信息。tee_fs_htree_sync_to_storage主要是將tee_fs_htree_node_image及tee_fs_htree_ image信息存放到dirt.db中。


  • 安全文件創(chuàng)建:安全文件創(chuàng)建通過ree_fs_open_primitive實(shí)現(xiàn)的,該流程會(huì)通知ree側(cè)tee_supplicant創(chuàng)建以數(shù)字命名的文件,此時(shí)該文件中還沒有寫入具體的數(shù)據(jù)信息。


  • 安全文件寫入:安全文件head及data block寫入通過ree_fs_write_primitive實(shí)現(xiàn)的,最終完成文件的創(chuàng)建過程,將初始化的數(shù)據(jù)寫入到ree側(cè)。


圖片


圖2.3安全文件創(chuàng)建流程


(2)安全存儲(chǔ)文件打開:當(dāng)需要打開某個(gè)安全存儲(chǔ)文件時(shí),需要先從全局目錄文件dirt.db中找到對(duì)應(yīng)的以數(shù)字命名的文件編號(hào),打開dirf.db是通過調(diào)用get_dirt函數(shù)實(shí)現(xiàn)的,最終調(diào)用到REE側(cè)的tee_supplicant打開/data/tee/dirf.db文件并返回該文件的fd值,讀取dirt.db中最新的文件頭部數(shù)據(jù),解密獲取文件加解密使用的FEK,并建立文件節(jié)點(diǎn)樹,打開dirf.db文件并建立了文件節(jié)點(diǎn)樹后,通過讀取dirf.db文件的數(shù)據(jù)區(qū)域中安全文件對(duì)應(yīng)的dirf_entry來找到該安全文件的存儲(chǔ)編號(hào)。在獲取安全存儲(chǔ)文件編號(hào)前需要進(jìn)行一系列校驗(yàn)檢查,檢查通過后則為正確的文件編號(hào)。得到安全文件編號(hào)后就可打開該文件,讀取該安全文件的頭部分,獲取根節(jié)點(diǎn)信息,并建立該安全文件的節(jié)點(diǎn)樹,然后就可開始對(duì)該安全文件進(jìn)行讀寫操作。


(3)安全存儲(chǔ)文件讀寫操作:安全存儲(chǔ)讀寫操作依賴打開操作,只有在執(zhí)行完打開操作之后才能進(jìn)行。安全文件讀操作首先會(huì)獲取TA的會(huì)話ID和運(yùn)行上下文并檢查權(quán)限。然后調(diào)用ree_fs_read函數(shù)來實(shí)現(xiàn)讀取數(shù)據(jù)的操作,調(diào)用ree_fs_write函數(shù)來實(shí)現(xiàn)寫入數(shù)據(jù)操作。



3、安全存儲(chǔ)文件加密流程


3.1安全存儲(chǔ)中的密鑰


在OPTEE的安全存儲(chǔ)中主要涉及三種類型密鑰分別是SSK安全存儲(chǔ)密鑰、TSK TA的存儲(chǔ)密鑰、FEK文件加密密鑰三者關(guān)系如圖3.1所示。其中huk是芯片唯一密鑰,其通過chipid及其他相關(guān)參數(shù)派生出安全存儲(chǔ)的基礎(chǔ)密鑰SSK。針對(duì)不同的TA,根據(jù)uuid值及SSK派生出每個(gè)TA自己的存儲(chǔ)密鑰TSK。這樣能夠保證不同的TA加密存儲(chǔ)的文件不能被其他文件解密,在一定程度上保證了安全性。TSK并不是最終對(duì)文件加密的密鑰,而是對(duì)隨機(jī)派生出的文件加密密鑰FEK進(jìn)行加解密的key。三種類型密鑰中SSK TSK無論明文密文都不出TEE,F(xiàn)EK密文與數(shù)據(jù)密文封裝到一起存儲(chǔ)到REE側(cè)文件系統(tǒng)中。


圖片


圖3.1密鑰關(guān)系圖


3.2 安全存儲(chǔ)文件加密流程


安全存儲(chǔ)中的核心操作是對(duì)安全文件進(jìn)行加解密操作,需要加密操作的數(shù)據(jù)分別為元數(shù)據(jù)加密,以及具體的數(shù)據(jù)區(qū)塊進(jìn)行加密。元數(shù)據(jù)及區(qū)塊數(shù)據(jù)加密流程如圖3.2所示,元數(shù)據(jù)是tee_fs_hreee_node_image中的數(shù)據(jù),加密過程中會(huì)首先生成隨機(jī)的AES密鑰FEK,該值一般以enc_fek的形式保存,在使用時(shí)通過TSK解密后使用。數(shù)據(jù)塊區(qū)域是具體需要保存的用戶數(shù)據(jù)信息和tee_fs_htree_node_image中的數(shù)據(jù)。元數(shù)據(jù)和區(qū)塊數(shù)據(jù)的加密算法在OPTEE中都采用AES GCM算法,采用的KEY都是FEK,不同的是在加密過程中有各自不同的IV值。


圖片

圖3.2 元數(shù)據(jù) 區(qū)塊數(shù)據(jù)加密流程


4、總結(jié)


安全存儲(chǔ)功能是TEEOS中的重要功能,不同TEE產(chǎn)品有不同實(shí)現(xiàn)。本文對(duì)OPTEE安全存儲(chǔ)SFS部分進(jìn)行了簡單的分析,我們發(fā)現(xiàn)安全存儲(chǔ)操作涉及到的流程是比較復(fù)雜的,其中涉及到了加解密密鑰派生方式,數(shù)據(jù)加解密算法的選擇,數(shù)據(jù)文件管理的方式,TEE主動(dòng)與REE交互方式等功能。這些部分均影響著安全存儲(chǔ)的安全性穩(wěn)定性和性能。OPTEE安全存儲(chǔ)雖然對(duì)各個(gè)數(shù)據(jù)文件是分開存儲(chǔ)的,但是對(duì)文件操作的索引信息又是集中存儲(chǔ)到了dirt.db中,因此當(dāng)dirt.db文件損壞時(shí)將會(huì)導(dǎo)致所有的文件無法讀取的風(fēng)險(xiǎn)。因此在實(shí)際使用OPTEE時(shí)可以考慮定制化修改,對(duì)該文件在REE側(cè)不同分區(qū)進(jìn)行備份操作。


5、參考資料


1.《手機(jī)安全和可信應(yīng)用開發(fā)指南》

2.https://optee.readthedocs.io/en/latest/architecture/secure_storage.html

3.https://blog.csdn.net/xcxhzjl/article/details/127257463

4. https://github.com/OP-TEE/optee_os

5. https://schspa.tk/2020/01/10/persistent-object.html

6.https://blog.csdn.net/xy010902100449/article/details/124551205


TEEOS基礎(chǔ)特性安全存儲(chǔ)技術(shù)簡介的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
辰溪县| 泗水县| 木里| 三明市| 新邵县| 宜阳县| 江口县| 江西省| 濉溪县| 高州市| 承德市| 昭通市| 泗洪县| 河池市| 瑞丽市| 达州市| 东港市| 永兴县| 兰溪市| 化州市| 松溪县| 开封市| 鲁甸县| 方城县| 琼海市| 枣庄市| 汶川县| 深圳市| 揭东县| 衡阳县| 分宜县| 淳安县| 额尔古纳市| 平安县| 涿州市| 清徐县| 武胜县| 龙川县| 丰都县| 嵩明县| 宣恩县|