安全存储密钥
安全存储密钥(Secure Storage Key, SSK)在每台设备中的值都不同。
OP-TEE启动时会使用 芯片ID和HUK经HMAC算法计算来获得该值 ,并将SSK的值保存在结构体变量tee_fs_ssk的密钥成员中,以备生成其他密钥使用。
工厂生 产时会将HUK写入到OTP/efuse中 ,且正常世界状态无法读取到HUK的值,而芯片ID在芯片出厂后就会被写入到芯片中。
OP-TEE启动过程中会执行tee_fs_init_key_manager函数,该函数使用SSK =HMAC(HUK, message)的方式来生成SSK。该函数的内容如下:
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的产生:
* SSK = HMAC(HUK, message)
* message := concatenate(chip_id, static string)
* */
/* 获取HUK的值(该接口的实现与平台有关,不同的芯片具有不同读取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
是一个静态的字符串,该值被写死在代码中 */
memcpy(message, chip_id, sizeof(chip_id));
memcpy(message + sizeof(chip_id), string_for_ssk_gen,
sizeof(string_for_ssk_gen));
/* 使用huk的值对message的内容做HMAC运算,将获取到的数据作为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已经生产 */
if (res == TEE_SUCCESS)
tee_fs_ssk.is_init = 1;
return res;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
芯片
+关注
关注
455文章
50770浏览量
423383 -
密钥
+关注
关注
1文章
138浏览量
19755 -
TEE
+关注
关注
0文章
29浏览量
10258
发布评论请先 登录
相关推荐
CysecureTools如何直接访问外部存储设备内的密钥呢?
显然不符合安全标准。
那么,如标题所示,CysecureTools应该如何直接访问外部存储设备内的密钥呢?\"
发表于 01-31 08:08
请问如何才能安全地存储加密密钥?
大家好!我用的是PIC32MZ2048EFM144。我需要安全地存储加密密钥。我知道这个PIC有一个密码引擎,但是显然,它不像PIC24密码引擎,它不存储
发表于 06-13 08:24
ACR1256U-R9读写器如何实现密钥存储区安全访问控制
`ACR1256U-R9读写器如何实现密钥存储区安全访问控制ACR1256U-R9读写器支持USB通讯方式,易于与电脑连接,支持ISO 14443类型A和类型B,MF和Felica,是公交交通,门禁
发表于 08-03 11:33
【HarmonyOS】安全指南
密钥结合业务上下文衍生出多种密钥,给应用提供密钥管理和数据加解密相关的服务;设备核心密钥生命周期不离开可信环境。可信环境同样可提供身份认证、系统状态监控、数据
发表于 09-16 17:34
为什么STSAFE上没有存储密钥1和2的示例项目?那是安全问题吗?
密钥存储在安全区域中。这意味着 :如果我激活 RDP lvl 2,这些密钥是不可变的并且 永远无法更新如果我激活 RDP lvl 1,我可以批量擦除闪存并使用新
发表于 12-19 07:38
为了使用SBSFU或自定义安全引导加载程序,将BHK密钥和RHUK密钥存储在stm32u585中的什么位置?
BHK 和 RHUK 密钥的正确位置在哪里?如果我的 SBSFU 读数是正确的,则 KEY 仅存储在内部安全闪存 (0x0C000000) 中,RDP 用于限制从 DEBUG 端口 (SWD/JTAG) 访问闪存。3)如果是,
发表于 02-02 06:46
MCUBoot写入闪存之前将AES密钥存储在哪里?
程序会通过蓝牙将.sb2文件下载到sdcard,然后booloader会读取0xB000地址的AES密钥,解密sdcard中的文件,最终将程序写入flash 0xA000。我想知道在写入闪存之前将 AES 密钥存储在哪里,我应该
发表于 03-23 08:47
安全组播密钥管理方案研究
随着组播应用的不断发展,其安全性尤其是组播密钥管理成为热点问题。本文对基于逻辑密钥树的集中控制方案进行了分析和改进。改进方案在不增加组播成员密钥的存
发表于 08-18 09:02
•8次下载
实现密钥的物理安全
实现密钥的物理安全保密通信的实质是保护密钥,较长的在一起程度上能够防止通过强硬的计算威廉希尔官方网站
破解代码,但这种保护措施无法满足同样重要的物理安全性的
发表于 04-10 09:50
•9次下载
网络安全密钥是什么_网络安全密钥怎么修改
本文开始阐述了网络安全密钥的定义,其次阐述了如何设置无线网络的安全密钥以及无线网络的加密方法,最后阐述了网络安全
发表于 03-14 10:29
•14.2w次阅读
如何更新存储库签名密钥
为了最好地确保 RPM 和 Debian 软件包存储库的安全性和可靠性, NVIDIA 从 2022 年 4 月 27 日开始更新并轮换apt、dnf/yum和zypper软件包管理器使用的签名密钥。
LKT(LCS)安全芯片RSA密钥存储格式说明
RSA算法目前常用密钥长度有RSA512、RSA1024、RSA2048,存储的参数长度也会存在变化,LKT系列安全芯片存储相应参数时还需要在参数内容之前加入参数标识符、参数内容长度,
评论