12.3.1 Description and Requirements
UFS 设备数据内容可以在逻辑单元级别受到保护。 应提供以下保护模式:
永久写保护(永久:一旦启用就无法撤消)
上电写保护(写保护可以通过重启或硬件复位事件clear)
安全写保护(写保护只能使用安全认证方法配置和启用/禁用)
这些写保护模式未在 RPMB well known logical unit中实现。还应该有一种方法,为 a logical unit读取当前启用的保护模式。
12.3.2 Implementation
可以在逻辑单元级别定义保护模式,配置 Unit Descriptor的 bLUWriteProtect 参数。 写保护模式编码如下:
00h:逻辑单元未写保护(如果设置了一个或多个安全写保护条目,则为安全写保护)
01h:逻辑单元上电写保护
02h:逻辑单元永久写保护

被设置为 power on write protected logical unit(即bLUWriteProtect = 01h)的unit,这些逻辑单元仅当fPowerOnWPEn = 0时才可以被写。fPowerOnWPEn 标志在 a power cycle or hardware reset event后设置为零,一旦设置为 1,它就不能被主机切换或清除。
逻辑单元内的 LBA 区域可以使用安全写保护模式进行写保护。

建议在所有命令队列为空的情况下设置 fPowerOnWPEn 标志、fPermanentWPEn 标志或 WPF 标志,并等待设备查询响应后再将写入命令,入队列。如果 LBA 是写保护的,那么请求取消映射、格式化或更改与该 LBA 相关的介质的其他有效命令将被拒绝,并带有 CHECK CONDITION 状态,并将检测键设置为 DATA PROTECT。
12.4.1 Introduction
提供了对 Replay Protected Memory Block的签名访问。 此功能为系统提供了以经过验证和重放保护的方式将数据存储到特定内存区域的方法。 这是通过首先将认证密钥信息编程到 UFS 设备内存(共享密钥)来提供的。由于在此阶段还不能对系统进行身份验证,因此身份验证密钥编程必须在 OEM 生产等安全环境中进行。 此外,验证密钥用于使用消息验证代码 (MAC) 对对重放保护存储区域进行的读取和写入访问进行签名。 随机数生成和计数寄存器的使用提供了额外的保护,防止消息重放,其中消息可能被攻击者记录和回放。
RPMB 包含在一个唯一的众所周知的逻辑单元中,其大小在RPMB Unit Descriptor中定义。 RPMB 众所周知的逻辑单元大小应为 128 KB 的倍数,因此其最小大小为 128 KB。 RPMB well known logical unit的内容只能通过成功验证的读写访问来读取或写入。 数据可能会被主机覆盖,但永远无法擦除。所有对 RPMB 的访问都将引用特定的 RPMB well known logical unit number (W-LUN)。
12.4.3 Requirements
12.4.3.1 RPMB Resources
Write Counter
o 类型:只读
o 大小:4 字节
o 描述:主机发出的,成功验证数据写入请求的总数,的计数器值。 该寄存器产生后的初始值为00000000h。 随着每次成功的编程访问,UFS 设备将自动将该值加一。 该值无法重置。 计数器达到最大值 FFFF FFFFh 后,将不再递增(防止溢出)。
RPMB Data Area
Secure Write Protect Configuration Block
o 类型:可读可写
o 描述:该块用于在逻辑单元中配置安全写保护区域。 每个逻辑单元都有一个安全写保护配置块。 每个安全写保护配置块最多有四个安全写保护条目。 每个条目代表一个安全写保护区域。 如果未使用条目,则相关字段应包含零值。 安全写保护配置块的结构如表 12-1 所示。

d) WPT (Write Protect Type)
写保护类型字段 (WPT) 指定如何修改 WPF 位。
Code
|
Definition
|
00b | NV型 WPF 位保持不变,即使电源循环和硬件复位。 WPFlag 值只能通过写入安全写保护配置块进行更改。 |
01b |
P-type
WPF 位在上电或硬件复位后自动设置为0b。
|
10b |
NV-AWP-type
WPF 位在电源循环或硬件复位后自动设置为 1b
|
11b |
Reserved
|
0b : Secure Write Protection is disabled。
1b : Secure Write Protection is enabled。
设置为 1 的 WPF 指定逻辑单元应禁止在 LOGICAL BLOCK ADDRESS 字段和 NUMBER OF LOGICAL BLOCKS 字段指示的范围内更改 LBA 的介质。 需要写入介质的命令应以 CHECK CONDITION 状态终止,感应键设置为 DATA PROTECT,附加感应代码设置为 WRITE PROTECTED。包含缓存的逻辑单元应在启用写保护之前将所有缓存的逻辑块写入介质。 (例如,在响应 SYNCHRONIZE CACHE 命令时,将逻辑块地址字段和逻辑块数字段设置为安全写保护条目中指示的值)。 设置为零的 WPF 位指定逻辑单元可以允许写入介质,这取决于逻辑单元实现的其他写入禁止机制。 WPF 应在设备制造后设置为零。
该字段指定安全写保护区域的第一个逻辑块的 LBA。
g) NUMBER OF LOGICAL BLOCKS
此字段指定属于 Secure Write Protect 区域的连续逻辑块的数量,如果逻辑块数量字段设置为零,则安全写保护将应用于整个逻辑单元。 在这种情况下,只需配置 Entry-0 即可为整个逻辑单元启用安全写保护。
12.4.3.3 RPMB Message Components
每个 RPMB 消息都包含特定的组件。
1)Request Message Type
2)Response Message Type
3)Authentication Key(该组件仅在对Authentication Key 进行编程时使用 )
4)MAC(消息验证码 )
5)Result(具体在下边RPMB Operation Result)
6)Write Counter(认证成功的数据写入操作总数 )
7)Address(要编程到 RPMB 或从 RPMB 读取的数据的逻辑块地址 )
8)Nonce(Random number generated by the host for the requests and copied to response by the RPMB engine)
9)Data(要通过签名访问写入或读取的数据 )
10)Block Count(请求读取或编程的 256 字节单位的逻辑块的数量).
12.4.3.4 Request Message Types
身份验证密钥编程请求
Code
|
Request Message Types
|
0001h
|
Authentication Key programming request
|
0002h
|
Write Counter read request
|
0003h
|
Authenticated data write request
|
0004h
|
Authenticated data read request
|
0005h
|
Result read request
|
0006h
|
Secure Write Protect Configuration Block write request
|
0007h
|
Secure Write Protect Configuration Block read request
|
Others
|
Reserved
|
身份验证密钥编程响应
写计数器读响应
认证数据写入响应
认证数据读取响应
安全写保护配置块写响应
安全写保护配置块读取响应
Code
|
Request Message Types
|
0100h
|
Authentication Key programming response
|
0200h
|
Write Counter read response
|
0300h
|
Authenticated data write response
|
0400h
|
Authenticated data read response
|
0500h
|
Result read response
|
0600h
|
Secure Write Protect Configuration Block write response
|
0700h
|
Secure Write Protect Configuration Block read response
|
Others
|
Reserved
|
RPMB 消息的结果部分由两个字节组成。 最高有效字节被保留并应设置为零。
结果字段的第 7 位应指示写计数器是否已过期(即达到其最大值)
o 值为 1 表示写计数器过期
o 值为 0 表示有效的写计数器
其他位指示操作状态
Bit[15:8]
|
Bit[7]
|
Bit[6:0]
|
Reserved
|
Write Counter Status
|
Operation Status
|
12.4.4.1 RPMB Message
一个 RPMB 消息可以由一个或多个 RPMB 消息数据帧组成。RPMB 消息数据帧大小为 512 字节,其结构如表 12-9 所示。

12.4.4.2 MAC Calculation
用于 MAC 计算的密钥始终是存储在设备中的 256 位身份验证密钥。 MAC 计算的输入是 RPMB 消息数据帧中从字节 228 到字节 511 的字段的串联(不包括填充字节和 MAC)。如果 RPMB 消息由多个 RPMB 消息数据帧组成,则 MAC 的输入消息是每个数据帧的字节 [228:511] 以数据帧的发送顺序串联。 MAC 仅在最后一个数据帧中有效。
12.4.4.3 RPMB Message Data Frame Delivery
RPMB 消息使用SCSI security protocol commands传递:
SECURITY PROTOCOL IN 用于向设备发送请求消息
SECURITY PROTOCOL OUT用于向设备请求发送响应消息。
12.4.5 SECURITY PROTOCOL IN/OUT Commands
[SPC] 中定义的 SECURITY PROTOCOL IN 命令和 SECURITY PROTOCOL OUT 命令用于在主机和设备之间封装和传递任何安全协议的数据包,而不需要对数据包进行解释、分解或重新组装以进行传递。SECURITY PROTOCOL IN 命令和 SECURITY PROTOCOL OUT 命令包含一个 SECURITY PROTOCOL 字段。 T10 为 JEDEC UFS 应用程序分配了一个唯一的安全协议 ID。
SECURITY PROTOCOL = ECh (JEDEC Universal Flash Storage)
该标准为 SECURITY PROTOCOL IN 命令和 SECURITY PROTOCOL OUT 命令的 SECURITY PROTOCOL SPECIFIC 字段分配一个唯一标识符。
RPMB Protocol ID = 0001h
12.4.5.1 CDB format of SECURITY PROTOCOL IN/OUT commands
RPMB 众所周知的逻辑单元应支持以下安全协议字段值:
00h: Security protocol information
ECh: JEDEC Universal Flash Storage (security protocol ID assigned for JEDEC UFS application)
Other values are invalid.
SECURITY PROTOCOL IN/OUT 命令应将分配给 JEDEC UFS 应用程序的唯一安全协议 ID 视为唯一有效的安全协议 ID。
INC_512 位应设置为零以指定 ALLOCATION LENGTH 或 TRANSFER LENGTH 字段表示要传输的字节数。
如果 SECURITY PROTOCOL IN 命令中的 ALLOCATION LENGTH 字段不等于 512 的整数倍,则该命令应以 CHECK CONDITION 状态终止。
如果 SECURITY PROTOCOL OUT 命令中的 TRANSFER LENGTH 字段不等于 512 的整数倍,则该命令应以 CHECK CONDITION 状态终止。