安全存储密钥是什么

描述

安全存储密钥

安全存储密钥(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;
        }
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分