简介

提供了对重放保护内存块 (Replay Protected Memory Block) 的签名访问。此功能为系统提供了一种以经过身份验证和重放保护的方式将数据存储到特定内存区域的方法。这首先需要将身份验证密钥信息编程到 UFS 设备内存(共享密钥)中。

由于系统在此阶段尚未经过身份验证,身份验证密钥编程必须在安全环境中进行,例如在 OEM 生产中。随后,身份验证密钥用于使用消息验证码 (Message Authentication Code, MAC) 对重放保护内存区域进行的读写访问进行签名。

随机数生成和计数器寄存器的使用提供了额外的保护,防止消息重放(攻击者可能记录消息并在以后重放)。

有两种 RPMB 模式:普通 RPMB 模式和使用 EHS(扩展头段,Extended Header Segment)的高级 RPMB 模式。

RPMB 模式可以在配置阶段通过设置 RPMB 描述符中 bRPMBRegionEnable 参数的第 4 位 (Bit4) 来配置。如果设备接收到与配置的 RPMB 模式不同的 RPMB 操作请求,设备应响应 ILLEGAL REQUEST。

RPMB 知名逻辑单元描述

RPMB 包含在一个唯一的知名逻辑单元中,其大小在 RPMB 单元描述符 (RPMB Unit Descriptor) 中定义。RPMB 知名逻辑单元大小应为 128 Kbytes 的倍数,因此其最小大小为 128 Kbytes。RPMB 知名逻辑单元的内容只能通过成功验证的读和写访问来读取或写入。数据可以被主机覆盖,但永远不能被擦除。

所有对 RPMB 的访问都将引用特定的 RPMB 知名逻辑单元号 (W-LUN)。

RPMB 知名逻辑单元可以配置为多个 RPMB 区域,每个 RPMB 区域都有其自己专用的身份验证密钥、写入计数器、结果寄存器和从零开始的逻辑地址。

 要求

1 RPMB 资源

  • 身份验证密钥 (Authentication Key)

    • 类型:一次性写入,不可擦除或读取
    • 大小:32 字节
    • 描述:用于在计算 MAC 时对访问进行身份验证的身份验证密钥寄存器。每个 RPMB 区域都有专用的身份验证密钥。
  • 写入计数器 (Write Counter)

    • 类型:只读
    • 大小:4 字节
    • 描述:主机发出的成功认证数据写入请求总数的计数器值。生产后此寄存器的初始值为 0000 0000h。该值将随着每次成功的编程访问由 UFS 设备自动递增 1。该值无法重置。计数器达到最大值 FFFF FFFFh 后,将不再递增(防止溢出)。每个 RPMB 区域都有专用的写入计数器。
  • 结果寄存器 (Result Register)

    • 类型:只读
    • 大小:2 字节
    • 描述:此寄存器提供认证操作的结果。每个 RPMB 区域都有专用的结果寄存器。
  • RPMB 数据区 (RPMB Data Area)

    • 类型:可读可写
    • 大小:在 RPMB 单元描述符中定义为 128 Kbytes 的倍数
      • 最小 128 Kbytes,最大 16 Mbytes。
      • 每个 RPMB 区域大小在 RPMB 单元描述符中定义为 bRPMBRegion0Size – bRPMBRegion3Size。
    • 描述:只能通过成功认证的读/写访问读取和写入的数据。此数据可以被主机覆盖,但永远不能被擦除。
  • 普通 RPMB 的安全写保护配置块 (Secure Write Protect Configuration Block for Normal RPMB)

    • 类型:可读可写
    • 大小:256 字节
    • 描述:安全写保护配置块仅由 RPMB 区域 0 支持。此块用于配置逻辑单元中的安全写保护区域。每个逻辑单元有一个安全写保护配置块。每个安全写保护配置块最多有四个安全写保护条目 (Secure Write Protect Entries)。每个条目代表一个安全写保护区域。如果未使用条目,则相关字段应包含零值。安全写保护配置块的结构如表 12.1 所示。
  • 高级 RPMB 的安全写保护配置块 (Secure Write Protect Configuration Block for Advanced RPMB)

    • 类型:可读可写
    • 大小:4Kbytes
    • 描述:安全写保护配置块仅由 RPMB 区域 0 支持。此块用于配置逻辑单元中的安全写保护区域。每个逻辑单元有一个安全写保护配置块。每个安全写保护配置块最多有四个安全写保护条目。每个条目代表一个安全写保护区域。如果未使用条目,则相关字段应包含零值。

a) LUN

LUN 字段指示安全写保护应应用到的逻辑单元。有效值范围是从 0 到由 bMaxNumberLU 指定的 LU 数量。

b) 数据长度 (DATA LENGTH)

DATA LENGTH 字段指定安全写保护条目 (Secure Write Protect Entries) 的长度(以字节为单位)(0 表示无条目,16 表示一个条目,32 表示两个条目,48 表示三个条目,64 表示四个条目)。在写入请求中,设备应忽略在普通 RPMB 模式下从 DATA LENGTH + 16 到 255 的字节,在高级 RPMB 模式下从 DATA LENGTH + 16 到 4095 的字节,并将安全写保护配置块的这些字节设置为零。

c) 安全写保护条目 0 到条目 3 (Secure Write Protect Entry 0 to Entry 3)

安全写保护配置块可以仅包含条目 0、条目 0 和 1、条目 0、1 和 2 或所有四个条目。如果安全写保护配置块不包含任何条目 (DATA LENGTH = 00h),则指定逻辑单元中的所有条目将被移除。

d) WPT (写保护类型, Write Protect Type)

写保护类型字段 (WPT) 指定 WPF 位可以如何修改。

NV 型 (NV-type): WPF 位在电源循环和硬件复位后保持不变。WPF 值只能通过写入安全写保护配置块来更改。

P 型 (P-type): WPF 位在电源循环或硬件复位后自动清除为 0b。

NV-AWP 型 (NV-AWP-type): WPF 位在电源循环或硬件复位后自动设置为 1b。

e) WPF (写保护标志, Write Protect Flag)

0b:安全写保护已禁用。

1b:安全写保护已启用。

设置为 1 的 WPF 指定逻辑单元应禁止更改由 LOGICAL BLOCK ADDRESS 字段和 NUMBER OF LOGICAL BLOCKS 字段指示范围内的 LBA 的介质。要求写入介质的命令应终止,状态为 CHECK CONDITION,感知键 (sense key) 设置为 DATA PROTECT,附加感知代码 (additional sense code) 设置为 WRITE PROTECTED。

包含高速缓存的逻辑单元应在启用写保护之前将所有缓存逻辑块写入介质(例如,就像响应 SYNCHRONIZE CACHE 命令一样,其 LOGICAL BLOCK ADDRESS 字段和 NUMBER OF LOGICAL BLOCKS 字段设置为安全写保护条目中指示的值)。

设置为零的 WPF 位指定逻辑单元可能允许写入介质,具体取决于逻辑单元实现的其他写禁止机制。

WPF 在设备制造后应设置为零

f) 逻辑块地址 (LOGICAL BLOCK ADDRESS)

此字段指定安全写保护区域的第一个逻辑块的 LBA。

g) 逻辑块数量 (NUMBER OF LOGICAL BLOCKS)

此字段指定属于安全写保护区域的连续逻辑块的数量。

如果 NUMBER OF LOGICAL BLOCKS 字段设置为零,则安全写保护应应用于整个逻辑单元。在这种情况下,只需配置条目 0 即可为整个逻辑单元启用安全写保护。

  • RPMB 清除响应包格式 (RPMB Purge Response Packet Format)
    • RPMB 清除响应包包含在 RPMB 清除状态响应消息 (RPMB Purge Status Response message) 的数据字段中。

RPMB 清除状态读取响应包括:

a) 状态 (STATUS)

00h : RPMB 清除未启动(复位值)

01h : RPMB 清除正在进行中

02h : RPMB 清除成功完成。设备将在下一次 RPMB 清除状态读取请求时发送此状态,并且此状态将变为 00,RPMB 清除未启动。

03h – RPMB 清除常规失败。设备将在下一次 RPMB 清除状态读取请求时发送此状态,并且此状态将变为 00,RPMB 清除未启动。

b) bRPMBLifeTimeEst

此字段基于 RPMB LU 已执行的编程/擦除周期数提供 RPMB LU 寿命的指示。请注意,每当执行 RPMB 清除操作时,可能会执行多个编程/擦除周期,具体取决于有效 RPMB 数据在 RPMB LU 中的分散程度。计算方法是供应商特定的。

00h : 信息不可用

01h : 已使用 0% - 10% 的设备寿命

02h~09h: 10%~90% 

0Ah : 已使用 90% - 100% 的设备寿命

0Bh : 已超过其最大估计设备寿命

2 用于 MAC 计算的算法和密钥

消息验证码 (Message Authentication Code, MAC) 使用 [HMAC-SHA] 中定义的 HMAC SHA-256 计算。HMAC SHA-256 计算将密钥和消息作为输入。生成的 MAC 为 256 位(32 字节),作为请求或响应的一部分嵌入到数据帧中。

用于 MAC 计算的密钥始终是存储在目标 RPMB 区域中的 256 位身份验证密钥 (Authentication Key)。用作 MAC 计算输入的消息是 RPMB 数据包中字段的串联。

3 高级 RPMB 的 MAC 计算

用于 MAC 计算的密钥是存储在设备中的 256 位身份验证密钥。

如果 RPMB 消息在 DATA IN UPIU 或 DATA OUT UPIU 中包含数据,则按发送顺序传输的每个 DATA IN/OUT UPIU 中的数据的串联被输入到 MAC 计算中。然后,高级 RPMB 元信息 (Advanced RPMB Meta Information) 中从字节 0 到字节 27 的字段的串联被输入到 MAC 计算中。此后,四个 00h 字节被输入到 MAC 计算中。

4 RPMB 消息组件

每个 RPMB 消息包含特定的组件。

5 请求消息类型

定义了以下请求消息类型以支持 RPMB。这些消息从主机发送到设备。

  • 身份验证密钥编程请求 (Authentication Key programming request)
  • 写入计数器读取请求 (Write Counter read request)
  • 认证数据写入请求 (Authenticated data write request)
  • 认证数据读取请求 (Authenticated data read request)
  • 结果读取请求 (Result read request)
  • 安全写保护配置块写入请求 (Secure Write Protect Configuration Block write request)
  • 安全写保护配置块读取请求 (Secure Write Protect Configuration Block read request)
  • RPMB 清除启用请求 (RPMB Purge Enable Request)
  • RPMB 清除状态读取请求 (RPMB Purge Status Read Request)

6 响应消息类型

定义了以下响应消息类型以支持 RPMB。这些消息从设备发送到主机。

  • 身份验证密钥编程响应 (Authentication Key programming response)
  • 写入计数器读取响应 (Write Counter read response)
  • 认证数据写入响应 (Authenticated data write response)
  • 认证数据读取响应 (Authenticated data read response)
  • 安全写保护配置块写入响应 (Secure Write Protect Configuration Block write response)
  • 安全写保护配置块读取响应 (Secure Write Protect Configuration Block read response)
  • RPMB 清除启用响应 (RPMB Purge Enable Response)
  • RPMB 清除状态读取响应 (RPMB Purge Status Read Response)

7 RPMB 操作结果

  • RPMB 消息的结果组件由两个字节组成。最高有效字节保留且应设置为零。
  • 结果字段的第 7 位 (Bit 7) 应指示写入计数器是否已过期(即达到其最大值)
    • 值 1 表示写入计数器已过期
    • 值 0 表示写入计数器有效
  • 其他位指示操作状态
    • 操作正常 (Operation Okay) (00h)
    • 常规失败 (General Failure) (01h)
    • 认证失败 (Authentication Failure) (02h)
      • MAC 比较不匹配,MAC 计算失败
    • 计数器失败 (Counter Failure) (03h)
      • 比较时计数器不匹配,计数器递增失败
    • 地址失败 (Address Failure) (04h)
      • 地址超出范围,地址对齐错误
    • 写入失败 (Write Failure) (05h)
      • 数据、计数器或结果写入失败
    • 读取失败 (Read Failure) (06h)
      • 数据、计数器或结果读取失败
    • 身份验证密钥尚未编程 (Authentication key not yet programmed) (07h)
      • 在身份验证密钥被编程到目标 RPMB 区域之前,此值是唯一有效的结果,之后它永远不会再出现
    • 安全写保护配置块访问失败 (Secure Write Protect Configuration Block access failure) (08h)。
      • 安全写保护配置读取或写入失败。
    • 无效的安全写保护块配置参数 (Invalid Secure Write Protect Block Configuration parameter) (09h)。
      • 无效的 LUN(或逻辑单元未启用)、数据长度 (DATA LENGTH)、逻辑块地址 (LOGICAL BLOCK ADDRESS)、逻辑块数量 (NUMBER OF LOGICAL BLOCKS) 或区域重叠。
    • 安全写保护不适用 (Secure Write Protection not applicable) (0Ah)。
      • 逻辑单元配置了其他写保护模式(永久或上电)
    • 无法识别/不支持的请求类型 (Unrecognized/Unsupported Request Type) (0Bh)
      • 请求类型无法识别或不支持
    • 已拒绝,RPMB 清除操作正在进行 (Rejected, RPMB purge operation in progress) (0Ch)
      • 当 RPMB 清除正在进行时,认证的读取或写入被拒绝。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐