12 UFS SECURITY
本节总结了 UFS 设备安全特性和实现细节。 这些特性包括:安全模式操作、 data and register protection、RPMB 和复位。(遗留 11.3 READ CAPACITY 11.4 Mode Pages)
12.1 UFS Security Feature Support Requirements
本标准中定义的安全功能对所有设备都是强制性的。 定义了以下安全特性:重放保护内存块 (RPMB)、安全模式和不同类型的逻辑单元写保护。
12.2 Secure Mode
12.2.1 Description
UFS 设备将被用于存储用户的个人或公司数据信息。 UFS 设备提供了一种方式,在请求时,从设备中永久删除数据的方法,确保无法在内存设备上使用逆向工程来检索数据。UFS 设备应支持安全和不安全的操作模式。 在安全模式下,所有导致设备上的信息,删除或报废的操作都将以安全方式清除此信息,如 12.2.2.1,安全删除中所述。安全模式应用于逻辑单元级别,因此不同的逻辑单元可能有不同的安全模式。
12.2.2 Requirements
12.2.2.1 Secure Removal
从设备中安全删除数据的方式取决于用于实现 UFS 设备的内存技术类型。 适用于本规范时实现的大多数内存类型的三种常用方法是:
1) 设备控制器应向寻址位置发出擦除操作。
本节总结了 UFS 设备安全特性和实现细节。 这些特性包括:安全模式操作、 data and register protection、RPMB 和复位。(遗留 11.3 READ CAPACITY 11.4 Mode Pages)
12.1 UFS Security Feature Support Requirements
本标准中定义的安全功能对所有设备都是强制性的。 定义了以下安全特性:重放保护内存块 (RPMB)、安全模式和不同类型的逻辑单元写保护。
12.2 Secure Mode
12.2.1 Description
UFS 设备将被用于存储用户的个人或公司数据信息。 UFS 设备提供了一种方式,在请求时,从设备中永久删除数据的方法,确保无法在内存设备上使用逆向工程来检索数据。UFS 设备应支持安全和不安全的操作模式。 在安全模式下,所有导致设备上的信息,删除或报废的操作都将以安全方式清除此信息,如 12.2.2.1,安全删除中所述。安全模式应用于逻辑单元级别,因此不同的逻辑单元可能有不同的安全模式。
12.2.2 Requirements
12.2.2.1 Secure Removal
从设备中安全删除数据的方式取决于用于实现 UFS 设备的内存技术类型。 适用于本规范时实现的大多数内存类型的三种常用方法是:
1) 设备控制器应向寻址位置发出擦除操作。
2) 设备控制器应使用单个字符覆盖寻址位置并擦除设备。
3) 设备控制器应使用字符、其补码、然后用随机字符覆盖寻址位置
UFS 设备应支持至少一种安全移除方法。
12.2.2.2 Erase Operation
UFS 设备应支持至少一种安全移除方法。
12.2.2.2 Erase Operation
Erase是将数据从映射的地址空间移动到未映射的地址空间的操作。 应用擦除的映射地址空间中的区域将设置为擦除值为零。 此操作对设备需要对未映射地址空间中的数据执行什么操作没有任何要求。 执行擦除后,主机上的软件应该无法检索已擦除的数据。
12.2.2.3 Discard Operation
Discard是擦除功能的非安全变体。 Discard和 Erase之间的区别是设备行为,其中设备不需要保证主机不会从一个或多个标记为 Discard的 LBA 中检索原始数据,当读取操作指向 LBA 时。
12.2.2.4 Purge Operation
Purge操作在未映射的地址空间上运行。 执行该操作时,它会从未映射的地址空间中删除所有数据。 这是根据设备描述符(即 Device Descriptor)的 bSecureRemovalType 参数值完成的。 此模式允许主机系统防止芯片级攻击。
12.2.2.3 Discard Operation
Discard是擦除功能的非安全变体。 Discard和 Erase之间的区别是设备行为,其中设备不需要保证主机不会从一个或多个标记为 Discard的 LBA 中检索原始数据,当读取操作指向 LBA 时。
12.2.2.4 Purge Operation
Purge操作在未映射的地址空间上运行。 执行该操作时,它会从未映射的地址空间中删除所有数据。 这是根据设备描述符(即 Device Descriptor)的 bSecureRemovalType 参数值完成的。 此模式允许主机系统防止芯片级攻击。
12.2.3 Implementation
12.2.3.1 Erase
Erase功能使用 UNMAP 命令实现,如果 Unit Descriptor 中的 bProvisioningType 参数设置为 03h (TPRZ = 1的情况),则启用该功能。当 READ CAPACITY(16) 参数数据中的 TPRZ 位设置为 1 时,设备行为应符合 [SBC] 中的 UNMAP 定义。
如果 UNMAP操作完成且没有错误,则 UNMAP 命令会导致映射的 LBA 从映射状态转换为解除分配状态。
由于启用 Erase功能时 TPRZ 位设置为 1,因此指定已释放 LBA 的 READ 命令,应返回数据都是 0。
设备服务器可以将已解除分配的 LBA 保持在解除分配状态,直到指定 LBA 完成且无错误的写入操作。
或者,设备服务器可以随时将解除分配的 LBA 从解除分配状态转换为映射状态(自主状态转换)。 对于 UFS,如果 TPRZ 位设置为 1,并且发生到映射状态的自主转换,则 LBA 应映射到包含所有位设置为零的数据的物理块。
在可能的情况下,要擦除的 LBA 可以与 dEraseBlockSize 参数值的倍数对齐,以最大限度地减少性能影响。 dEraseBlockSize 是包含在单元描述符中的参数。
12.2.3.2 Discard
Discard功能使用 UNMAP 命令实现,如果 Unit Descriptor 中的 bProvisioningType 参数设置为 02h (TPRZ = 0),则启用该功能。 当 READ CAPACITY(16) 参数数据中的 TPRZ 位设置为零时,设备行为应符合 [SBC] 中的 UNMAP 定义。
如果取消映射操作完成且没有错误,则 UNMAP 命令会导致映射的 LBA 从映射状态转换为解除分配状态。
由于如果启用 Discard功能,则 TPRZ 位设置为零,因此指定已释放 LBA 的 READ 命令可能会返回任何数据。
设备服务器可以将已解除分配的 LBA 保持在解除分配状态,直到指定 LBA 完成且无错误的写入操作。
或者,设备服务器可以随时将解除分配的 LBA 从解除分配状态转换为映射状态(自主状态转换)。 对于 UFS,如果 TPRZ 位设置为零并且发生到映射状态的自主转换,则 LBA 应映射到包含任何数据的物理块,包括 UNMAP 操作之前的原始数据。
在可能的情况下,要丢弃的 LBA 可能与 dEraseBlockSize 的倍数对齐,以尽量减少对性能的影响。 dEraseBlockSize 是单元描述符中包含的参数
12.2.3.3 Purge operation
Purge 操作是通过带有属性和标志的 Query Functions实现的。 特别是,fPurgeEnable 标志允许启用或禁用清除操作的执行,bPurgeStatus 属性提供有关操作状态的信息。
fPurgeEnable 标志
12.2.3.1 Erase
Erase功能使用 UNMAP 命令实现,如果 Unit Descriptor 中的 bProvisioningType 参数设置为 03h (TPRZ = 1的情况),则启用该功能。当 READ CAPACITY(16) 参数数据中的 TPRZ 位设置为 1 时,设备行为应符合 [SBC] 中的 UNMAP 定义。
如果 UNMAP操作完成且没有错误,则 UNMAP 命令会导致映射的 LBA 从映射状态转换为解除分配状态。
由于启用 Erase功能时 TPRZ 位设置为 1,因此指定已释放 LBA 的 READ 命令,应返回数据都是 0。
设备服务器可以将已解除分配的 LBA 保持在解除分配状态,直到指定 LBA 完成且无错误的写入操作。
或者,设备服务器可以随时将解除分配的 LBA 从解除分配状态转换为映射状态(自主状态转换)。 对于 UFS,如果 TPRZ 位设置为 1,并且发生到映射状态的自主转换,则 LBA 应映射到包含所有位设置为零的数据的物理块。
在可能的情况下,要擦除的 LBA 可以与 dEraseBlockSize 参数值的倍数对齐,以最大限度地减少性能影响。 dEraseBlockSize 是包含在单元描述符中的参数。
12.2.3.2 Discard
Discard功能使用 UNMAP 命令实现,如果 Unit Descriptor 中的 bProvisioningType 参数设置为 02h (TPRZ = 0),则启用该功能。 当 READ CAPACITY(16) 参数数据中的 TPRZ 位设置为零时,设备行为应符合 [SBC] 中的 UNMAP 定义。
如果取消映射操作完成且没有错误,则 UNMAP 命令会导致映射的 LBA 从映射状态转换为解除分配状态。
由于如果启用 Discard功能,则 TPRZ 位设置为零,因此指定已释放 LBA 的 READ 命令可能会返回任何数据。
设备服务器可以将已解除分配的 LBA 保持在解除分配状态,直到指定 LBA 完成且无错误的写入操作。
或者,设备服务器可以随时将解除分配的 LBA 从解除分配状态转换为映射状态(自主状态转换)。 对于 UFS,如果 TPRZ 位设置为零并且发生到映射状态的自主转换,则 LBA 应映射到包含任何数据的物理块,包括 UNMAP 操作之前的原始数据。
在可能的情况下,要丢弃的 LBA 可能与 dEraseBlockSize 的倍数对齐,以尽量减少对性能的影响。 dEraseBlockSize 是单元描述符中包含的参数
12.2.3.3 Purge operation
Purge 操作是通过带有属性和标志的 Query Functions实现的。 特别是,fPurgeEnable 标志允许启用或禁用清除操作的执行,bPurgeStatus 属性提供有关操作状态的信息。
fPurgeEnable 标志
o 只写易失标志,上电或复位后置零。
o 当此标志等于 1 时启用清除操作,否则禁用。
o 该标志只能在所有逻辑单元的命令队列为空时设置。
o 当操作完成或出现错误时,UFS 设备会自动清除此标志 情况发生。
o 该标志可由主机清除以中断正在进行的清除操作
bPurgeStatus 属性
bPurgeStatus 属性
o 只读属性。
o 此属性可以设置为以下值之一:
- 00h:空闲(
Purge操作
disabled)。
- 01h:
Purge操作正在进行。
- 02h:主机过早停止
Purge操作。
- 03h:
Purge操作成功完成。
- 04h:由于逻辑单元队列不为空,
Purge操作失败
- 05h:
Purge操作一般故障。
其他值保留,不得设置。
o bPurgeStatus 在上电或复位后设置为 00h(空闲)
o 当主机启用 Purge操作时,将 fPurgeEnable 标志设置为 1,并且如果所有逻辑单元命令队列为空,则 bPurgeStatus 将设置为 01h 以指示 Purge操作正在进行中。 如果操作成功完成,bPurgeStatus 应设置为 03h,如果发生故障,则应设置为 05h。
o 如果主机在至少有一个命令队列不为空的逻辑单元时尝试启用 Purge操作,则 fPurgeEnable 标志的设置将失败,QUERY RESPONSE UPIP 中的查询响应字段应设置为 FFh(“General Failure” ), Purge操作不应开始,bPurgeStatus 应设置为 04h。
o 如果主机将 fPurgeEnable 标志设置为零而中断正在进行的 Purge操作,则 bPurgeStatus 应设置为 02h。
o 当 bPurgeStatus 等于值 02h、03h、04h 或 05h 时,第一次读取 bPurgeStatus 时应自动 cleared为 00h(空闲)。 bPurgeStatus 值 00h 和 01h 不应因读取而被修改。
如果正在进行 Purge操作 (bPurgeStatus = 01h),则发送到任何逻辑单元或 RPMB well know的逻辑单元的命令将失败。 设备应返回检测键“NOT READY”以显示命令失败,因为正在进行 Purge操作。 当 Purge操作正在进行时,可以读取描述符、属性和标志,并且只可以写入 fPurgeEnable 标志。 写入描述符、属性或标志(fPurgeEnable 除外)的查询请求,应在 Query Response 字段设置为“ General Failure”,然后终止请求。
如果主机在 Purge操作正在进行时需要紧急执行命令,它可能会中断 Purge操作。 特别是,在发出任何命令之前,主机将 fPurgeEnable 标志设置为零,等到设备中断操作,然后将 bPurgeStatus 属性设置为 02h( Purge操作提前停止)。
如果发生电源故障,fPurgeEnable 标志和 bPurgeStatus 属性应重置为零。 在这种情况下,设备不会指示操作失败。图 12-1 显示了 Purge 操作状态机。 有两种状态:“空闲”和“Purge 操作”。 进行中”。上电后,Purge操作状态为“空闲”,Purge操作被禁用。 为了启用Purge操作的执行,主机将 fPurgeEnable 标志设置,发送 QUERY REQUEST UPIU。 如果设置成功执行,状态将转换为“Purge Op. 进行中”,Purge操作将开始 (bPurgeStatus = 01h)。 如果至少有一个逻辑单元的命令队列不为空,则 fPurgeEnable 标志的设置将失败,Purge操作将不会开始,状态应保持“空闲”,并且 bPurgeStatus 应设置为 04h。 Purge操作完成后,状态会自动转换为“Idle”,如果操作成功,bPurgeStatus 设置为 03h,如果失败则设置为 05h。
其他值保留,不得设置。
o bPurgeStatus 在上电或复位后设置为 00h(空闲)
o 当主机启用 Purge操作时,将 fPurgeEnable 标志设置为 1,并且如果所有逻辑单元命令队列为空,则 bPurgeStatus 将设置为 01h 以指示 Purge操作正在进行中。 如果操作成功完成,bPurgeStatus 应设置为 03h,如果发生故障,则应设置为 05h。
o 如果主机在至少有一个命令队列不为空的逻辑单元时尝试启用 Purge操作,则 fPurgeEnable 标志的设置将失败,QUERY RESPONSE UPIP 中的查询响应字段应设置为 FFh(“General Failure” ), Purge操作不应开始,bPurgeStatus 应设置为 04h。
o 如果主机将 fPurgeEnable 标志设置为零而中断正在进行的 Purge操作,则 bPurgeStatus 应设置为 02h。
o 当 bPurgeStatus 等于值 02h、03h、04h 或 05h 时,第一次读取 bPurgeStatus 时应自动 cleared为 00h(空闲)。 bPurgeStatus 值 00h 和 01h 不应因读取而被修改。
如果正在进行 Purge操作 (bPurgeStatus = 01h),则发送到任何逻辑单元或 RPMB well know的逻辑单元的命令将失败。 设备应返回检测键“NOT READY”以显示命令失败,因为正在进行 Purge操作。 当 Purge操作正在进行时,可以读取描述符、属性和标志,并且只可以写入 fPurgeEnable 标志。 写入描述符、属性或标志(fPurgeEnable 除外)的查询请求,应在 Query Response 字段设置为“ General Failure”,然后终止请求。
如果主机在 Purge操作正在进行时需要紧急执行命令,它可能会中断 Purge操作。 特别是,在发出任何命令之前,主机将 fPurgeEnable 标志设置为零,等到设备中断操作,然后将 bPurgeStatus 属性设置为 02h( Purge操作提前停止)。
如果发生电源故障,fPurgeEnable 标志和 bPurgeStatus 属性应重置为零。 在这种情况下,设备不会指示操作失败。图 12-1 显示了 Purge 操作状态机。 有两种状态:“空闲”和“Purge 操作”。 进行中”。上电后,Purge操作状态为“空闲”,Purge操作被禁用。 为了启用Purge操作的执行,主机将 fPurgeEnable 标志设置,发送 QUERY REQUEST UPIU。 如果设置成功执行,状态将转换为“Purge Op. 进行中”,Purge操作将开始 (bPurgeStatus = 01h)。 如果至少有一个逻辑单元的命令队列不为空,则 fPurgeEnable 标志的设置将失败,Purge操作将不会开始,状态应保持“空闲”,并且 bPurgeStatus 应设置为 04h。 Purge操作完成后,状态会自动转换为“Idle”,如果操作成功,bPurgeStatus 设置为 03h,如果失败则设置为 05h。
![](https://i-blog.csdnimg.cn/blog_migrate/56d8c51133937589ce88f1cb7dfb5e97.png)
主机可以中断正在进行的清除操作以清除 fPurgeEnable 标志,当操作被中断时,状态将转换为“空闲”并且 bPurgeStatus 将设置为 02h。
12.2.3.4 Wipe Device
向所有启用的逻辑单元发出 FORMAT UNIT 命令来完成擦除设备操作。 如果使用 12.3 设备数据保护中描述的方法之一对逻辑单元进行写保护,或者如果 Control Mode Page(11.4 Mode Pages)中的 SWP 位为 1,则 FORMAT UNIT 命令将失败并且介质的内容不应更改。发送到 Device well known逻辑单元的 FORMAT UNIT 命令请求设备格式化除 RPMB well known逻辑单元之外的所有启用的逻辑单元。 当 FORMAT UNIT 命令被发送到 Device well known logic unit 时,如果任何逻辑单元被写保护,FORMAT UNIT 命令将失败并且媒体的内容不会被改变。
FORMAT UNIT 命令的字段应按如下所述进行设置:
格式数据 (FMTDATA) 位应设置为零以指定不提供参数列表。
向所有启用的逻辑单元发出 FORMAT UNIT 命令来完成擦除设备操作。 如果使用 12.3 设备数据保护中描述的方法之一对逻辑单元进行写保护,或者如果 Control Mode Page(11.4 Mode Pages)中的 SWP 位为 1,则 FORMAT UNIT 命令将失败并且介质的内容不应更改。发送到 Device well known逻辑单元的 FORMAT UNIT 命令请求设备格式化除 RPMB well known逻辑单元之外的所有启用的逻辑单元。 当 FORMAT UNIT 命令被发送到 Device well known logic unit 时,如果任何逻辑单元被写保护,FORMAT UNIT 命令将失败并且媒体的内容不会被改变。
FORMAT UNIT 命令的字段应按如下所述进行设置:
格式数据 (FMTDATA) 位应设置为零以指定不提供参数列表。
DEFECT LIST FORMAT应设置为 00b。
格式保护信息 (FMTPINFO) 应设置为 00b。
The vendor specific byte shall be set to 00h. 应设置为 00h。
由于 FMTDATA 设置为零,UFS 设备应忽略 CMPLST 和 LONGLIST 位。
由于 FMTDATA 设置为零,UFS 设备应忽略 CMPLST 和 LONGLIST 位。
12.2.3.5 bProvisioningType Parameter
可以使用单元描述符的 bProvisioningType 参数在安全模式下配置逻辑单元。 此参数允许启用 thin provisioning并在 READ CAPACITY (11.3.9)参数数据中定义 TPRZ 位值。如果启用 thin provisioning并且 TPRZ 位等于 1,则启用安全模式。 在此模式下,所有操作都应使用设备描述符中bSecureRemovalType 参数定义的模式执行。 整个设备只能定义一种移除类型。
bProvisioningType parameter can be set to the following values:
00h:禁用精简配置
可以使用单元描述符的 bProvisioningType 参数在安全模式下配置逻辑单元。 此参数允许启用 thin provisioning并在 READ CAPACITY (11.3.9)参数数据中定义 TPRZ 位值。如果启用 thin provisioning并且 TPRZ 位等于 1,则启用安全模式。 在此模式下,所有操作都应使用设备描述符中bSecureRemovalType 参数定义的模式执行。 整个设备只能定义一种移除类型。
bProvisioningType parameter can be set to the following values:
00h:禁用精简配置
02h:启用精简配置并将 TPRZ 设置为零
03h:启用精简配置并将 TPRZ 设置为 1
TPRZ 位值为零表示设备处于正常模式。 与所有其他单元描述符可配置参数一样,bProvisioningType 值是通过写入配置描述符来设置的。
设备描述符中的 bSecureRemovalType 参数定义了在 Purge操作期间如何从物理内存中删除信息。 该参数可以在系统集成期间写入配置描述符时设置。 bSecureRemovalType 值定义如下:
“03h”的值将导致使用供应商定义的机制删除信息。
TPRZ 位值为零表示设备处于正常模式。 与所有其他单元描述符可配置参数一样,bProvisioningType 值是通过写入配置描述符来设置的。
设备描述符中的 bSecureRemovalType 参数定义了在 Purge操作期间如何从物理内存中删除信息。 该参数可以在系统集成期间写入配置描述符时设置。 bSecureRemovalType 值定义如下:
“03h”的值将导致使用供应商定义的机制删除信息。
'02h' 的值将导致通过用字符、其补码,写随机字符覆盖寻址位置来删除所有信息。
“01h”的值将导致通过用单个字符覆盖寻址位置然后擦除来删除所有信息。
“00h”的值将导致通过擦除物理内存(默认)删除所有信息。
其他值保留供将来使用,不得设置。
综上,首先是
bProvisioningType可以确定是否启用安全模式,即TPRZ是否等于0,对LBA的擦除,分别是
Erase和Discard(非安全版本),对非LBA的擦除有Purge操作,在安全模式下bSecureRemovalType的值决定了
Purge操作的具体方法。