SCSI-8.UFS_RPMB

news2024/10/12 21:51:21

SCSI-8.UFS_RPMB

RPMB 介绍

**RPMB(Replay Protected Memory Block)**是一种基于硬件的安全存储区域,其结构设计旨在确保数据的机密性、完整性以及防重放攻击的能力。RPMB通常嵌入在eMMC、UFS等存储设备中,由专用硬件电路管理和访问。

在UFS里,有这么一个LU,四大LU之一,主机往该LU写数据时,UFS设备会校验数据的合法性,只有特定的主机才能写入;他相当于生活中宝箱,数据就是我们的财产,有些东西是放在公共区域的任何人都可以拿走,都可以访问,但是例如你的珠宝、房产证、黄金、你总不能放在一个公共空间让别人拿走吧,所以有一个非常非常私密的地方,一个密码宝箱,需要密码认证才能打开你珍贵的数据。同时,主机在读取数据时,也提供了校验机制,保证了主机读取到的数据是从该LU上读的数据,而不是攻击者伪造的数据,保证大家的老婆和财产。

在这里插入图片描述

RPMB的实现,类似于两个见不到面的人相互传递一个带锁的箱子,有钥匙的人才能打开。箱子上有个计数器,每打开一次,计数器就会加一这样来保证获取数据的正确性。

数据访问机制

RPMB的读写操作通过一套认证计数器机制(密码)来保证安全性和完整性。它不同于传统存储的操作流程,访问RPMB的数据需要通过专门的命令集并满足以下要求:

  1. 认证机制:RPMB的所有操作(包括读写)都需要通过认证密钥进行验证。只有持有正确认证密钥的实体才能执行相应操作。这种认证方式通过消息认证码(Message Authentication Code,MAC)进行,确保只有授权实体能够访问RPMB。
  2. 计数器机制:每次写入操作必须包含一个递增的计数器值。RPMB内部会存储上一次操作的计数器值,每次写入数据时必须包含一个比当前计数器更高的值。该机制确保相同的操作不会重复执行,从而防止重放攻击。
  3. 数据完整性校验:每次写入的同时,RPMB会计算该数据的哈希值,用于校验数据的完整性。在后续的读取操作中,可以通过比较当前哈希值与存储的哈希值来检测数据是否被篡改或损坏。

在这里插入图片描述

数据访问流程

1.现在我淘金淘到了财宝,现在要把财宝放进宝箱,共享密钥就是自己宝箱的钥匙,准备好把数据放入宝箱。

2.在发送数据给设备之前,将数据和密钥组合使用哈希算法 生成消息验证码(Messages Authentication Code)。

3.UFS 主机将MAC 以及数据发送到UFS 设备

4.UFS 设备仍然会使用收到的数据和共享密钥作哈希运算,将计算的出的MAC 值和收到的MAC值进行对比,相同则进行存入操作,反则不进行相关操作。

数据访问流程实例

下面用 Python 代码演示这个过程,并说明当数据发生任何改变时,MAC 验证会失败。

pythonCopy codeimport hmac
import hashlib

# 定义共享密钥和数据
key = b"secret_key"  # 共享密钥
message = b"Hello, World!"  # 财宝(数据)

# 生成消息认证码(MAC)
mac = hmac.new(key, message, hashlib.sha256).hexdigest()

# 打印生成的MAC值
print(f"原始数据的 MAC: {mac}")

# 假设数据在传输过程中被篡改
tampered_message = b"Hello, World?"  # 改动了一个字符

# 重新计算篡改后数据的MAC
tampered_mac = hmac.new(key, tampered_message, hashlib.sha256).hexdigest()

# 打印篡改后数据的MAC值
print(f"篡改数据的 MAC: {tampered_mac}")

# 比较原始 MAC 和 篡改后的 MAC
if mac == tampered_mac:
    print("数据验证通过!")
else:
    print("数据验证失败!")

输出结果

  1. 对于原始数据 "Hello, World!" 生成的 MAC 是:

    Copy code
    原始数据的 MAC: 3e4a8052b6be0063b5adf31e36cfc67da54ab0f397f8e30200fa9f0f0d3f91a0
    
  2. 如果数据发生了轻微的变化,比如把 "Hello, World!" 改成 "Hello, World?",即仅仅改变了一个字符,生成的 MAC 会完全不同:

    篡改数据的 MAC: 63d02dc59dbb5fc58c4cb27c54efefbc68b94792e04e36f6877bb322dc5b8e45
    
  3. 最终,UFS 设备会将原始 MAC 与重新计算的 MAC 进行对比。如果它们不相同,则数据验证失败。

重放攻击

注意:共享密钥不能被恶意攻击者获取,否则,恶意攻击者完全可以模拟主机行为:把自己的恶意数据和共享密钥生成MAC,然后把恶意数据和其对应的MAC发送给UFS设备。UFS设备会认证成功,恶意数据被写入。所以,保管好你的密码!

另外恶意攻击者可能会劫持你的数据,获得"主机数据 + MAC",攻击者可以一直不断发送这个命令,这样会有缓存会被写爆的风险。

所以我们不能束手就擒啊,所以就有了RPWB的措施:UFS维护了一个写计数(Write Counter),初始化为0。UFS设备每次成功处理完一个RPMB写命令,写计数加一。主机在往设备写入数据前,获得该计数。然后把用户数据和该计数一起做MAC计算。这样,即使恶意攻击者窃听到某次合法的“用户数据 + MAC”,往设备写入时,由于写计数发生变化,它无法生成写计数改变之后的MAC值,因此就无法一直重复往设备写入某次合法的“用户数据 + MAC”。

计数器是否在原生数据中?

  • 计数器不是原生用户数据的一部分,它是由设备专门维护的一个值,用户无法直接控制或操作它。
  • 当主机准备写入数据时,主机会先从设备读取当前的计数器值,然后在发送写入请求时携带这个值加 1 的计数器作为本次写入的计数器。
  • 计数器的维护和更新是由设备的 RPMB 硬件或固件自动进行的,用户的数据本身不会包含计数器信息。

RPMB LU

RPMB与普通存储的对比

特性RPMB普通存储(如eMMC、UFS等)
访问方式需要认证密钥和特殊命令标准读写操作
防重放攻击有计数器机制,防止重放攻击无防重放机制
数据安全性高,使用加密和认证保护低,易于被篡改或攻击
应用场景安全引导、密钥存储、金融应用等常规数据存储

UFS2.1中,RPMB LU最小逻辑空间为128KB,最大为16MB。它的逻辑块大小为256B(普通LU逻辑块大小一般为4KB)。应用层不是通过普通的Read/Write命令读/写RPMB上的数据,而是通过SECURITY PROTOCOL OUT/IN命令来访问RPMB的。

在这里插入图片描述

数据帧大小是512字节,组成如下:

  • 认证密钥(Key)是32字节

  • 1使用SHA-256计算MAC,就是任意长度的数据,产生的MAC值总是256比特,即MAC大小为32字节

  • 逻辑块数据大小为256字节。

  • 写计数(Write Counter)为4字节,当该值涨到0xFFFF FFFF,它就保持不动,不会继续增长了。

  • Address,RPMB的逻辑地址,同LBA。两个字节,最多表示65536个逻辑块,每个逻辑块大小为256字节,因此RPMB逻辑空间最大为

  • Block Count,逻辑块数,即指定读写多少个逻辑块。

  • Result,RPMB操作结果(状态)。

ress,RPMB的逻辑地址,同LBA。两个字节,最多表示65536个逻辑块,每个逻辑块大小为256字节,因此RPMB逻辑空间最大为

  • Block Count,逻辑块数,即指定读写多少个逻辑块。

  • Result,RPMB操作结果(状态)。
    在这里插入图片描述

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

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

相关文章

TCN-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 数据集介绍 我们使用的数据集包含以下几个重要的属性: date(日期) open(开盘价) high(最高价) low(最低价) close(收盘价) pre_close&…

搜索如何加速你迈向 “AI 优先” 的步伐

作者:来自 Elastic Hayley Sutherland 人工智能与搜索的结合使企业智能达到了新的水平,自然语言处理 (NLP)、基于机器学习 (ML) 的相关性、向量/语义搜索和大型语言模型 (LLMs) 等技术帮助组织最终释放未分析数据的价值。组织需要搜索和知识发现技术来发…

uniapp 整合 OpenLayer3 - 全图、切换底图、导航、定位

一、全图 主要代码: // 获取当前可见视图范围 //console.log(this.map.getView().calculateExtent()); // 设置中心点 //this.map.getView().setCenter(transform([125.33,43.90], EPSG:4326, EPSG:3857)); // 设置层级 //this.map.getView().setZoom(10);// 中心…

【ProtoBuf】ProtoBuf基础与安装

本篇文章介绍 C 使用方向 文章目录 ProtoBuf简介ProtoBuf安装WindowsLinux ProtoBuf简介 ProtoBuf(全称为 Protocol Buffer)是一种序列化结构数据的方法 序列化是将对象转换为可存储的或传输的格式的过程,通常用于数据交换或持久化存储。我们在C/Java中编写的类不…

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

SSD融合FERPlus模型实现面部情绪识别

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

帝国竞争主义算法(ICA)的MATLAB代码复现

目录 1 帝国竞争主义算法优化BP神经网络代码复现 2 帝国竞争主义算法优化支持向量机代码复现 3 帝国竞争主义算法优化长短期记忆神经网络代码复现 1 帝国竞争主义算法优化BP神经网络代码复现 1&#xff09;单输出回归预测&#xff1a;单输出回归预测&#xff1a;帝国主义竞…

API接口并发请求控制实现

文章目录 一、问题概述二、解决思路1. AtomicInteger2. LongAdder3. Semaphore4. 实现区别三、API接口并发控制1. 核心源码2. 源码放送 一、问题概述 某API接口&#xff0c;承载某重要业务&#xff0c;希望控制任意时间点的并发访问数在5以内&#xff0c;该如何实现&#xff1…

数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储&#xff1a; a.完全二叉树&#xff1a; 1.顺序存储中利用了静态数组&#xff0c;空间大小有限&#xff1a; 2.基本操作&#xff1a; (i是结点编号) 1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了)&#xff1b; 2.上述图片判断i是否有左…

ThingsBoard规则链节点:JSON Path节点详解

引言 JSON Path节点简介 用法 含义 应用场景 实际项目运用示例 智能农业监控系统 工业自动化生产线 车联网平台 结论 引言 ThingsBoard是一个功能强大的物联网平台&#xff0c;它提供了设备管理、数据收集与处理以及实时监控等核心功能。其规则引擎允许用户通过创建复…

Java-学生管理系统[初阶]

这次我们来尝试使用Java实现一下"学生管理系统"&#xff0c;顾名思义&#xff0c;就是实现一个能用来管理学生各种数据的系统。在后续学习中我们将对"学生管理系统"进行两种实现&#xff1a; &#x1f4da; 学生管理系统[初阶](不带模拟登录系统) &#…

衡石分析平台系统管理手册-智能运维之系统日志

系统日志​ 点击系统设置->系统日志 在这个页面&#xff0c;从时间&#xff0c;操作者, IP&#xff0c;行为&#xff0c;结果&#xff0c;类别&#xff0c;对象&#xff0c;描述等方面记录了用户行为&#xff0c;系统管理员可以从此页面针对整个系统的用户行为进行审计工作…

【C++】set/map 与 multiset/multimap

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 ​编辑 序列式容器和关联式容器 一、set 1.1 set介绍 1.2 …

大健康零售电商的智囊团:知识中台的应用与影响

在数字化浪潮席卷各行各业的今天&#xff0c;大健康零售电商行业也在积极探索转型升级的新路径。知识中台&#xff0c;作为一种集知识管理、数据挖掘与智能化应用于一体的新型技术架构&#xff0c;正逐渐成为推动这一转型的关键力量。本文将深入探讨知识中台在大健康零售电商中…

Light灯光组件+组件的相关操作+游戏资源的加载

Light灯光组件 Type: Directional:平行光&#xff0c;模仿的是太阳光 Spot:聚光灯 Area:区域光 Color&#xff1a; 颜色值 Mode: RealTime:实时 Mix:混合 Baked:烘焙 Intersity: 光照强度 Indirect Multiplier:光照强度乘数 Shadow Type:影子设置&#xff1a;…

CV方法再学习

轻量化模型 Mobile系列(V1~V3) MobileNetV1 MobileNetV1之所以轻量&#xff0c;与深度可分离卷积的关系密不可分 深度可分离卷积 主要是两种卷积变体组合使用&#xff0c;分别为逐通道卷积&#xff08;Depthwise Convolution&#xff09;和逐点卷积&#xff08;Pointwise C…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

八、Python基础语法(判断语句-下)

一、if elif else 结构 应用场景&#xff1a;多个判断条件下&#xff0c;并且这些判断条件存在一定的关联。 语法&#xff1a; elif也是python中关键字&#xff0c;后面跟一个判断条件&#xff0c;判断条件后面跟冒号 存在冒号&#xff0c;需要换行缩进&#xff0c;处于elif…

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#xff0c;人手一份 肝完进大厂 妥妥的&#…

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…