可信應(yīng)用的存儲(chǔ)密鑰
可信應(yīng)用的存儲(chǔ)密鑰(Trusted Applicant Storage Key, TSK)是生成FEK時(shí)使用到的密鑰。
TSK是使用SSK作為密鑰對(duì)TA的UUID經(jīng)HMAC計(jì)算獲得,類似于HMAC(SSK, UUID)的方式生成TSK。
在調(diào)用tee_fs_fek_crypt函數(shù)時(shí)會(huì)計(jì)算TSK的值。TSK最終會(huì)被用來生成FEK, FEK會(huì)在使用安全存儲(chǔ)功能保存數(shù)據(jù)時(shí)被用來加密數(shù)據(jù)。
文件加密密鑰
文件加密密鑰(File Encryption Key, FEK)是安全存儲(chǔ)功能用于對(duì)數(shù)據(jù)進(jìn)行加密時(shí)使用的AES密鑰,該密鑰在生成文件時(shí)會(huì) 使用PRNG算法隨機(jī)產(chǎn)生 ,產(chǎn)生的 FEK會(huì)使用TSK進(jìn)行加密 ,然后保存到head.enc_fek變量中。
(PRNGPRNG(pseudorandom number generator)偽隨機(jī)數(shù)生成器是指通過特定算法生成一系列的數(shù)字,使得這一系列的數(shù)字看起來是隨機(jī)的,但是實(shí)際是確定的,所以叫偽隨機(jī)數(shù)。)
TA在每次使用 安全存儲(chǔ)功能創(chuàng)建一個(gè)安全文件時(shí)就會(huì)生成一個(gè)隨機(jī)數(shù)作為FEK ,即每個(gè)TA 中的每個(gè)安全文件都有一個(gè)FEK用于加密對(duì)應(yīng)文件中的數(shù)據(jù) 。(安全加倍啊)
關(guān)于FEK的產(chǎn)生可簡(jiǎn)單理解為如下公式,使用的初始化向量IV值為0:
AES_CBC(in_key, TSK)
OP-TEE通過調(diào)用tee_fs_fek_crypt函數(shù)來生成一個(gè)FEK,該函數(shù)代碼如下:
TEE_Result tee_fs_fek_crypt(const TEE_UUID *uuid, TEE_OperationMode mode,
const uint8_t *in_key, size_t size,
uint8_t *out_key)
{
TEE_Result res;
uint8_t *ctx = NULL;
size_t ctx_size;
uint8_t tsk[TEE_FS_KM_TSK_SIZE];
uint8_t dst_key[size];
/* 檢查輸入的用于生成FEK的隨機(jī)數(shù)in_key和用于存放生成的out_key地址是否合法 */
if (! in_key || ! out_key)
return TEE_ERROR_BAD_PARAMETERS;
/* 檢查in_key長(zhǎng)度 */
if (size ! = TEE_FS_KM_FEK_SIZE)
return TEE_ERROR_BAD_PARAMETERS;
/* 判定SSK是否已經(jīng)被初始化 */
if (tee_fs_ssk.is_init == 0)
return TEE_ERROR_GENERIC;
/* 如果調(diào)用時(shí)參數(shù)uuid不為0,則調(diào)用HMAC算法生成TSK。如果UUID的值為0,則默認(rèn)生成TSK
使用的原始數(shù)據(jù)為0 */
if (uuid) {
res = do_hmac(tsk, sizeof(tsk), tee_fs_ssk.key,
TEE_FS_KM_SSK_SIZE, uuid, sizeof(*uuid));
if (res ! = TEE_SUCCESS)
return res;
} else {
uint8_t dummy[1] = { 0 };
res = do_hmac(tsk, sizeof(tsk), tee_fs_ssk.key,
TEE_FS_KM_SSK_SIZE, dummy, sizeof(dummy));
if (res ! = TEE_SUCCESS)
return res;
}
/* 獲取調(diào)用AEC_CBC操作需要的context的大小 */
res = crypto_ops.cipher.get_ctx_size(TEE_FS_KM_ENC_FEK_ALG, &ctx_size);
if (res ! = TEE_SUCCESS)
return res;
/* 分配一份進(jìn)行AES_CBC操作時(shí)需要的context空間 */
ctx = malloc(ctx_size);
if (! ctx)
return TEE_ERROR_OUT_OF_MEMORY;
/* 使用TSK作為進(jìn)行AES_CBC計(jì)算使用的key,而IV值默認(rèn)為0 */
res = crypto_ops.cipher.init(ctx, TEE_FS_KM_ENC_FEK_ALG, mode, tsk,
sizeof(tsk), NULL, 0, NULL, 0);
if (res ! = TEE_SUCCESS)
goto exit;
/* 將輸入的in_key填充到context中,做完AES_CBC操作之后,輸出的數(shù)據(jù)將會(huì)被保存到dst_
key中 */
res = crypto_ops.cipher.update(ctx, TEE_FS_KM_ENC_FEK_ALG,
mode, true, in_key, size, dst_key);
if (res ! = TEE_SUCCESS)
goto exit;
/* 執(zhí)行AES_CBC的加密運(yùn)算,生成FEK */
crypto_ops.cipher.final(ctx, TEE_FS_KM_ENC_FEK_ALG);
/* 將生成的FEK的值復(fù)制到輸出參數(shù)中 */
memcpy(out_key, dst_key, sizeof(dst_key));
exit:
free(ctx);
return res;
}
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4359瀏覽量
86206 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3852瀏覽量
64725 -
密鑰
+關(guān)注
關(guān)注
1文章
141瀏覽量
19857
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
請(qǐng)問CYW20719是否支持“加密密鑰大小控制增強(qiáng)”?
BF70x加密密鑰的產(chǎn)生步驟
請(qǐng)問如何才能安全地存儲(chǔ)加密密鑰?
NAS網(wǎng)絡(luò)存儲(chǔ)上如何創(chuàng)建和使用加密文件夾?
介紹一種芯片AES加密密鑰生成工具
什么是秘密密鑰密碼技術(shù)
一種自主群組密鑰管理方案
![一種自主群組<b class='flag-5'>密鑰</b>管理方案](https://file.elecfans.com/web2/M00/49/72/poYBAGKhwLWAEeaaAAAWYY9Fnkc826.jpg)
明文存儲(chǔ)的Signal Desktop 應(yīng)用程序消息解密密鑰
![明文<b class='flag-5'>存儲(chǔ)</b>的Signal Desktop 應(yīng)用程序消息解<b class='flag-5'>密密鑰</b>](https://file.elecfans.com/web1/M00/69/4C/pIYBAFvVEPOAX0QuAAAIj6fPr7M144.png)
賽靈思研發(fā)提供能生成獨(dú)特的器件“指紋碼”的密鑰加密密鑰
芯片AES加密密鑰生成工具
![芯片AES<b class='flag-5'>加密密鑰</b>生成工具](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
量子物理學(xué)啟用下一個(gè)加密密鑰
![量子物理學(xué)啟用下一個(gè)<b class='flag-5'>加密密鑰</b>](https://file.elecfans.com/web2/M00/56/27/pYYBAGLeGQmAOU_eAACI6awsPN0950.jpg)
鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 加密導(dǎo)入密鑰 ArkTS
![鴻蒙開發(fā):Universal Keystore Kit <b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>加密</b>導(dǎo)入<b class='flag-5'>密鑰</b> ArkTS](https://file1.elecfans.com/web2/M00/F8/7E/wKgZomaH-WCAf7_NAAFzHTJvqJU507.jpg)
鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 加密導(dǎo)入密鑰C、C++
![鴻蒙開發(fā):Universal Keystore Kit<b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>加密</b>導(dǎo)入<b class='flag-5'>密鑰</b>C、C++](https://file1.elecfans.com/web2/M00/F8/7C/wKgZomaH9CSAT_F6AAD5gOSG3Z4102.jpg)
評(píng)論