[元带你学: eMMC协议详解 16] eMMC 安全方案 之 设备锁定(Lock) / 解锁(Unlock) 详解

news2024/11/17 11:38:01

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载

所在专栏 《元带你学: eMMC协议详解》

内容摘要

全文 4100 字, 内容摘要

1. 锁定与解锁的概念?

2. 设置密码的方法和注意点?

3. 重置密码的方法和注意点?

4. 锁定设备和解锁设备的方法?

5. 强制擦除是怎么做到的?


前言


信息安全的三个基本目标是机密性、完整性和可用性:

机密性意味着应该保密的信息只能被授权的实体阅读和理解。其他未经访问授权不能阅读或理解机密信息。
完整性是指能够确保信息不受未经授权的更改、修改或删除的能力。信息的完整性包括信息的来源、完整性和正确性(使用标识和身份验证等方法)。
可用性意味着信息始终可供授权用户使用

eMMC安全方案有哪些呢? eMMC设备包含多种数据保护和安全功能,包括:写保护、密码锁定/解锁和RPMB。

 本讲将专注于讨论设备锁定(Lock) / 解锁(Unlock) 。

1. 概念


密码锁定功能旨在保护用户区域只有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是一个非法命令。

  • ERASE: '1'定义强制擦除操作(所有其他位都为'O'),只发送cmd字节。
  • LOCK/UNLOCK: '1'=锁定设备。'0'=解锁设备(请注意,将此位与SET_PWD一起设置是有效的,但不允许与CLR_PWD一起设置)。
  • CLR_PWD: 'I'=清除PWD。
  • SET_PWD: '1'=设置新密码为PWD
  • PWD_LEN:定义以下密码长度(以字节为单位)。密码的有效长度为1 ~ 16个字节。
  • Password dara:密码(新的或当前使用的,具体取决于命令)。

数据块大小由主机在发送设备锁/解锁命令之前定义。这将允许不同的密码大小。以下段落定义了各种锁/解锁命令序列。

2. 设置密码

(1) 选择设备(CMD7),如果之前没有选择的话。

(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及新密码的字节数。

  • 如果进行了密码替换,则块大小应考虑新旧密码都随命令发送。

(3) 发送设备锁定/解锁命令(CMD42),在数据线上带合适的数据块大小,包括16位CRC。数据块应该显示模式(SET_PWD)、长度(PWD_LEN)和密码本身。

小贴士

  • 如果进行了密码替换,则长度值(PWD_LEN)应包括旧密码和新密码,并且PWD字段应包括旧密码(当前使用的)和新密码。新密码和旧密码的长度不能超过16字节。

  • 如果新密码长度超过16字节,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位,不修改旧密码。

  • 如果尝试将PWD_LEN设置为仅旧密码的长度来替换密码,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位,并且不更改旧密码。

  • 如果发送的旧密码不正确(大小和内容不相等),则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位,旧密码不改变。

  • 如果PWD与发送的旧密码匹配,则给定的新密码及其大小将分别保存在PWD和PWD_LEN字段中。

  • 密码长度寄存器(PWD_LEN)表示当前是否设置了密码。当它等于'0'时,没有设置密码。如果PWD_LEN的值不等于零,设备上电后将自动锁定。通过设置lock /UNLOCK位(同时设置密码)或发送Device lock.d的附加命令,可以在当前上电周期内立即锁定设备.

3. 重置密码

(1) 选择设备(CMD7),如果之前没有选择的话

(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及当前使用的密码的字节数。

(3) 发送设备锁定/解锁命令(CMD42),并在数据线上发送适当的数据块大小,包括16位CRC。数据块应该指示模式CLR_PWD,长度(PWD_LEN)和密码(PWD)本身(LOCK/UNLOCK位不关心)。

  • 如果PWD和PWD_LEN内容与发送的密码及其大小匹配,则清除PWD寄存器的内容并将PWD_LEN设置为0。
  • 如果密码不正确,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。

4. 锁定设备

(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错误位。

5. 解锁设备

步骤如下:

(1) 选择设备(CMD7),如果之前没有选择的话。

(2) 定义块长度(CMD16),由8位设备锁定/解锁模式给出,8位密码大小(以字节为单位),以及当前使用的密码的字节数。

(3) 发送设备锁定/解锁命令(CMD42),并在数据线上发送适当的数据块大小,包括16位CRC。数据块应该显示模式UNLOCK,长度(PWD_LEN)和密码(PWD)本身。

  • 如果PWD内容等于发送的密码,则设备将被解锁,并且状态寄存器中的设备锁定状态位将被清除。
  • 如果密码不正确,则在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。

说明解锁只针对当前的上电周期内有效。只要PWD未清除,设备将在下次上电时自动锁定。永久解锁设备的唯一方法是清除密码。

对未锁定的设备进行解锁将回报失败,并且会在状态寄存器中设置LOCK_UNLOCK_FAILED错误位。

6. 强制删除

如果用户忘记了密码(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)专门介绍写保护

免责声明

本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(Linux) WSL 适用于Linux的Windows子系统

文章目录 前言环境设置开发者选项启用或关闭Windows功能进入Microsoft应用商场下载下载完成开启PS: 查看运行效果 Linux基础配置环境缺失注册账号设置root账户密码常用环境的安装 VS Code 连接插件连接的快捷方式 END 前言 学习Linux的阻碍,往往第一步就是没有Linu…

Java实现图片的上传和显示

⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 文章目录 🎈前言🎄前端:&#x1…

ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方…

腾讯云3年轻量应用服务器入口(不要一年的坑)

腾讯云轻量应用服务器2核2G4M和2核4G5M可以一次性选三年,3年轻量2核2G4M带宽396元三年、3年轻量2核4G5M服务器628元三年,轻量应用服务器第二年xufei贵,大家都知道,所以一次性选三年,毕竟限制条件是腾讯云新用户&#x…

8年测试超强整理,性能测试-压力测试-负载测试,卷起来...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 软件测试包括不同…

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试?在这些测试的内容中如何去更好的掌握测试技能保证测试质量,一起来学习探讨交流。 下面为银行测试点的概括: 根据上图,我们可以从以下几个方面重点关注: …

跨国能源公司如何成功地完成SAP S/4HANA迁移

哪种升级转换方法更适合跨国集团的S/4HANA 实施,如果数据需要选择性迁移,并且ERP系统的停机时间要降至最低?与 IBM 和 SNP 合作的客户Arauco Group,该企业的成功案例提供了一些启示。 ARAUCO是世界领先的可再生能源生产商之一&am…

Security 详解—原理(1)

1.简介: Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 1.1 特性: 支持对身份认证和访问鉴权的自定义…

不可盲目优化,否则不是缘木求鱼就是南辕北辙

作为在编码这块自留地里深耕多年的码农,凭借着自认为丰富的经验加上专业领域的博览群书,自觉对程序优化还是有点感觉、有点心得的。但最近的经历让我不得不感慨,“不听老人言,吃亏在眼前“还是很有道理的。 软件优化这件事&#x…

VS code安装与配置

1.VS code介绍 2.VS code安装 2.1解压,并打开解压之后的文件夹,点击VSCodeUserSetup-x64-1.67.0,右击,选择以管理员身份运行 2.2点击同意,点击下一步 2.3更换安装路径 2.4点击下一步 2.5勾选创建桌面快捷方式&…

如何在 Linux 中列出 Systemd 下所有正在运行的服务

动动发财的小手,点个赞吧! Linux系统提供多种系统服务(如进程管理、登录、syslog、cron等)和网络服务(如远程登录、电子邮件、打印机、虚拟主机、数据存储、文件传输、域名解析等) (使用 DNS&am…

腾讯云服务器地域有什么区别怎么选比较好?

腾讯云服务器地域什么区别?云服务器地域怎么选择?地域是指云服务器所在机房的地理位置,用户距离地域越近网络延迟越低,速度越快,所以地域就近选择即可。广州上海北京等地域网站域名需要备案,中国香港或其他…

C# hello world

目录 一 C#简介 二 Hello world程序 三 C#未来的发展趋势 四 C#学习路线推荐 一 C#简介 C#(C Sharp)是微软开发的一种面向对象的编程语言,它于2000年发布,并被设计为在.NET平台上运行。C#语言具有简单、安全、类型安全、可扩…

飞只因太美,给你的首页装上吧!

原文链接:飞只因太美,给你的首页装上吧! 推荐阅读 基于 Hexo 从零开始搭建个人博客(一)基于 Hexo 从零开始搭建个人博客(二)基于 Hexo 从零开始搭建个人博客(三)基于 H…

你要一定用的上的Postman 使用小技巧

目录 一、什么是 Postman(前世今生) 二、使用变量 2.1 变量作用域适用于 Postman 中不同的场景 2.2 编辑全局和环境变量 2.3 编辑集合变量 2.4 使用系统内置动态变量 三、Postman 请求生命周期 3.1 在前置请求(pre-request script&…

【期末总复习】神经网络与深度学习蒲公英书

浅层学习 one-hot向量 相似度的概念 局部表示和分布式表示示例 学习器 准确率 机器学习的三个基本要素:模型、学习准则、优化算法 【概念】期望风险 【概念】损失函数 【运用】三分类问题 【概念】过拟合 【概念】欠拟合 超参数 【选择 / 判断】验证集概念 线性回归…

C语言实现链表

绪论 机遇对于有准备的头脑有特别的亲和力。本章将讲写到链表其中主要将写到单链表和带头双向循环链表的如何实现。 话不多说安全带系好,发车啦(建议电脑观看)。 附:红色,部分为重点部分;蓝颜色为需要记忆的…

oracle expdp导致system表空间满

今天下午,项目经理反馈有套11204版本数据库无法使用了,立刻登录检查环境发现SYSTEM表空间使用率99.99%了 TABLESPACE_NAME MAXSIZE_MB ACTUALSIZE_MB USED_MB FREESPACE_MB SPACE USAGE ----------------- ---------- ------------- ---------- …

单向散列函数(哈希)【密码学】(一)

目录 一、前言:密码学有什么用? 二、单向散列函数 1、单向函数 2、散列函数 3、单向散列函数 三、怎么解决完整性问题 四、如何设置合适的安全强度 一、前言:密码学有什么用? 二、单向散列函数 单向散列函数就是用来解决…

哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理

哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理 可靠数据传输原理 什么是可靠? 不错、不丢、不乱 可靠数据传输协议 可靠数据传输对应用层、传输层、链路层都很重要 网络Top-10问题 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性…