我們知道TEEOS最重要的功能莫過于安全存儲了,這是一切安全的前提,根據存儲安全性和使用場景GP TEE安全存儲分為RPMB安全存儲、SFS安全存儲和SQLFS安全存儲。如下圖所示,臨時對象、持久化對象、持久化枚舉、數據流,分別可以存儲在RPMB、SFS、SQLFS三種存儲媒介上。
RPMB(Replay Protected Memory Block),作用在于存放機密數據。由于訪問需要密鑰,所以可以防止未授權的訪問并且在每次的數據寫入時都需要驗證Write Counter寄存器值,這個寄存器值每寫入成功便會加1,如果是黑客截取寫入報文再進行重放攻擊,由于counter已經更新了寫入會無效。系統開機時在preloader階段寫入RPMB鑒權密鑰,為保證密鑰的安全性和保密密鑰的分散方法,密鑰一般由TEEOS提供庫接口獲取,在preloader跳入ATF執行時把密鑰以參數傳遞方式放入安全SRAM,在TEEOS啟動再將該密鑰拷貝到安全DRAM中用于后續的RPMB操作。RPMB特點是非安全世界不可見,使用場景是安全性要求高、容量小,可以有效防止回滾和重放攻擊。
一個SFS安全存儲對象在Linux/Android端會生成多個文件,數據塊文件和對應的meta文件,SFS特點是非安全世界可見,無法有效防止回滾,但可以同時在SFS和RPMB中寫入讀寫次數檢測回滾。使用場景是安全性要求略低、容量大。
SQLFS機制與SFS類似,由Android側提供SQLITE數據庫操作接口,一個安全存儲對象在Linux/Android下只會生成單個文件,文件會比SFS少,并且SQLITE本身會支持到數據庫的原子性操作和容錯機制。特點是非安全世界可見,使用場景是安全性要求略低、容量大。
GP TEE中可信存儲定義
每個TA可以訪問一組可信存儲空間,由32位存儲標識符標識。
目前GP版本的規范定義了一個信任存儲空間對于每個TA,是自己的私有存儲空間。這個存儲空間的對象只能是生成對象的TA所訪問,其他TA是不可見的。其他存儲標識符可以定義在規范的未來版本中,例如: 存儲空間共享于多個TA或用于啟動實體和運行時TA之間的通訊。
一個可信存儲空間包含持久化對象。這個持久化對象可以是加密密鑰對象或者是數據對象。每個持久對象由對象標識符識別,這是一個變長二進制緩沖區從0到64字節。對象標識符包含任意字節,包括對應于非輸出字符的字節。
每個持久化對象都有一個類型,它精確地定義了對象的內容。例如,有對象類型為AES鑰匙,RSA密鑰對,數據對象,等等。
所有持久化對象都有一個相關的數據流。數據對象只有一個數據流。加密對象(即密鑰或密鑰對)有一個數據流,對象屬性和元數據。
數據流是完全在TA內存空間管理。當打開一個持久化對象時它可以加載一個TA-allocated緩沖區或者當創建一個持久化對象時從TA-allocated緩沖區存儲數據。它也可以當做一個數據流來訪問,所以它可以用來存儲由小塊訪問方式的大量數據。
對象屬性用于少量的數據(通常幾十或幾百個字節)。他們可以存儲在一個內存池, 與TA實例和TA自身需要隱藏的一些屬性相隔離。屬性用于存儲結構化的方式的密鑰數據。比如,一個RSA密鑰對模數(N),公鑰(E),私鑰(D)等。當一個對象被創建,它的所有對象屬性已指定。
另外 ,API的實現可以允許儲存比可見屬性更多的信息在對象里。
與每個加密對象相關聯的元數據包括:密鑰長度。取決于算法的關鍵。例如,AES的密鑰可以有128位、192位或256位,RSA密鑰可以有1024位或2048位等
密鑰使用標識符,定義是否允許操作密鑰,或TA能否重新獲取這個密鑰敏感部分信息
TA同樣也可以申請臨時對象,與可持久化對象區別如下
臨時對象保持在內存里,當對象關閉或TA實例銷毀時這些內存自動清除和回收。臨時對象只包含有屬性而沒有數據流。
一個臨時對象可以是未被初始化,在這種情況下這個對象分配了一個特定對象類型和最大空間但沒有屬性,只有屬性被填充時對象才是初始化的??沙志没瘜ο蠖际莿摻〞r初始化的。這就意味著TA生成或獲取一個持久化的密鑰對象需要先申請一個臨時對象,再把屬性寫入臨時對象再放入到可持久化對象中。
臨時對象沒有標識符,只能通過對象句柄來操作。
一般情況下,臨時對象都是用于密鑰和密鑰對。
臨時對象和可持久化對象都是通過不透明的對象句柄來操作的。
一些函數接口接受兩種類型的對象句柄,比如填充對象的屬性只能用臨時對象,因為它需要一個未初始化的對象,持久對象總是完全初始化。
類似于文件操作的API函數訪問數據流只能用可持久化對象,因為臨時對象沒有數據流。
弄清楚了以上這些,你才更方便的操作TEE的接口函數!
關于防攻擊
防克隆
為防止對數據從一個設備克隆到另一個設備,需要硬件上支持一機一密和OTP方式的唯一TEE ID,在HUK上保證每個有設備的密鑰都是唯一的,在數據克隆到另一個設備上,由于HUK不一致,SSK也就不一樣,SSK生成的TSK也會不一致,這樣數據才可以防克隆。
防回滾
SFS和SQL FS在Android側是可見的,在root后可以對生成的文件進行拷貝和備份下來,當后續這些文件更新后,攻擊者可以把最新的這些文件用之前的備份文件替換掉,這樣文件就被回滾回去以達到攻擊者目的。這樣的回滾是無法被防止的,只能借助于RPMB分區的防回滾機制檢測到這樣的回滾攻擊,在SFS和SQL FS的文件與RPMB同步更新讀寫次數,不一致則表示被回滾了。
HUK (Hardware Unique Key) 硬件唯一密鑰
SSK (Secure Storage Key) 安全存儲密鑰
TSK(Trusted app Storage Key) 可信應用存儲密鑰
FEK (File Encryption Key) 文件加密密鑰
1024你懂的国产日韩欧美_亚洲欧美色一区二区三区_久久五月丁香合缴情网_99爱之精品网站
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。