0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OP-TEE安全存储安全文件的格式

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-11-21 11:49 次阅读

安全文件、dirf.db文件的数据格式和操作过程

OP-TEE的安全存储功能可满足用户保存敏感数据的需求,需要被保存的数据会被加 密保存到文件系统或RPMB分区中

当选择将数据保存到文件系统中时,默认情况下,加密后的数据会被保存在/data/tee目录中。

安全存储功能使用二叉树的方式来保存加密后的文件。

当第一次使用安全存储功能创建用于保存敏感数据的安全文件时,OP-TEE将会在/data/tee目录中生成两个文件:dirf.db文件和以数字命名的文件。

dirf.db文件保存的是整个安全存储功能管理的所有文件的目录信息和节点信息。 当用户使用某个已经存在的安全文件时,OP-TEE首先会读取dirf.db文件中的相关内容,然后根据需要操作的安全文件名字的哈希值在dirf.db文件中找到对应的文件编号,最终按照这个编号实现对文件的打开、关闭、写入、读出、重命名、裁剪等操作。(这里为什么要存hash,知道hash值和知道名字,安全性还是不一样,你知道怎么操作,但是不需要知道操作的本身?)

保存在/data/tee目录以数字命名的文件是被安全存储保护的用户文件。

该文件保存的是加密之后的用户数据, 加密使用的密钥则是对应的FEK

dirf.db文件和安全文件的格式

使用安全存储功能生成的文件都会使用相同的格式被保存,而且dirf.db文件与安全文件的格式也相同。

且dirf.db文件与安全文件的格式也相同。安全文件中的内容分为三个区域,分别用于保 存文件头、结点、数据,文件的内容 ,其格式如图所示。

图片

安全文件将整个空间划分成相等大小的物理块,每个物理块的大小为4KB,其中文件头部分存放的是tee_fs_htree_image结构体的内容,该结构体定义如下:

struct tee_fs_htree_image {
            //加密iv+enc_fek时使用的iv值,每次保存head时会使用随机数更新
            uint8_t iv[TEE_FS_HTREE_IV_SIZE];
            uint8_t tag[TEE_FS_HTREE_TAG_SIZE];       //加密iv+Enc_fek生成的数据的tag部分
            uint8_t enc_fek[TEE_FS_HTREE_FEK_SIZE];  //使用TSK加密一个安全文件的fek生成的
            //加密iv+Enc_fek生成的数据的imeta部分
            uint8_t imeta[sizeof(struct tee_fs_htree_imeta)];
            uint32_t counter;   //用于计算在保存tee_fs_htree_image时是存到ver0还是ver1
        };

节点部分存放的是tee_fs_htree_node_image结构体的内容,在保存数据到每个物理块之前都会使用FEK和对应的IV值对需要被保存的数据进行加密,

而在打开读取文件时则会首先从文件头中读取enc_fek的值,然后使用 TSK做解密操作来获取FEK ,最后从需要被解密的物理块对应的节点中获取到IV值。 tee_fs_htree_node_image的结构体的定义如下:

struct tee_fs_htree_node_image {
            //保存节点的哈希值,用于在操作文件时找到该文件的head
            uint8_t hash[TEE_FS_HTREE_HASH_SIZE];
            //加密安全文件数据区域中某一个块时使用的iv值,块数据的每次写入都会使用随机数更新
              uint8_t iv[TEE_FS_HTREE_IV_SIZE];
              uint8_t tag[TEE_FS_HTREE_TAG_SIZE]; //加密安全数据区域中一个块数据时生成的tag
              uint16_t flags;                        //用于计算使用块中的那个ver
          };

数据块 中保存的是密文数据 ,该密文数据是使用该文件对应的FEK块对应的IV值对需要被保存的数据进行加密操作来生成。

dirf.db文件的数据块区域保存的是所 有使用安全存储功能保存的文件的相关信息 ,在安全存储功能中 使用dirfile_entry结构体来表示每个安全文件的基本信息 ,该结构体定义如下:

struct dirfile_entry {
            TEE_UUID uuid;                          //创建该安全文件的TA的UUID
            uint8_t oid[TEE_OBJECT_ID_MAX_LEN]; //安全文件的名字(使用安全存储操作时的名字)
            uint32_t oidlen; //文件名字的长度
                                                  //data/tee目录下安全文件的root node的哈希值
            uint8_t hash[TEE_FS_HTREE_HASH_SIZE];
            uint32_t file_number;                   //保存在/data/tee目录下的文件编号
        };
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3592

    浏览量

    63382
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 数据格式
    +关注

    关注

    0

    文章

    26

    浏览量

    8806
收藏 人收藏

    评论

    相关推荐

    TEE解决了什么问题?

    一、引言近年来,可信执行的概念在物联网安全领域也逐渐流传。可信执行环境(TEE,Trusted Execution Environment)在智能手机中的应用非常广泛,如OP-TEE[1
    发表于 02-16 06:03

    请问Beal环境下编译OP-TEE后生成FIP需要哪些文件

    stm32mp157d-***-bl32.dtb fip.bin但是当我使用 OP-TEE 时,我使用以下命令:fiptool 创建 --tos-fw tee
    发表于 12-05 07:06

    请问HSE op-tee是什么关系?

    我有个问题。S32G同时支持HSE和op-tee。S32G的安全加解密和证书管理是通过HSE完成的吗?op-tee 和 HSE 只是其中之一吗?有没有相关的设计文档?谢谢
    发表于 04-06 06:26

    OP-TEE无法在锁定的i.MX6UL上初始化JR怎么解决?

    imx 存储库,而 U-boot 来自主线存储库 (2023.1)在我们锁定设备之前,这似乎工作正常。锁定设备后,我们在 OP-TEE 初始化时得到以下输出(启用了一些额外的跟踪消息):E/TC:0 0
    发表于 04-17 07:31

    OP-TEE安全驱动的框架

    OP-TEE中的安全驱动是OP-TEE操作安全设备的载体。 TA通过调用某个安全驱动的接口就可实现对特定
    的头像 发表于 10-30 16:04 337次阅读
    <b class='flag-5'>OP-TEE</b>中<b class='flag-5'>安全</b>驱动的框架

    安全驱动示例代码和实现

    的mk文件)和common.mk文件,同时也需要将安全驱动集成到OP-TEE的内核中。 然后编译整体OP-TEE后就能够使用该份示例代码来验
    的头像 发表于 10-30 16:07 392次阅读
    <b class='flag-5'>安全</b>驱动示例代码和实现

    OP-TEE的内核初始化过程

    1 OP-TEE OS的入口函数 • OP-TEE镜像的入口函数是在编译OP-TEE OS时通过链接文件来确定的, • OP-TEE在编译时
    的头像 发表于 11-02 17:57 479次阅读
    <b class='flag-5'>OP-TEE</b>的内核初始化过程

    OP-TEE的内核初始化函数调用

    用init_primary_helper函数来完成系统运行环境的建立 ,如果系统支持ATF,则该函数会返回OP-TEE的处理句柄,该处理句柄主要包含 • 各种安全监控模式调用的处理函数、 • 安全世界状态(SWS)的中断 • 以
    的头像 发表于 11-02 18:18 359次阅读
    <b class='flag-5'>OP-TEE</b>的内核初始化函数调用

    OP-TEE服务项的启动

    OP-TEE服务项的启动分为: service_init以及service_init_late ,需要被启动的服务项通过使用这两个宏,在编译时,相关服务的内容将会被保存到initcall1
    的头像 发表于 11-07 15:04 323次阅读

    ARM64位与ARM32位OP-TEE启动过程的差异

    ARM32的OP-TEE与ARM64的OP-TEE启动过程大致相同。ARM64的OP-TEE的_start函数定义在generic_entry_a64.S文件中,而且该函数不像ARM3
    的头像 发表于 11-07 15:12 293次阅读

    OP-TEE安全存储的简介

    时,OP-TEE会对需要被保存的数据进行加密,且每次更新安全文件时所用的加密密钥都会使用随机数重新生成,用户只要调用GP标准中定义的安全存储相关接口就能使用
    的头像 发表于 11-21 11:33 363次阅读
    <b class='flag-5'>OP-TEE</b>的<b class='flag-5'>安全</b><b class='flag-5'>存储</b>的简介

    安全存储密钥是什么

    安全存储密钥 安全存储密钥(Secure Storage Key, SSK)在每台设备中的值都不同。 OP-TEE启动时会使用 芯片ID和H
    的头像 发表于 11-21 11:37 320次阅读

    安全存储功能中使用的重要结构体

    。 • tee_fs_htree_node_image:用于保存文件的节点信息,通过节点可找到对应文件的头部或数据块信息; • tee_fs_htree_image:用于保存
    的头像 发表于 11-21 14:36 184次阅读
    <b class='flag-5'>安全</b><b class='flag-5'>存储</b>功能中使用的重要结构体

    安全存储文件的创建

    的dirf.db文件安全文件具有相同的格式。 所有对/data/tee目录下的文件进行的操作都是通过T
    的头像 发表于 11-21 15:02 233次阅读
    <b class='flag-5'>安全</b><b class='flag-5'>存储</b><b class='flag-5'>文件</b>的创建

    安全文件中数据的加解密

    安全存储中的安全文件和dirf.db文件中的数据内容都是按照一定的格式保存的,主要由三部分组成: • t
    的头像 发表于 11-21 15:49 178次阅读
    <b class='flag-5'>安全文件</b>中数据的加解密