【OP-TEE】安全存储
背景
OP-TEE中的安全存儲是根據(jù) GlobalPlatform 的 TEE 內(nèi)部核心 API(這里稱為可信存儲)中定義的內(nèi)容來實現(xiàn)的。本規(guī)范規(guī)定,應(yīng)該可以存儲通用數(shù)據(jù)和關(guān)鍵材料,以保證所存儲數(shù)據(jù)的機密性和完整性以及修改存儲的操作的原子性(這里的原子性意味著整個操作要么成功完成,要么不寫)。
目前,OP-TEE中有兩種安全存儲實現(xiàn):
- 第一個依賴于普通世界(REE)文件系統(tǒng),默認(rèn)實現(xiàn)。它在編譯時通過 CFG_REE_FS=y 啟用。
- 第二種方法利用eMMC設(shè)備的重放保護內(nèi)存塊(RPMB)分區(qū),通過設(shè)置 CFG_RPMB_FS=y 來啟用。
REE 文件系統(tǒng)安全存儲
?
OP-TEE 系統(tǒng)安全文件
| Source file | Purpose |
|---|---|
| core/tee/tee_svc_storage.c | TEE trusted storage service calls |
| core/tee/tee_ree_fs.c | TEE file system & REE file operation interface |
| core/tee/fs_htree.c | Hash tree |
| core/tee/tee_fs_key_manager.c | Key manager |
| lib/libutee/ | GlobalPlatform Internal API library |
GlobalPlatform 安全存儲要求
以下是規(guī)范摘錄,列出了最重要的要求:
1. 只要應(yīng)用了適當(dāng)?shù)募用鼙Wo,可信存儲就可以由非安全資源支持,而加密保護必須與保護TEE代碼和數(shù)據(jù)本身的方法一樣強大。2. 可信存儲必須綁定到特定設(shè)備,這意味著數(shù)據(jù)被創(chuàng)建時只有在同一TEE和同一設(shè)備上運行的授權(quán)ta才能訪問或修改它3. TA本身能夠隱藏敏感關(guān)鍵數(shù)據(jù)4. 每個TA都可以訪問其自己的存儲空間,該存儲空間在該TA的所有實例之間共享,但與其他TA分離。5. 受信任存儲必須提供最低級別的保護,以防回滾攻擊。可以接受的是,實際的物理存儲可能位于不安全的區(qū)域,因此容易受到來自TEE外部的操作的影響。通常,一個實現(xiàn)可以依賴于REE來達到這個目的(保護級別100),或者依賴于TEE控制的硬件資產(chǎn)(保護級別1000)。(see GP TEE Internal Core API section 2.5 and 5.2)
如果配置CFG_RPMB_FS=y,則回滾保護由TEE控制,并設(shè)置為1000。如果CFG_RPMB_FS=n,則沒有針對回滾的保護,并且保護級別設(shè)置為0。
Linux 文件系統(tǒng)中的 TEE 文件結(jié)構(gòu)
默認(rèn)情況下,OP-TEE 使用 /data/tee/ 作為 Linux 文件系統(tǒng)中的安全存儲空間。每個持久化對象都分配了一個內(nèi)部標(biāo)識符。它是一個整數(shù),在 Linux 文件系統(tǒng)中顯示為 /data/tee/<file number> 。
目錄文件 /data/tee/dirf.db,列出安全存儲中的所有對象。所有正常世界的文件都是完整性保護和加密的,如下所述。
密鑰管理器
密鑰管理器是 TEE 文件系統(tǒng)中的一個組件,負(fù)責(zé)處理數(shù)據(jù)的加密和解密以及對敏感密鑰的管理。密鑰管理器使用三種類型的密鑰:安全存儲密鑰(Secure Storage Key, SSK)、TA存儲密鑰(Trusted Application?Storage Key, TSK)和文件加密密鑰(File Encryption Key, FEK)。
硬件唯一密鑰(Hardware Unique Key, HUK)
大多數(shù)設(shè)備都有某種硬件唯一密鑰(HUK),主要用于派生其他密鑰。例如,當(dāng)派生密鑰用于安全存儲等時,可以使用 HUK 派生。HUK 的重要之處在于它需要得到很好的保護,并且在最好的情況下,HUK 永遠不應(yīng)該直接從軟件讀取,甚至不應(yīng)該從安全方面讀取。有不同的解決方案,加密加速器可能支持它,或者,它可能涉及另一個安全的協(xié)處理器。
在 OP-TEE 中,HUK 只是一個存根,您將看到在 core/include/kernel/TEE_common_otp.h 中名為 TEE_otp_get_hw_unique_key(…)的函數(shù)中,在真正安全的產(chǎn)品中,必須用其他東西替換它。如果你的設(shè)備缺少對HUK的硬件支持,那么你至少必須將其更改為除零之外的其他內(nèi)容。但是,請記住,在軟件中存儲密鑰不是一個好的安全做法,尤其是不能將密鑰作為其他所有內(nèi)容的根,因此我們建議您不要這樣做。
安全存儲密鑰(Secure Storage Key, SSK)
SSK是每個設(shè)備的密鑰,在OP-TEE啟動時生成并存儲在安全內(nèi)存中。SSK用于派生TA存儲密鑰(TSK)。
SSK = HMACSHA256?(HUK, Chip ID || “static string”)
獲取硬件唯一密鑰(HUK)和芯片ID的功能取決于平臺實現(xiàn)。目前,OP-TEE 系統(tǒng)中每臺設(shè)備只有一把 SSK,用于安全存儲子系統(tǒng)。但是,為了將來,我們可能需要為每臺設(shè)備使用生成 SSK 的相同算法為不同的子系統(tǒng)創(chuàng)建不同的密鑰。為不同子系統(tǒng)生成不同的密鑰的簡單方法是使用不同的靜態(tài)生成密鑰的字符串。
TA存儲密鑰(Trusted Application?Storage Key, TSK)
TSK是每個受信任的應(yīng)用程序密鑰,由SSK和TA的標(biāo)識符(UUID)生成。它被用來保護FEK,換句話說,用來加密/解密FEK。
TSK = HMACSHA256 (SSK, TA_UUID)
文件加密密鑰(File Encryption Key, FEK)
當(dāng)一個新的TEE文件被創(chuàng)建時,密鑰管理器將通過 PRNG(pesudo隨機數(shù)生成器)為TEE文件生成一個新的 FEK,并將加密的 FEK 存儲在 meta 文件中。FEK 用于對存儲在 meta 文件中的TEE文件信息或塊文件中的數(shù)據(jù)進行加密/解密。
哈希樹
哈希樹負(fù)責(zé)處理安全存儲文件的數(shù)據(jù)加密和解密。哈希樹被實現(xiàn)為二叉樹,樹中的每個節(jié)點(struct tee_fs_htree_node_image)保護其兩個子節(jié)點和一個數(shù)據(jù)塊。元數(shù)據(jù)(meta data)存儲在一個頭(struct tee_fs_htree_image)中,它也保護頂層節(jié)點。
所有字段(頭、節(jié)點和塊)都使用0和1兩個版本進行復(fù)制,以確保原子更新。有關(guān)詳細(xì)信息,請參見core/tee/fs_htree.c。
元數(shù)據(jù)解密流程
當(dāng)需要更新元數(shù)據(jù)時,PRNG將生成一個新的 Meta IV。Meta IV 的大小在 core/include/tee/fs_htree.h 中定義,元數(shù)據(jù)和節(jié)點數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)在 fs_htree.h 中定義如下:
struct tee_fs_htree_node_image {uint8_t hash[TEE_FS_HTREE_HASH_SIZE];uint8_t iv[TEE_FS_HTREE_IV_SIZE];uint8_t tag[TEE_FS_HTREE_TAG_SIZE];uint16_t flags;
};struct tee_fs_htree_meta {uint64_t length;
};struct tee_fs_htree_imeta {struct tee_fs_htree_meta meta;uint32_t max_node_id;
};struct tee_fs_htree_image {uint8_t iv[TEE_FS_HTREE_IV_SIZE];uint8_t tag[TEE_FS_HTREE_TAG_SIZE];uint8_t enc_fek[TEE_FS_HTREE_FEK_SIZE];uint8_t imeta[sizeof(struct tee_fs_htree_imeta)];uint32_t counter;
};
塊數(shù)據(jù)(Block Data)解密流程
當(dāng)需要更新塊數(shù)據(jù)時,PRNG將生成新的 Block IV。Block IV 的大小在core/include/tee/fs_htree.h中定義。
原子操作
根據(jù)原子性的GlobalPlatform可信存儲要求,以下操作應(yīng)支持原子更新:
Write, Truncate, Rename, Create and Delete
?
總結(jié)
以上是生活随笔為你收集整理的【OP-TEE】安全存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你做Ghost系统盘--Windows
- 下一篇: vite+vue3+axios+ts入门