3.2 Partition Management
General Partition Introduce
三部分组成:Boot Area Partition,RPMB Partition,UDA Partition
1) 各部分的逻辑地址从0x00000000开始,相互独立
2) 2个Boot Area Partition和 RPMB Partition 大小是128KB的倍数
3) Boot是引导执行,RPMB是授信保护,GPP是敏感数据,UDA是存储数据
4) Boot、RPMB 大小和属性由厂商定义,只读;GPP大小和属性,只能一次编写。
3.2.1 Boot Partition
Boot Area partition 1&2 该分区的数据,在eMMC 上电后,可以读取出来。Boot Area包含二个Partition,用于存储启动bootloader。二个partition的大小一致,由Extended CSD Register 的BOOT_SIZE_MULT filed决定,大小的计算公式:
SIZE = 128KB * BOOT_SIZE_MULT
一般情况下,Boot Area Partition大小为4MB,即BOOT_SIZE_MULT = 32 ;同样的BOOT_SIZE_MULT MAX = 255,即 32640KB=31.875MB。
● Boot & User Partition是分开的,即独立编址
● Slave 的Boot Configuration如下:
Master可以通过CMD6 来配置,Slave也可以设置EXT_CSD register 置0x03
3.2.2 RPMB partition(重要)
RPMB (Replay Protected Memory Block),保存在RPMB内部的数据不被非法篡改。在实际应用中,PRMB分区通常用来保存安全相关的数据。换言之,eMMC 在写入数据到RPMB时,会校验数据的合法性,只有指定的Host才能够写入,同时在读取数据时,也会提供签名机制,保证Host读取到的数据是RPMB内部数据,而不是攻击者伪造的数据。
● RPMB可以对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取的操作,因此存储到RPMB的数据通常会进行加密后再存储。
● RPMB容量大小的SIZE = 128KB * BOOT_SIZE_MULT ,这里的MAX BOOT_SIZE_MULT=128,即128KB * 128 =16384KB = 16MB。
● Replay protection explain: 使用eMMC的产品,在产线生产时,会为每一个产品生产一个唯一的256 bits的secure key,烧写到eMMC的OTP 区域,只能烧写一次的区域,在同时Host在安全区域中,TEE也会保留Secure key。在eMMC 内部,还有一个RPMB write Counter,RPBM Pre 合法写入操作时, Write Counter就会自动加1 ,通过Secure key and Write Counter的组合应用,RPMB可以实现数据读取和写入都Replay Protect。
这部分3.2.2.1&3.2.2.2待定补充解读
3.2.2.1 RPMB 数据读取
① Host 向eMMC 发起读取RPMB 的请求,同时生成一个16 Bytes 的随机数,发送给eMMC
② eMMC 将请求的数据从RPMB中读出,并使用Secure Key 通过HMAC SHA-256算法(Hash 算法),计算读取到的数据和接收到的随机数拼到一起后的签名。然后,eMMC 将读取到的数据,接收到的随机数,计算得到签名一起发送给Host。
③ Host 接收到RPMB的数据,随机数以及签名后,首先比较随机数是否与自己发送的一致,如果一致,再用同样的Secure Key通过HMAC SHA-256算法对数据和随机数组合到一起进行签名,如果签名与eMMC 发送的签名是一致,那么就可以确定该数据是从RPMB中读取到的正确数据,而不是攻击者伪造的数据。
④ 这样的读取流程,可以保证Host正确的读取RPMB数据。
3.2.2.2 RPMB 数据写入
① host 按照RPMB数据读取的流程,读取到RPMB的write counter
② Host 将需要写入的数据和write counter 拼接到一起并计算签名,然后将数据,write counter以及签名一并发给eMMC。
③ eMMC 接收到数据后,先对比write counter 是否与当前的值相同,如果相同那么再对数据和write counter的组合进行签名,然后和Host发送过来的签名进行比较,如果签名相同则鉴权通过,将数据写入RPMB中。
④ 这样写入流程,可以保证RPMB不会被非法篡改数据。
3.2.3 User data Area
这里包含了General Purpose Partition 1-4,简称GPP ,用于存储系统或者用户数据,在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。同样的User Data Area(UDA)用于存储系统和用户数据。这里有可以进行分区Boot,System,User data等。
3.2.3.1 General Purpose Partition (GPP )
eMMC 提供了GPP,很多情况下GPP不会被启用,因为与UDA作用类似,直接使用UDA可以满足需求,不过这里继续说明这部分。下图是容量大小的计算公式:
● eMMC 中,擦除和写保护都是按照Block进行的,HC_WP_GRP_SIZE为写保护的操作快大小,HC_ERARE_GRP_SIZE 则为擦除操作的块大小。
● eMMC 芯片的GPP的配置通常是只能进行一次 OTP操作,只有在量产阶段,产线上进行。
GPP Partition Attribute
eMMC 标准中,GPP定义了2类 Attribute ,Enhanced 和 Extended Attribute。每个GPP可以设定2 类属性中的一种属性,不可以同时设定多个属性。
● Enhanced attribute
Default未设定Enhanced attribute ; Enhanced storage media,设定为GPP为 Enhanced storage media,设定enhanced storage media后,可以把存储介质从MLC改变成SLC,提高该分区的读写性能和PE。
● Extended attribute
Default,未设定Extended attribute ;system code, 设定GPP为 GPP System code属性,该属性主要用在存放操作系统类,很少进行擦写更新分区;Non-Persistent,设定为GPP为Non-Persistent。
3.2.3.2 User Data Area (UDA)
UDA是eMMC最大的一个分区,是实际上的存储分区区域。除去上述几部分,剩余的就就是UDA部分。这里软件还会对UDA进行分区。软件分区的技术有MBR(Master BOOT Record)和 GPT(GUID partition table)二种。
● 软件分区技术一般是将存储介质划分为多个区域,即SW Partition,然后通过一个Partition Table来维护这些SW Partition。
● Partition Table中,每个条目都保存一个SW Partition的起始地址和大小的属性信息。
● 软件系统在启动后,会扫描Partition Table,获取存储介质上的各个SW Partition信息,然后根据信息,将各个Partition加载到系统中,进行数据存储。
① BOOT (Boot Area partitions )和 RPMB (replay Partition memory block)的容量大小,一般是128KB的倍数,比如系数<32> 即4MB。
② GPP在出厂时默认不被支持,即不存在这些分区,需要用户主动使能,并配置其所需要使用的GPP的容量大小,GPP的数量为1-4个,各个GPP的容量大小可以不一样。
③ UDA的容量大小为总容量大小减去其他分区所占用的容量。
④ 写保护,通过设定 Extended CSD Register的BOOT_WP Field,可以为2个Boot Area Partition独立配置写保护功能,以防止数据被意外改写或者擦出。
⑤ eMMC 中定义了二种BOOT Area的写保护模式:
一种,Power-UP Write protection,enable后,如果eMMC 掉电,Write Protection Function Invalid,需要Pre Power-UP后进行配置;
另一种,Permanent write Protection,enable后,即使掉电也会消失,主动进行关闭才会消失。