安全存儲密鑰
安全存儲密鑰(Secure Storage Key, SSK)在每臺設(shè)備中的值都不同。
OP-TEE啟動時會使用 芯片ID和HUK經(jīng)HMAC算法計算來獲得該值 ,并將SSK的值保存在結(jié)構(gòu)體變量tee_fs_ssk的密鑰成員中,以備生成其他密鑰使用。
工廠生 產(chǎn)時會將HUK寫入到OTP/efuse中 ,且正常世界狀態(tài)無法讀取到HUK的值,而芯片ID在芯片出廠后就會被寫入到芯片中。
OP-TEE啟動過程中會執(zhí)行tee_fs_init_key_manager函數(shù),該函數(shù)使用SSK =HMAC(HUK, message)的方式來生成SSK。該函數(shù)的內(nèi)容如下:
static TEE_Result tee_fs_init_key_manager(void)
{
int res = TEE_SUCCESS;
struct tee_hw_unique_key huk;
uint8_t chip_id[TEE_FS_KM_CHIP_ID_LENGTH];
uint8_t message[sizeof(chip_id) + sizeof(string_for_ssk_gen)];
/* SSK的產(chǎn)生:
* SSK = HMAC(HUK, message)
* message := concatenate(chip_id, static string)
* */
/* 獲取HUK的值(該接口的實現(xiàn)與平臺有關(guān),不同的芯片具有不同讀取HUK值的方式)*/
tee_otp_get_hw_unique_key(&huk);
/* 獲取芯片ID的值(不同的芯片具有不同的讀取芯片ID值的方式)*/
tee_otp_get_die_id(chip_id, sizeof(chip_id));
/* 將chip id + string_for_ssk_gen連接后的值保存到message中,string_for_ssk_gen
是一個靜態(tài)的字符串,該值被寫死在代碼中 */
memcpy(message, chip_id, sizeof(chip_id));
memcpy(message + sizeof(chip_id), string_for_ssk_gen,
sizeof(string_for_ssk_gen));
/* 使用huk的值對message的內(nèi)容做HMAC運算,將獲取到的數(shù)據(jù)作為SSK保存到tee_fs_ssk變
量的key成員中 */
res = do_hmac(tee_fs_ssk.key, sizeof(tee_fs_ssk.key),
huk.data, sizeof(huk.data),
message, sizeof(message));
/* 標記ssk已經(jīng)生產(chǎn) */
if (res == TEE_SUCCESS)
tee_fs_ssk.is_init = 1;
return res;
}
-
芯片
+關(guān)注
關(guān)注
459文章
52091瀏覽量
435360 -
密鑰
+關(guān)注
關(guān)注
1文章
146瀏覽量
20127 -
TEE
+關(guān)注
關(guān)注
0文章
29瀏覽量
10436
發(fā)布評論請先 登錄
CysecureTools如何直接訪問外部存儲設(shè)備內(nèi)的密鑰呢?
請問如何才能安全地存儲加密密鑰?
ACR1256U-R9讀寫器如何實現(xiàn)密鑰存儲區(qū)安全訪問控制
【HarmonyOS】安全指南
為什么STSAFE上沒有存儲密鑰1和2的示例項目?那是安全問題嗎?
為了使用SBSFU或自定義安全引導(dǎo)加載程序,將BHK密鑰和RHUK密鑰存儲在stm32u585中的什么位置?
MCUBoot寫入閃存之前將AES密鑰存儲在哪里?
Arm密鑰管理單元規(guī)范
安全組播密鑰管理方案研究
實現(xiàn)密鑰的物理安全
網(wǎng)絡(luò)安全密鑰是什么_網(wǎng)絡(luò)安全密鑰怎么修改
如何更新存儲庫簽名密鑰
LKT(LCS)安全芯片RSA密鑰存儲格式說明
ATSHA204A國產(chǎn)替代新選擇:LCSHA204加密芯片介紹

存儲密鑰與文件加密密鑰介紹

評論