依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。
所在专栏 《元带你学: eMMC协议详解》
内容摘要
全文 4100 字, 内容摘要
1. 锁定与解锁的概念?
2. 设置密码的方法和注意点?
3. 重置密码的方法和注意点?
4. 锁定设备和解锁设备的方法?
5. 强制擦除是怎么做到的?
信息安全的三个基本目标是机密性、完整性和可用性:
机密性意味着应该保密的信息只能被授权的实体阅读和理解。其他未经访问授权不能阅读或理解机密信息。
完整性是指能够确保信息不受未经授权的更改、修改或删除的能力。信息的完整性包括信息的来源、完整性和正确性(使用标识和身份验证等方法)。
可用性意味着信息始终可供授权用户使用
eMMC安全方案有哪些呢? eMMC设备包含多种数据保护和安全功能,包括:写保护、密码锁定/解锁和RPMB。
本讲将专注于讨论设备锁定(Lock) / 解锁(Unlock) 。
密码锁定功能旨在保护用户区域(只有User Area才有密码锁定功能)内容的任何类型访问(读、写或擦除),主机仍然可以访问引导分区、RPMB和常规分区区域。密码锁定/解锁功能是使用CMD42设置的,启用密码锁定后,主机可以执行某些操作(包括重置、初始化、选择、查询状态等)但不能读、写、擦设备用户区域的任何数据。这种保护对于防止数据被盗很有用,但是它也限制了任何人(包括数据所有者)可以使用设备,因为不允许(任何类型)访问受保护的数据。
密码保护功能使主机能够通过提供密码来锁定设备,稍后将使用该密码解锁设备。密码及其大小分别保存在128位PWD和8位PWD_LEN寄存器中。这些寄存器是非易失性的,因此电源周期不会擦除它们。
通过在扩展CSD中设置永久密码禁用位(EXT_CSD字节[171]中的PERM_PSWD_DIS位),可以永久禁用密码保护功能。如果主机试图在设置了密码的e-MMC上,想永久禁用CMD42功能,操作将失败,并且ERROR (bit 19)错误位将由设备状态寄存器中的内存设备设置。如果不需要,建议在设备上禁用密码保护功能,以防止无意或恶意设置密码保护功能。在永久禁用密码的设备上尝试使用密码保护功能(CMD42)将失败,并且将在状态寄存器中设置LOCK_UNLOCK_FAILED (bit 24)错误位。
被锁定的设备响应(并执行)“基本”命令类(0类)和“锁定设备”命令类中的所有命令。因此,允许主机进行重置、初始化、选择、查询状态等操作,但不能访问设备上的数据。如果之前设置过密码(PWD_LEN的值不是0),设备上电后会自动锁定。
在v4.3及更高版本的设备上,Lock命令只能应用于用户数据区。因此,在向设备发出Lock命令后,主机仍然可以访问引导分区、RPMB和General分区区域。与现有的CSD和CID寄存器写命令类似,lock/unlock命令仅在“传输状态”下可用。这意味着它不包括地址参数,并且在使用它之前必须选择Device。设备锁/解锁命令(CMD42)具有普通单块写命令的结构和总线事务类型。传输的数据块包括命令所需的所有信息(密码设置模式、PWD本身、设备锁定/解锁等)。下表描述了命令数据块的结构。CMD42命令只能在设备工作在单数据速率模式下使用。在双数据速率模式下,CMD42是一个非法命令。
数据块大小由主机在发送设备锁/解锁命令之前定义。这将允许不同的密码大小。以下段落定义了各种锁/解锁命令序列。
(1) 选择设备(CMD7),如果之前没有选择的话。
(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及新密码的字节数。
(3) 发送设备锁定/解锁命令(CMD42),在数据线上带合适的数据块大小,包括16位CRC。数据块应该显示模式(SET_PWD)、长度(PWD_LEN)和密码本身。
小贴士
(1) 选择设备(CMD7),如果之前没有选择的话
(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及当前使用的密码的字节数。
(3) 发送设备锁定/解锁命令(CMD42),并在数据线上发送适当的数据块大小,包括16位CRC。数据块应该指示模式CLR_PWD,长度(PWD_LEN)和密码(PWD)本身(LOCK/UNLOCK位不关心)。
(1) 选择设备(CMD7),如果之前没有选择的话
(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及当前使用的密码的字节数。
(3) 发送设备锁定/解锁命令(CMD42),并在数据线上发送适当的数据块大小,包括16位CRC。数据块应该显示模式LOCK,长度(PWD_LEN)和密码(PWD)本身。
(4) 如果PWD内容等于发送的密码,说明密码正确,则设备将被锁定,并且在状态寄存器中设置Device-locked状态位。如果密码不正确,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。
注意: 设置密码和锁定设备的顺序可以相同。在这种情况下,主机应执行设置密码所需的所有步骤(如上所述),包括在发送新密码命令时设置位锁。如果之前设置过密码(PWD_LEN不是“0”),那么设备上电复位后会自动锁定。
如果试图锁定一个被锁定的设备,或者锁定一个没有密码的设备,将会失败,并且会在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。
步骤如下:
(1) 选择设备(CMD7),如果之前没有选择的话。
(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及当前使用的密码的字节数。
(3) 发送设备锁定/解锁命令(CMD42),并在数据线上发送适当的数据块大小,包括16位CRC。数据块应该显示模式UNLOCK,长度(PWD_LEN)和密码(PWD)本身。
说明解锁只针对当前的上电周期内有效。只要PWD未清除,设备将在下次上电时自动锁定。永久解锁设备的唯一方法是清除密码。
对未锁定的设备进行解锁将回报失败,并且会在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。
如果用户忘记了密码(PWD内容) ,怎么办???
则可以擦除所有设备数据内容以及PWD内容。此操作称为强制擦除。
具体步骤为
(1) 选择设备(CMD7),如果之前没有选择的话。
(2)定义块长度(CMD16)为1字节(8位设备锁定/解锁命令)。
(3)发送设备锁定/解锁命令(CMD42),并在数据线上发送相应的1字节数据块,包括16位CRC。数据块应该指示模式ERASE (ERASE位应该是唯一设置的位, 其他位千万别设置)。
如果ERASE位不是data字段中唯一的位,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位,并拒绝擦除请求。
如果该命令被接受,那么所有的设备内容将被擦除,包括PWD和PWD_LEN寄存器内容,锁定的设备将被解锁。此外,如果设备是临时写保护,它将不受保护(写使能),CSD中的临时写保护位和所有临时写保护组将被清除。
对于上电保护或永久写保护的写保护组,强制擦除命令将失败(Device保持锁定状态),并且在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。
在未锁定的设备上强制擦除将失败,并且在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。
如果在永久写保护介质上发出强制擦除命令,该命令将失败(设备保持锁定),并且在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。强制擦除会需要较多的时间。在v4.3及更高版本的设备上,当主机发出强制擦除时,只擦除存储在用户数据区(包括增强属性区)中的数据。强制擦除不适用于Boot, RPMB和General分区区域。
[1] eMMC安全方案—RPMB(Replay Protected Memory Block)专门介绍写保护
免责声明:
本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。