12.4.6 RPMB Operations
12.4.6.1 Request Type Message Delivery
任何时候都只能执行一个 RPMB 操作。
主机向 RPMB 知名逻辑单元发送请求类型消息,以请求 RPMB 知名逻辑单元执行操作。
为了传递请求类型的消息,主机在 SCSI 事务的命令阶段的 COMMAND UPIU 中发送 SECURITY PROTOCOL OUT 命令。
对于经过认证的数据写入请求,要写入RPMB数据区的数据包含在请求消息中。 单个 Authenticated Data Write 请求中的最大数据大小等于 bRPMB_ReadWriteSize × 256 字节; 如果所需的数据大小超过此值,则应执行多个 Authenticated Data Write 操作。
对于 SECURITY PROTOCOL OUT 命令,COMMAND UPIU 中的 Flags.W 设置为 1,因为数据从主机传输到设备。
表 12-16 为各种情况定义了 COMMAND UPIU 中的预期数据传输长度字段值
设备向主机指示它已准备好接收请求类型消息,发送 READY TO TRANSFER UPIU 。 如果预期数据传输长度为 512 字节,则数据缓冲区偏移字段应设置为零值,数据传输计数字段应设置为值 512。
在单个 READY TO TRANSFER UPIU 中请求的字节数不得大于 bMaxDataOutSize 属性指示的值。
为了完成操作,设备在状态阶段返回一个带有操作状态的 RESPONSE UPIU。
12.4.6.2 Response Type Message Delivery
主机请求 RPMB 众所周知的逻辑单元发送 response type message以读取先前操作的结果、读取写入计数器、从 RPMB 数据区域读取数据,或读取 Secure Write Protect Configuration Block的内容。
为了请求传递 response type message的消息,主机在 SCSI 事务的命令阶段中的 COMMAND UPIU 中发送 SECURITY PROTOCOL IN 命令。
对于经过验证的数据,从 RPMB 数据区读取的数据包含在响应消息中。
还有以下四种操作,在协议中都有详细的步骤,流程图和文字介绍的很详细:
12.4.6.1 Request Type Message Delivery
任何时候都只能执行一个 RPMB 操作。
主机向 RPMB 知名逻辑单元发送请求类型消息,以请求 RPMB 知名逻辑单元执行操作。
为了传递请求类型的消息,主机在 SCSI 事务的命令阶段的 COMMAND UPIU 中发送 SECURITY PROTOCOL OUT 命令。
对于经过认证的数据写入请求,要写入RPMB数据区的数据包含在请求消息中。 单个 Authenticated Data Write 请求中的最大数据大小等于 bRPMB_ReadWriteSize × 256 字节; 如果所需的数据大小超过此值,则应执行多个 Authenticated Data Write 操作。
对于 SECURITY PROTOCOL OUT 命令,COMMAND UPIU 中的 Flags.W 设置为 1,因为数据从主机传输到设备。
表 12-16 为各种情况定义了 COMMAND UPIU 中的预期数据传输长度字段值
![](https://i-blog.csdnimg.cn/blog_migrate/f9c1e848ec3a69f6b965ab7803ea24c4.png)
设备向主机指示它已准备好接收请求类型消息,发送 READY TO TRANSFER UPIU 。 如果预期数据传输长度为 512 字节,则数据缓冲区偏移字段应设置为零值,数据传输计数字段应设置为值 512。
在单个 READY TO TRANSFER UPIU 中请求的字节数不得大于 bMaxDataOutSize 属性指示的值。
为了完成操作,设备在状态阶段返回一个带有操作状态的 RESPONSE UPIU。
12.4.6.2 Response Type Message Delivery
主机请求 RPMB 众所周知的逻辑单元发送 response type message以读取先前操作的结果、读取写入计数器、从 RPMB 数据区域读取数据,或读取 Secure Write Protect Configuration Block的内容。
为了请求传递 response type message的消息,主机在 SCSI 事务的命令阶段中的 COMMAND UPIU 中发送 SECURITY PROTOCOL IN 命令。
对于经过验证的数据,从 RPMB 数据区读取的数据包含在响应消息中。
对于 SECURITY PROTOCOL IN 命令,COMMAND UPIU 中的 Flags.R 设置为 1,因为数据是从设备传输到主机的。
表 12-17 为各种情况定义了 COMMAND UPIU 中的预期数据传输长度字段值。
设备返回 RPMB 消息中请求的结果或数据。 RPMB 消息通过在数据阶段发送一个或多个 DATA IN UPIU 来传递。
表 12-17 为各种情况定义了 COMMAND UPIU 中的预期数据传输长度字段值。
![](https://i-blog.csdnimg.cn/blog_migrate/6eaf19f2ecf45577432cba27d61ff329.png)
设备返回 RPMB 消息中请求的结果或数据。 RPMB 消息通过在数据阶段发送一个或多个 DATA IN UPIU 来传递。
DATA IN UPIU 中的数据大小不得超过 bMaxDataInSize 属性指示的值。
为了完成操作,设备在状态阶段发送一个带有操作状态的 RESPONSE UPIU
12.4.6.3 Authentication Key Programming
验证密钥编程由 SECURITY PROTOCOL OUT 命令启动
从主机传送到设备的 RPMB 数据帧包括 Request Message Type = 0001h 和 Authentication Key
当 Authentication Key 编程完成时,设备在状态响应中返回 GOOD 状态
主机通过发出 SECURITY PROTOCOL OUT 命令来启动 Authentication Key 编程验证过程,其中 RPMB 数据帧包含请求消息类型 = 0005h
当验证结果准备好检索时,设备在状态响应中返回 GOOD 状态
主机通过发出 SECURITY PROTOCOL IN 命令检索验证结果
设备返回包含响应消息类型 = 0100h(Authentication Key programming response) 和结果代码的 RPMB 数据帧
如果 Authentication Key 编程失败,则返回结果为 0005h(写入失败)。 如果在 Authentication Key 编程期间发生其他错误,则返回结果为 0001h(一般故障)。
在对认证密钥进行编程之前,无法访问 RPMB 数据区。 可以通过尝试向 RPMB 数据区域写入/读取数据来检查设备的状态:如果验证密钥未编程,则响应消息中的结果字段将设置为 0007h(验证密钥尚未编程) .
总的流程见下图:
12.4.6.4 Read Counter Value
读取计数器值序列由 SECURITY PROTOCOL OUT 命令启动。
为了完成操作,设备在状态阶段发送一个带有操作状态的 RESPONSE UPIU
12.4.6.3 Authentication Key Programming
验证密钥编程由 SECURITY PROTOCOL OUT 命令启动
从主机传送到设备的 RPMB 数据帧包括 Request Message Type = 0001h 和 Authentication Key
当 Authentication Key 编程完成时,设备在状态响应中返回 GOOD 状态
主机通过发出 SECURITY PROTOCOL OUT 命令来启动 Authentication Key 编程验证过程,其中 RPMB 数据帧包含请求消息类型 = 0005h
当验证结果准备好检索时,设备在状态响应中返回 GOOD 状态
主机通过发出 SECURITY PROTOCOL IN 命令检索验证结果
设备返回包含响应消息类型 = 0100h(Authentication Key programming response) 和结果代码的 RPMB 数据帧
如果 Authentication Key 编程失败,则返回结果为 0005h(写入失败)。 如果在 Authentication Key 编程期间发生其他错误,则返回结果为 0001h(一般故障)。
在对认证密钥进行编程之前,无法访问 RPMB 数据区。 可以通过尝试向 RPMB 数据区域写入/读取数据来检查设备的状态:如果验证密钥未编程,则响应消息中的结果字段将设置为 0007h(验证密钥尚未编程) .
总的流程见下图:
![](https://i-blog.csdnimg.cn/blog_migrate/85a1032c1098142749e56808950a9e96.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fe11dc38c256be7703a7411cae8c7d82.png)
![](https://i-blog.csdnimg.cn/blog_migrate/59e493a61d89676482959c95d5c53843.png)
12.4.6.4 Read Counter Value
读取计数器值序列由 SECURITY PROTOCOL OUT 命令启动。
从主机传送到设备的 RPMB 数据帧包括 Request Message Type = 0002h 和 Nonce(随机数,用来加强安全性)。
当主机在设备的状态响应中收到 GOOD 状态时,它会向设备发送一个 SECURITY PROTOCOL IN 命令以检索写计数器值。
设备返回响应消息类型 = 0200h 的 RPMB 数据帧、请求中收到的 Nonce 副本、写入计数器值、MAC 和结果。 如果读取计数器值失败,则返回结果为 0006h(读取失败)。 如果发生其他错误,则结果为 0001h(一般故障)。 如果计数器已过期,则返回结果中的第 7 位也设置为 1(结果值分别为 0080h、0086h 和 0081h)。
总的流程见下图:
总的流程见下图:
![](https://i-blog.csdnimg.cn/blog_migrate/d5a8a8fa163da2eff2ce1954a6f4ca38.png)
![](https://i-blog.csdnimg.cn/blog_migrate/448ae3ee32274f729a0a3e4debbe92f7.png)
还有以下四种操作,在协议中都有详细的步骤,流程图和文字介绍的很详细:
12.4.6.5 Authenticated Data Write
12.4.6.6 Authenticated Data Read
12.4.6.7 Authenticated Secure Write Protect Configuration Block Write
12.4.6.8 Authenticated Secure Write Protect Configuration Block Read
12.4.6.6 Authenticated Data Read
12.4.6.7 Authenticated Secure Write Protect Configuration Block Write
12.4.6.8 Authenticated Secure Write Protect Configuration Block Read