rpmb实际就是emmc中的一个独立分区,写rpmb需要rpmb key对包计算mac值,rpmb硬件内部会校验mac值正确才能正常写入数据,可以防止重要数据被破坏

底层rpmb相关函数:

static TEE_Result tee_rpmb_get_dev_info(uint16_t dev_id, struct rpmb_dev_info *dev_info)

获取硬件rpmb信息,包括cid和rpmb大小

static TEE_Result tee_rpmb_write_key(uint16_t dev_id)

若rpmb第一次使用,会调用该函数写入一把rpmb key,该key只能写一次,后续不能改变

static TEE_Result tee_rpmb_read(uint16_t dev_id, uint32_t addr, uint8_t *data,
                uint32_t len, const uint8_t *fek,
                const TEE_UUID *uuid)

读取rpmb包数据,校验包的mac值合法,解密数据

static TEE_Result tee_rpmb_write_blk(uint16_t dev_id, uint16_t blk_idx,
                     const uint8_t *data_blks, uint16_t blkcnt,
                     const uint8_t *fek, const TEE_UUID *uuid)

加密数据,打包数据,计算包的mac值,发送给硬件rpmb写入

static TEE_Result tee_rpmb_init_read_wr_cnt(uint16_t dev_id,
                        uint32_t *wr_cnt,
                        uint16_t *op_result)

读取rpmb写入计数器

文件系统结构:

/**
 * RPMB_FS partition data
 */
struct rpmb_fs_partition {//offset 0 ; size 128 bytes
    uint32_t rpmb_fs_magic;
    uint32_t fs_version;
    uint32_t write_counter;
    uint32_t fat_start_address;
    /* Do not use reserved[] for other purpose than partition data. */
    uint8_t reserved[112];
};

//128-512预留

struct rpmb_fat_entry {//第一个文件头 offset 512 bytes ; size 256 bytes
    uint32_t start_address;//记录第一个文件数据存储地址
    uint32_t data_size;//文件大小
    uint32_t flags;
    uint32_t write_counter;
    uint8_t fek[TEE_FS_KM_FEK_SIZE];//加密数据的密钥,该密钥已经被加过密了,可以直接存储
    char filename[TEE_RPMB_FS_FILENAME_LENGTH];//文件名,用来查找文件的
};

struct rpmb_fat_entry {//第二个文件头 offset 512+256bytes ; size 256 bytes
    uint32_t start_address;
    uint32_t data_size;
    uint32_t flags;
    uint32_t write_counter;
    uint8_t fek[TEE_FS_KM_FEK_SIZE];
    char filename[TEE_RPMB_FS_FILENAME_LENGTH];
};

............

.............

.............

文件2数据

文件1数据

ps:新增一个文件时,文件头是从上向下增长,对应数据是从rpmb尾部从下向上增长,直到rpmb全部用完为止

OPTEE RPMB文件系统相关推荐

  1. OP-TEE内核学习笔记(一)(安全存储)—— 密钥和文件结构

    这里写目录标题 一.存储机制介绍 二.OPTEE REE文件系统安全存储(OPTEE SFS机制) 2.1 OP-TEE 系统安全文件 2.2 GlobalPlatform 安全存储要求 2.3 Li ...

  2. OPTEE之安全存储详解

    文章目录 安全存储是什么? 二.安全存储相关技术点 1.加载dirf.db文件 2. dirf.db文件和安全存储文件的格式 2.1 安全文件的三个区域 2.2 重要结构体的关系框图 2.3 FEK和 ...

  3. 38. OP-TEE中secure stroage------安全文件数据格式和操作过程

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  4. 22. OP-TEE中TA与CA执行流程-------tee-supplicant(一)

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  5. 【OP-TEE】安全存储

    背景 OP-TEE中的安全存储是根据 GlobalPlatform 的 TEE 内部核心 API(这里称为可信存储)中定义的内容来实现的.本规范规定,应该可以存储通用数据和关键材料,以保证所存储数据的 ...

  6. 36. OP-TEE中secure stroage的使用

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  7. OPTEE TA介绍

    前言 本文主要介绍OPTEE的TA(Trusted Applications),翻译自官方文档:Trusted Applications - OP-TEE documentation document ...

  8. OP-TEE基本的从芯片设计到给客户的安全问题浅析

    0  preface 基本概念缩写 TEE   Trusted Execution Environment   可信执行环境,通常用来进行数字版权管理(DRM : Digital Rights Man ...

  9. 1.OP-TEE代码结构

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

最新文章

  1. 【Unity3D】资源对象、预设、查找对象、组合模式等知识点
  2. 如何写出安全的、基本功能完善的Bash脚本
  3. 【Spark Summit EU 2016】摆脱传统ETL,让我们走向Spark吧!
  4. linux常见问题解决方法,Ubuntu 下2个常见问题解决方法
  5. 机载 LiDAR 点云数据分类
  6. python开发企业微信应用,使用Python发送企业微信消息
  7. java根据模板导出pdf
  8. [血泪整理]为何加载EDEM和FLUENT耦合接口显示ERROR126
  9. React的消息订阅全过程
  10. Navicat 解决问题:提示No All Pattern Found File Already Patched?
  11. 获取一个月有多少天,生成日历
  12. 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法
  13. android开发股票数据接口,股票数据接口-股票数据接口api
  14. 玩转代码|Google Map api国内正常使用该如何配置
  15. mysql在test库中创建表stu_数据库mysql练习
  16. Django项目实战——6—(退出登录、判断用户是否登录、QQ登录、QQ登录工具QQLoginTool、本机绑定域名)
  17. 《Effective Morden C++》Item 7: Distinguish between () and {} when creating objects
  18. JAVA 洗衣房管理系统 宿舍洗衣机管理系统
  19. 2019年11月14日
  20. 如何在excel中将两列数据匹配

热门文章

  1. Linux下使用rsync最快速删除大量文件的方法
  2. 基于SSM的网上水果生鲜超市商城
  3. 21. 罗列常见的几个运行时异常
  4. 华中科大微型计算机接口技术课后答案,2018考研华中科技大学811微机原理及接口技术考试大纲...
  5. CentOS下安装无线网卡驱动
  6. html5 获得窗口焦点和失去窗口焦点
  7. 模糊聚类分析和模式识别
  8. 九章算法面试题81 岛屿的个数
  9. kotlin教程4:函数进阶
  10. Flutter Could not resolve com.android.tools.build:gradle:xx.xx.xx