UFS里,有这么一个LU,主机往该LU写数据时,UFS设备会校验数据的合法性,只有特定的主机才能写入;同时,主机在读取数据时,也提供了校验机制,保证了主机读取到的数据是从该LU上读的数据,而不是攻击者伪造的数据。这个LU就是RPMB(Replay Protected Memory Block)LU,四大“名撸”(Well Known LU)之一。
12.4.1 Introduction
RPMB的签名访问为系统提供了以经过身份验证和重放保护的方式将数据存储到特定存储区域的方法。这是通过在UFS设备出厂时将认证密钥信息编程到UFS设备存储器来实现的。认证密钥用于使用消息认证码(MAC)对重放保护存储器区域进行的读写访问进行签名;
通过生成随机数和计数寄存器可以提供额外的保护,防止攻击者记录和重放消息;
12.4.2 RPMB Well Known Logical Unit Description
RPMB可以配置为多个RPMB区域,其中每个RPMB区域都有自己的专用身份验证密钥、写入计数器、结果寄存器和从零开始的逻辑地址。参考13.2.3了解如何将RPMB已知逻辑单元配置为多个RPMB区域。
每个RPMB区域可以在任何给定时间点处理单个RPMB认证操作,其中单个认证RPMB操作按照表12.5中所列的请求消息类型,对应于整个图12.2认证密钥编程流、图12.3读取计数器值流或图12.6认证安全写保护配置块读取流等等。例如,启动器3可以在RPMB区域0中启动认证操作,而启动器4可以在RPMB区域1中启动认证操作。在完成由启动器3启动的经过身份验证的操作后,新的经过身份验证的操作请求应该访问RPMB区域0;以及在完成来自发起方4的请求之后的RPMB区域1。
12.4.3 Requirements
RPMB Resources
Authentication Key 认证密钥
- 类型:仅能编程一次,不可读、不可擦
- 大小:32 Bytes
- 描述:认证密钥寄存器用于在计算MAC时验证访问。每个RPMB区域都有一个专用的认证密钥。
Write Counter 写计数
- 类型:只读
- 大小:4 Bytes
- 描述:主机发出的成功写入验证数据请求总数的计数值。生产后该寄存器的初始值为0000 0000h。UFS设备会随着每次成功的编程访问自动将该值增加1。该值无法重置。计数器达到FFFFFFH的最大值后,它将不再递增(防止溢出)。每个RPMB区域都有专用的写入计数器。
Result Register 结果寄存器
- 类型:只读
- 大小:2 Bytes
- 描述:该寄存器提供认证操作的结果;其值在12.4.3.6详细描述;每个RPMB区域都有专用的结果寄存器。
RPMB Data Area 数据区
- 类型:可读可写
- 大小:RPMB size定义在RPMB Unit Descriptor。RPMB size应是128KB的整数倍,范围是[128KB~16MB]
每个RPMB区域的大小分别定义在RPMB Unit Descriptor的bRPMBRegion0Size – bRPMBRegion3Size;
- 描述:RPMB的内容只能通过已成功验证的读写访问进行读写;RPMB的数据可能会被重写,但不会被擦除。
Secure Write Protect Configuration Block 安全写保护配置块
- 类型:可读可写
- 大小:256 Bytes
- 描述:仅RPMB区域0支持安全写保护配置块。此块用于配置逻辑单元中的安全写保护区域。每个逻辑单元都有一个安全写保护配置块。每个安全写保护配置块最多有四个安全写保护条目。每个条目代表一个安全写保护区域。如果一个条目没有被使用,则相关区域应置为零。安全写保护配置块的结构如表12.1所示
- LUN
显示应用安全写保护的逻辑单元。有效值从0到bMaxNumberLU指定的LU数。
- DATA LENGTH
指定了安全写保护项的字节长度(0表示无项,16表示一项,32表示两项,48表示三项,64表示四项)。在写请求中,设备应忽略(DATA LENGTH+16)~ 255之间的字节,并将安全写保护配置块的这些字节设置为零。
- Secure Write Protect Entry 0 to Entry 3
安全写保护配置块可能包含条目0,条目0/1,条目0/1/2,或条目0/1/2/3。如果安全写保护配置块不包含任一条目,即DATA LENGTH=00h,在特定逻辑单元的所有条目将被移除;Table 12.2 定义了Secure Write Protect Entry的结构。
- WPF (Write Protect Flag)
0b Secure Write Protection is disabled.
逻辑单元可能允许写入介质,具体取决于逻辑单元实现的其他写抑制机制。
设备制造后,WPF应设置为零。
1b Secure Write Protection is enabled
WPF=1,逻辑单元应在LOGICAL BLOCK ADDRESS字段和NUMBER OF LOGICAL BLOCKS字段指示的范围内禁止LBA介质的更改。更改介质的命令应以CHECK CONDITION状态终止,the sense key设置为DATA PROTECT,the additional sense code设置为WRITE PROTECTED;
在启用写保护之前,包含缓存的逻辑单元应将所有缓存的逻辑块写入介质(例如,在响应SYNCHRONIZE CACHE命令时,LOGICAL BLOCK ADDRESS字段和NUMBER OF LOGICAL BLOCKS字段设置为安全写保护条目中指示的值)。
- LOGICAL BLOCK ADDRESS
安全写保护区域的第一个逻辑块的LBA;
- NUMBER OF LOGICAL BLOCKS
此字段指定属于安全写保护区域的连续逻辑块的数量。如果该字段设为0,则安全写保护应适用于整个逻辑单元。在这种情况下,只需配置Entry-0即可为整个逻辑单元启用安全写保护。
Algorithm and Key for MAC Calculation
使用[HMAC-SHA]中定义的HMAC SHA-256计算消息认证码(MAC)。HMAC SHA-256运算将认证密钥和消息作为输入,生成256位(32字节)的MAC,作为请求或响应的一部分嵌入到数据帧中。用于MAC计算的密钥始终是存储在目标RPMB区域中的256位认证密钥。用作MAC计算输入的消息是RPMB数据包中字段的连接。
RPMB Message Components
Nonce:host为requests生成的随机数,且会被RPMB引擎拷贝到response。
Request Message Types
Response Message Types
RPMB Operation Result
Bit[7] 写计数状态
1 无效写计数
0 有效写计数
NOTE 当写计数失效时括号里的值是有效的。
12.4.4 Implementation
RPMB Message
一个RPMB Message可能由一个或多个512byte的RPMB Message数据帧组成;
MAC Calculation
用作MAC运算输入的key是储存在device的32byte的认证密钥;MAC运算的输入是RPMB Message数据帧的连接,其中不包括 不包括byte[0:227], 也就是说, MAC是按照数据帧中byte[228:511]中的顺序来计算的。在请求或者响应中,如果有很多个数据包被发送,那么这些数据包的byte[228:511]按照发送的循序拼接一起,然后作为MAC计算的输入信息。仅最后一个数据帧计算生成的MAC是有效的;
RPMB Message Data Frame Delivery
RPMB Message数据帧的传送是通过SCSI 安全协议命令;
SECURITY PROTOCOL IN :传送请求信息给device;
SECURITY PROTOCOL OUT :向device请求response message;
12.4.5 SECURITY PROTOCOL IN/OUT Commands
[SPC]中定义的SECURITY PROTOCOL IN和SECURITY PROTOCOL OUT用于在主机和设备之间封装和传送任何安全协议的数据包,此数据包无需解释、分解或重新组装。
SECURITY PROTOCOL IN和SECURITY PROTOCOL OUT包含SECURITY PROTOCOL field。T10为JEDEC UFS应用分配了一个特殊的安全协议ID。SECURITY PROTOCOL IN/OUT cmd应把此ID当成唯一有效的Security Protocol ID。
SECURITY PROTOCOL = ECh (JEDEC Universal Flash Storage)
CDB format of SECURITY PROTOCOL IN/OUT commands
SECURITY PROTOCOL
- 00h:安全协议信息
根据[SPC],如果device支持SECURITY PROTOCOL IN cmd,SECURITY PROTOCOL field value of 00h应该被支持,被用来从逻辑单元传输安全协议相关信息;
在SECURITY PROTOCOL IN cmd里,SECURITY PROTOCOL field = 00h,SECURITY PROTOCOL SPECIFIC应当包含表12.11中定义的数值。
- ECh:JEDEC UFS应用分配的安全协议ID,当SECURITY PROTOCOL field = ECh时,
INC_512 bit应置0,ALLOCATION LENGTH or the TRANSFER LENGTH 表示传输的字节数
如果一个SECURITY PROTOCOL IN cmd的ALLOCATION LENGTH不是512的整数倍,这条命令应以CHECK CONDITION status终止;
如果一个SECURITY PROTOCOL OUT cmd的TRANSFER LENGTH 不是512的整数倍,这条命令应以CHECK CONDITION status终止;
SECURITY PROTOCOL SPECIFIC field:RPMB Protocol ID;
- 其他值是无效的
如果SECURITY PROTOCOL SPECIFIC是无效值或者对应RPMB区域没有使能,SECURITY PROTOCOL IN/OUT cmd应以CHECK CONDITION status终止,the sense key 置为ILLEGAL REQUEST,the additional sense code置为INVALID FIELD IN CDB。
仅RPMB区域0支持读、写安全写保护协议配置块;
Supported security protocols list description
根据[SPC],在SECURITY PROTOCOL IN cmd,如果SECURITY PROTOCOL = 00h且SECURITY PROTOCOL SPECIFIC field = 0000h,参数数据的格式应如表12.13所示。
RPMB well known logical unit 仅支持两种有效安全协议ID:Security protocol information (00h) and the JEDEC Universal Flash Storage (ECh) ,因此表12.13应以表12.14中定义的去执行
Certificate data description
在SECURITY PROTOCOL IN cmd,如果SECURITY PROTOCOL = 00h且SECURITY PROTOCOL SPECIFIC field = 0001h,参数数据的格式应如表12.15所示。
如果设备服务器没有要传输的证书,CERTIFICATE LENGTH应置0。因此,表12.15应以表12.16中定义的去执行。
12.4.6 RPMB Operations
Request Type Message Delivery
- 一次只能执行一个RPMB操作;
- initiator发送请求类型信息给RPMB well known logical unit,请求执行该操作;
- 为了传送请求类型信息,initiator发送SECURITY PROTOCOL OUT cmd,该命令的SECURITY PROTOCOL= ECh,SECURITY PROTOCOL SPECIFIC = 目标RPMB区;
- 对于一个authenticated data write request,请求信息中包含了要写到RPMB的数据,单个authenticated data write request传输的最大的数据=bRPMB_ReadWriteSize × 256 bytes,如果所需的数据大小超过此值,则应执行多个authenticated data write operations;
- 对于SECURITY PROTOCOL OUT cmd,host传输数据给device,COMMAND UPIU的Flags.W=1;
- 设备通过发送READY TO TRANSFER UPIU向主机显示,它已准备好接收请求类型的消息;如果the Expected Data Transfer Length为512字节,则Data Buffer Offset字段应置0,且Data Transfer Count字段应置为512。
- 单个READY TO TRANSFER UPIU 中请求的字节数不得大于bMaxDataOutSize指示的值。单个准备传输的UPIU可以请求传输一个或多个RPMB消息。
- 作为对每个READY TO TRANSFER UPIU的响应,主机将通过DATA OUT UPIU发送消息的请求部分。有关数据传输的详细信息,请参见10.7.13。
- 为了完成SECURITY PROTOCOL OUT cmd,device返回RESPONSE UPIU;
- The application client从Data Out Buffer加载RPMB Message,并且在SECURITY PROTOCOL SPECIFIC字段显示了目标RPMB区域;
Response Type Message Delivery
- initiator请求RPMB well known logical unit发送响应类型消息,以检索上一个操作的结果、检索写计数器、从RPMB数据区域检索数据或检索安全写保护配置块的内容。
- 为了请求响应类型的消息的传递,主机将发送一个SECURITY PROTOCOL IN cmd,其SECURITY PROTOCOL = ECh, SECURITY PROTOCOL SPECIFIC = 目标RPMB区;
- 响应消息中包含了从RPMB数据区读取的经过身份验证的数据;
- 对于SECURITY PROTOCOL IN cmd,数据从设备传输到主机,其COMMAND UPIU的Flags.R设为1。
- 表12.18定义了各种情况下UPIU命令中的Expected Data Transfer Length的字段值
- 设备返回请求的结果或数据在RPMB消息中。RPMB消息通过在数据阶段发送一个或多个DATA IN UPIU来传递。中单个DATA IN UPIU可以传递一个或多个RPMB消息。
- DATA IN UPIU中的数据大小不得超过bMaxDataInSize属性指示的值。
- 为了完成SECURITY PROTOCOL IN,设备发送一个带有状态的RESPONSE UPIU。
- 图12.3描述了一种响应类型的消息传递。应用程序客户端向一个CDB中指定的RPMB区域请求传输Data In Buffer中的RPMB消息;
Authentication Key Programming
Figure 12.4 — Authentication Key Programming Flow
Authentication Key programming由SECURITY PROTOCOL OUT cmd启动
- 启动器发送SECURITY PROTOCOL OUT命令,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB数据帧包括请求消息类型=0001h和身份验证密钥。
- 当认证密钥编程完成时,设备在状态响应中返回GOOD状态。
Authentication Key programming验证过程从发出SECURITY PROTOCOL OUT cmd开始
- 启动器发送SECURITY PROTOCOL OUT cmd,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB数据帧包含请求消息类型=0005h(结果读取请求)。
请注意,来自任何启动器的结果读取请求以外的任何请求都将覆盖RPMB区域的结果寄存器。
- 当操作结果可供检索时,设备在状态响应中返回GOOD状态。
启动器通过在SECURITY PROTOCOL IN cmd来检索操作结果
- SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。
- 设备返回包含响应消息类型=0100h和结果代码的RPMB数据帧。
- 如果Authentication Key programming失败,则返回的结果为“Write failure”(0005h)。如果身份验证密钥编程期间发生其他错误,则返回的结果为“General failure”(0001h)。
在相应的RPMB区域中编程身份验证密钥之前,无法访问RPMB数据区域。通过尝试向RPMB数据区写入/读取数据,可以检查设备的状态:如果未编程验证密钥,则响应中的结果字段消息将设置为“Authentication Key not yet programmed”
Read Counter Value
Figure 12.5 — Read Counter Value Flow
The Read Counter Value sequence由SECURITY PROTOCOL OUT cmd启动
- 启动器发送SECURITY PROTOCOL OUT命令,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB数据帧包括请求消息类型=0002h和the Nonce。
当收到GOOD状态响应后,主机通过向device发送SECURITY PROTOCOL IN cmd检索写计数值
- 启动器发送SECURITY PROTOCOL IN cmd,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。
- 设备返回RPMB数据帧,该数据帧包含响应消息类型=0200h、请求中接收的Nonce副本、写计数器值、MAC和the Result。
如果reading of the counter value失败,则返回的结果为“Read failure”(0006h/0086h)。
如果发生其他错误,则返回的结果为“General failure”(0001h/0081h)。
如果写计数值无效,返回结果中的bit[7]应置1;
Authenticated Data Write
Authenticated Data Write sequence由SECURITY PROTOCOL OUT cmd启动
- 启动器发送SECURITY PROTOCOL OUT命令,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB消息由一个或多个RPMB数据帧组成,每个数据帧包括请求消息类型=0003h、块数、地址、写计数、数据和MAC。
- 当device收到RPMB消息,它首先会检查写计数是否无效。如果写计数值无效,device返回的结果为“Write failure,write counter expired”(0085h)。RPMB数据区不会写入数据;
- 然后检查地址,如果地址等于或大于目标RPMB区域的大小(定义在RPMB Unit Descriptor的bRPMBRegion0Size – bRPMBRegion3Size parameter),device返回Address failure” (0004h)。RPMB数据区不会写入数据;
- 如果地址+块数的值大于目标RPMB区域的大小(定义在RPMB Unit Descriptor的bRPMBRegion0Size – bRPMBRegion3Size parameter),device返回Address failure” (0004h)。RPMB数据区不会写入数据;
- 如果块数大于bRPMB_ReadWriteSize, Authenticated Data Write操作失败,返回的结果为“General failure”(0001h)。
- 如果写计数有效,那么device根据请求类型,块数,写计数,地址和数据计算MAC,然后比较请求中的MAC,如果两个MAC不一样,device返回”Authentication failure” (0002h) 。RPMB数据区不会写入数据;
- 如果请求的MAC和device计算的MAC一样,device会比较请求中的写计数值和写计数器保存的写计数值,如果两者不一样,device返回”Counter failure” (0003h) 。RPMB数据区不会写入数据;
- 如果MAC和写计数的比较都成功,那么写请求认证通过。请求的数据会写在RPMB数据区;
- 如果写操作成功执行,写计数+1;
- 如果写失败,返回“Write failure” (0005h)。
- 如果在写过程发生了一些其他错误,device返回“General failure”(0001h) 。
- 如果authenticated data write request中块数大于1
MAC仅包含在最后一个RPMB消息数据帧中。在之前的所有数据帧中,MAC字段均为零。如果在之前的所有数据帧中MAC字段非零,则设备行为未定义。
在每个数据帧中,写入计数器指示当前计数器值,地址是start address of the full access(不是单个逻辑块的地址),块计数是块的总计数(不是块号)。
- Authenticated Data Write操作完成后,device可能对SECURITY PROTOCOL OUT返回GOOD状态,不管此操作成功与否;
Authenticated Data Write验证过程从发出SECURITY PROTOCOL OUT cmd开始
- 启动器发送SECURITY PROTOCOL OUT cmd,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB数据帧包含请求消息类型=0005h(结果读取请求)。
请注意,来自任何启动器的结果读取请求以外的任何请求都将覆盖RPMB区域的结果寄存器。
- 当操作结果可供检索时,设备在状态响应中返回GOOD状态。
启动器通过在SECURITY PROTOCOL IN cmd来检索操作结果
- SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。
设备返回RPMB数据帧,该数据帧包含响应消息类型=0300h、写计数(如果写操作成功,该值+1)、Authenticated data write请求中收到的地址、MAC、Authenticated Data Write操作的结果。
Authenticated Data Read
Figure 12.6 — Authenticated Data Read Flow
Authenticated Data Read sequence由SECURITY PROTOCOL OUT cmd启动
- 启动器发送SECURITY PROTOCOL OUT cmd,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。RPMB数据帧包括请求消息类型=0004h、the nonce、数据地址和块数。
- 当device收到这个请求,它首先会检查地址。如果地址等于或大于目标RPMB区域的大小(定义在RPMB Unit Descriptor的bRPMBRegion0Size – bRPMBRegion3Size parameter),device返回“Address failure”(0004h/0084h)。数据读取是无效的。
- 如果地址+块数的值大于目标RPMB区域的大小(定义在RPMB Unit Descriptor的bRPMBRegion0Size – bRPMBRegion3Size parameter),device返回Address failure” (0004h/0084h)。不会从RPMB数据区读取数据;
- 成功获取数据后,根据响应类型、nonce、地址、数据和结果计算MAC。如果MAC计算失败,则返回的结果为“Authentication failure ”(0002h/0082h)。
如果SECURITY PROTOCOL OUT cmd完成,返回GOOD状态,将发送SECURITY PROTOCOL IN cmd来检索数据
- 启动器发送SECURITY PROTOCOL OUT cmd,其中SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域。
- 设备返回RPMB数据帧,该数据帧包含响应消息类型=0400h、块数、请求中收到的nonce的副本、Authenticated Data Read请求中的地址、数据、MAC、和该操作的结果。
- 如果authenticated data read response的块数大于1,
MAC仅包含在最后一个RPMB消息数据帧中。在之前的所有数据帧中,MAC字段均为零。
在每个数据帧中,the Nonce字段包含收到的Nonce的副本,地址是start address of the full access(不是单个逻辑块的地址),块计数是块的总计数(不是块号)。
- Authenticated Data read完成后,不管成功与否,device可能对SECURITY PROTOCOL IN返回GOOD状态;
- 如果从设备内部的寻址位置获取数据失败,则返回的结果是“读取失败”(0006h/0086h)。如果在读取过程中发生其他错误,则返回的结果为“一般故障”(0001h/0081h)
Authenticated Secure Write Protect Configuration Block Write
仅RPMB区域0支持Authenticated Secure Write Protect Configuration Block write操作。如果向RPMB区域0以外的RPMB区域发出Authenticated Secure Write Protect Configuration Block write操作,则返回的结果为“General failure”(0001h/0081h)。
已验证的安全写保护配置块写入序列由SECURITY PROTOCOL OUT cmd启动。
- 启动器发送SECURITY PROTOCOL OUT cmd,SECURITY PROTOCOL字段设为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域0。
- 如果INC_512位和TRANSFER LENGTH字段未分别设置为零和512,则命令应以CHECK CONDITION状态终止,the additional sense code设为ILLEGAL REQUEST ,the additional sense code设为CDB中的INVALID FIELD IN CDB。
- SECURITY PROTOCOL OUT cmd传输一个RPMB消息数据帧,其中包含数据字段中的安全写保护配置块。LUN字段(数据帧的byte228)指示逻辑单元特定的安全写保护配置块。
- RPMB数据帧的其他字段设置如下所示:Request Message Type = 0006h, Result = 0000h, Block Count = 0001h, Address = 0000h, Write Counter = current counter value, Nonce = 00...0h, and MAC = see 12.4.4.2
- 当设备接收到RPMB消息数据帧时,它首先检查写计数是否无效。如果写计数无效,则设备将结果设置为“Write failure, write counter expired” (0085h)。安全写保护配置块不会被更新。
- 如果写计数有效,则设备将通过请求类型、块数、写计数、地址和数据计算MAC,并将其与请求中的MAC进行比较。如果两个MAC不同,则设备会将结果设置为“Authentication failure”(0002h)。安全写保护配置块不会被更新。
- 如果请求中的MAC和计算出的MAC相等,则设备会将请求中的写计数与存储在设备中的写计数进行比较。如果两个值不同,则设备将结果设置为“Counter failure”(0003h)。安全写保护配置块不会被更新。
- 如果MAC和写计数比较成功,则写入请求被认为是经过身份验证的。
- 如果LUN字段显示逻辑单元的bLUWriteProtect值为非零,则设备会将结果设置为“Secure Write Protection not applicable”(000Ah)。安全写保护配置块不会被更新。
- device返回“Invalid Secure Write Protect Block Configuration parameter”(0009h),且一个或多个如下条件发生,则它不会更新写保护配置块
LUN字段无效:大于bMaxNumberLU指定的值,或者逻辑单元未使能(bLUEnable=00h)。
DATA LENGTH设置为与以下值不同的值:0、16、32、48、64。
安全写保护项中的LOGICAL BLOCK ADDRESS超过逻辑单元容量,
LOGICAL BLOCK ADDRESS加上安全写保护条目中的NUMBER OF LOGICAL BLOCKS超过逻辑单元容量,
两个或多个安全写保护条目指定重叠区域,
通过此请求,在整个设备中设置的安全写保护区域的数量将增加到大于bNumSecureWPArea所示的值。
- 如果写入过程中发生其他错误,则返回的结果为“Secure Write Protect Configuration Block access failure”(0008h)。安全写保护配置块不会被更新。
- 如果未发生错误,则更新安全写保护配置块,覆盖以前的配置,并将写计数+1。
无论经过身份验证的安全写保护配置块写入是否成功,设备都可能响应SECURITY PROTOCOL OUT cmd返回GOOD状态。
可以通过检索RPMB的结果寄存器来检查数据编程的成功性。
验证过程从发出SECURITY PROTOCOL OUT cmd开始。
- 启动器发送SECURITY PROTOCOL OUT cmd,SECURITY PROTOCOL字段设为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域0。RPMB数据帧包含请求消息类型=0005h(结果读取请求)。请注意,来自任何启动器的结果读取请求以外的任何请求都将覆盖RPMB区域的结果寄存器。
- 当操作结果可供检索时,设备返回“GOOD”状态。
启动器通过发出SECURITY PROTOCOL IN cmd来检索操作结果。
- SECURITY PROTOCOL字段设为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域0
设备返回RPMB数据帧,其中包含响应消息类型=0600h、递增的写计数值、MAC和经过身份验证的安全写保护配置块写入操作的结果。
Authenticated Secure Write Protect Configuration Block Read
Figure 12.8 — Authenticated Secure Write Protect Configuration Block Read Flow
仅RPMB区域0支持经过身份验证的安全写保护配置块读取操作。如果向RPMB区域0以外的RPMB区域发出经过身份验证的安全写保护配置块读取操作,则返回的结果为“General failure”(0001h/0081h)。
已验证的安全写保护配置块读取序列由SECURITY PROTOCOL OUT cmd启动。
- 启动器发送SECURITY PROTOCOL OUT cmd,SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域0;
- 如果INC_512位和TRANSFER LENGTH字段未分别设置为零和512,则命令应以CHECK CONDITION状态终止,the additional sense code设为ILLEGAL REQUEST ,the additional sense code设为CDB中的INVALID FIELD IN CDB。
- SECURITY PROTOCOL OUT cmd传输一个RPMB消息数据帧,该数据帧在数据字段中包含一个LUN值(数据帧的byte228)。将返回的安全写保护配置块在LUN字段指示的特定逻辑单元。
- 主机传送给设备的RPMB数据帧包括Request Message Type = 0007h, Block Count=0001h, Address=0000h, the Data and Nonce 。在此请求中,LUN是数据字段中唯一相关的字节,所有其他字节都应被视为保留字节,应忽略。
- 如果LUN字段大于bMaxNumberLU指定的值,或逻辑单元未使能(bLUEnable=00h),则设备会将结果设置为“Invalid Secure Write Protect Block Configuration parameter”(0009h/0089h)
- 如果LUN字段表示逻辑单元的bLUWriteProtect设置为非零值,则设备会将结果设置为“Secure Write Protection not applicable”(000Ah/008Ah)。
- 成功获取安全写保护配置块后,根据响应类型、nonce、地址、数据和结果计算MAC。如果MAC计算失败,则返回的结果为“Authentication failure”(0002h/0082h)。
如果SECURITY PROTOCOL OUT cmd以GOOD状态完成,则可以通过发送SECURITY PROTOCOL IN cmd来检索SECURITY Write Protect配置块。
- 启动器发送SECURITY PROTOCOL IN cmd时,SECURITY PROTOCOL字段设置为ECh,并在SECURITY PROTOCOL SPECIFIC字段中指示RPMB区域0,其中INC_512位和ALLOCATION LENGTH字段为512字节。
设备返回一个RPMB数据帧,其响应消息类型=0700h、块计数、请求中接收到的nonce的副本、数据字段中安全写保护配置块的内容、MAC和结果。
如果在读取过程中,从设备内部的寻址位置获取数据失败或发生其他错误,则返回的结果是“Secure Write Protect Configuration Block access failure”(0008h/0088h)。
和eMMC的差异
1 分区数
emmc:1个
ufs:4个,RPMB region 0~ RPMB region3
2 分区大小
emmc:128Kbytes x BOOT_SIZE_MULT,[128KB~16M]
ufs:128KB的整数倍,[128KB~16MB]
3 写保护类型
4 RPMB Operation
UFS多了两个操作:Request Type Message Delivery、Response Type Message Delivery
5 RPMB Operation Results
emmc:
ufs:
6 packet format
emmc:
ufs:
7 MAC的计算
emmc:
用作MAC计算输入的信息是数据帧中字段的连接,其中不包括 stuff bytes, theMAC itself, start bit, CRC16, and end bit。 也就是说, MAC是按照数据帧中bytes[283:0]中的顺序来计算的。在请求或者响应中,如果有很多个数据包被发送,那么这些数据包的bytes [283:0]按照发送的循序拼接一起,然后作为MAC计算的输入信息。MAC只会放在最后一个数据包中。
ufs:
MAC运算的输入是RPMB Message数据帧的连接,其中不包括 不包括byte[0:227], 也就是说, MAC是按照数据帧中byte[228:511]中的顺序来计算的。在请求或者响应中,如果有很多个数据包被发送,那么这些数据包的byte[228:511]按照发送的循序拼接一起,然后作为MAC计算的输入信息。仅最后一个数据帧计算生成的MAC是有效的;
8 同时可操作的RPMB
emmc:只有1RPMB
ufs:每个RPMB区域可以在任何给定时间点处理单个RPMB认证操作;仅RPMB区域0支持经过身份验证的安全写保护配置块读写操作