dm-verity
一、Device Mapper:
dm-verity是内核子系统的Device Mapper中的一个子模块,所以在介绍dm-verity之前先要介绍一下Device Mapper的基础知识。
Device Mapper为Linux内核提供了一个从逻辑设备到物理设备的映射框架,通过它,用户可以定制资源的管理策略。当前Linux中的逻辑卷管理器如LVM2(Linux Volume Manager 2)、EVMS(Enterprise Volume Mageagement System)、dmraid等都是基于该机制实现的。
Device Mapper有三个重要的概念:映射设备(Mapped Device)、映射表、目标设备(Target Device);
映射设备是一个逻辑块设备,用户可以像使用其他块设备那样使用映射设备。映射设备通过映射表描述的映射关系和目标设备建立映射。对映射设备的读写操作最终要映射成对目标设备的操作。而目标设备本身不一定是一个实际的物理设备,它可以是另一个映射设备,如此反复循环,理论上可以无限迭代下去。映射关系本质上就是表明映射设备中的地址对应到哪个目标设备的哪个地址。
Device Mapper是一个灵活的架构,映射设备映射一个或多个目标设备,每个目标设备属于一个类型,类型不同,对I/O处理不同,构造目标设备的方法也不同。映射设备可以映射多个不同类型的目标设备。
Dm-verity规定只能有两个目标设备,一个是数据设备(Data Device),另一个是哈希设备(Hash Device);
参考IBM博客,世界厉害的人真的多,不得不佩服:
https://www.ibm.com/developerworks/cn/linux/l-devmapper/
二、dm-verity简介:
dm-verity是Device mapper架构下的一种目标设备类型,通过它来保障设备或设备分区的完整性,它的典型架构是:
dm-verity类型的设备需要两个底层设备,一个是数据设备,顾名思义是用来存储数据,实际上就是要保障完整性的设备,另一个是哈希设备,用来存储哈希值,在校验数据设备完整性时需要。
图中映射设备和目标设备是一对一关系,对映射设备的读操作被映射成对目标设备的读操作,在目标设备中,dm-verity又将读操作映射为数据设备(Data Device)的读操作。但是在读操作的结束处,dm-verity加了一个额外的校验操作,对读到的数据计算一个hash值,用这个哈希值和存储在哈希设备
(Hash Device)中的值做比较,如果不同,则本次读操作被标记为错误。
假设数据设备和哈希设备中每块大小均为4KB,再假设使用hash算法SHA256,即每块数据的哈希值为32B(256bits),则哈希设备中的每块(4KB)存储有4096/32=128个哈希值。所以在layer0中一个哈希设备的块对应数据设备的128个块。到这里似乎完整了,数据设备中存储数据,哈希设备存储哈希值。
在读取数据时,dm-verity还要防备哈希设备中存储的哈希值被篡改的情况。所以要加上layer1,在layer1中的每块数据对应layer0的128个块,layer1中的数据就是对layer0中的数据(hash设备和数据设备中的数据)计算hash值,如果layer1中只有一块,那么就此停止,否则继续增加layer,直到layer n只有一块。最后对layer n再计算hash值,称这个hash值为root hash。
这个root hash就可以反应数据设备和hash设备的变化。通过验证root hash 就可以校验数据是否被篡改。
dm-verity的更多相关文章
- android dm-verity 功能【转】
转自:https://blog.csdn.net/ee230/article/details/73348344 Android dm-verity 实现原理深入研究 思维导图: dm-verity 说 ...
- Atitit Data Matrix dm码的原理与特点
Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...
- Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
Atitit 常用二维码对比(QR.PDF417.DM.汉信码 Aztec code maxicode DM码则更"小",可在仅仅25mm²的面积上编码30个数字.但也就是因为太小 ...
- DM 多路径存储
DM多路径存储 系统环境:RHEL5.4 small install selinux and iptables disabled主机规划:主机网卡软件station133eth0: 192.168. ...
- osgi dm
看了http://developer.51cto.com/art/200909/154863.htm 真心感到,最强大最有组织的技术网站还是 51cto,牛人应该也是最多的. 以前逛51cto的比较少 ...
- AI,DM,ML,PR的区别与联系
数据挖掘和机器学习的区别和联系,周志华有一篇很好的论述<机器学习与数据挖掘>可以帮助大家理解.数据挖掘受到很多学科领域的影响,其中数据库.机器学习.统计学无疑影响最大.简言之,对数据挖掘而 ...
- Rocky4.2下安装达梦(DM)6数据库
1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 jdbh:~ # uname -ra Linux jdbh -x86_64 # SMP Fri Dec :: CST x86_64 G ...
- DW与DM
DW组成部分简介 DW的组成部分有:针对数据源的分析.数据的ETL.数据的存储结构,元数据管理等. 数据源分析 主要是分析要抽取哪些数据,如何抽取(全量还是增量)?它的更新周期是怎么样的?它的数据质量 ...
- DB、ETL、DW、OLAP、DM、BI关系结构图
DB.ETL.DW.OLAP.DM.BI关系结构图 在此大概用口水话简单叙述一下他们几个概念: (1)DB/Database/数据库——这里一般指的就是OLTP数据库,在线事物数据库,用来支持生产的, ...
- 財哥面京东dm的经历【帮財哥发的】
关于面京东,感触仅仅有一个,虐的快吐血了.首先说京东分四个板块,有京东商城.京东金融.京东刚收购的拍拍和海外事业部.我这个职位主要是在金融部数据组做数据挖掘和机器学习,还有推荐系统.面试是在周 ...
随机推荐
- ERR Unsupported CONFIG parameter: notify-keyspace-events; nested exception is redis.clients.jedis.exceptions.JedisDataException
异常信息 时间:2017-04-05 15:53:57,361 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...
- Protocol Buffer 时间类型定义
ProtoBuf3中新增了TimeStamp类型,使用示例如下: syntax = "proto3"; import public "google/protobuf/ti ...
- 《About Face 3:交互设计精髓》【PDF】下载
<About Face 3:交互设计精髓>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230384328 内容简介 全书分成3篇:第1 ...
- JavaScript数字例子,二分法,冒泡排序
先看一下两个例子: 十个成绩,求总分,最高分,最低分 //输入10个成绩,求总分,最高,最低 var arr=new Array(67,45,56,12,90,98,23,43,56,99,97); ...
- Docker Stack 集群部属服务
Docker越来越成熟,功能也越来越强大.使用Dokcer Stack做服务集群也是非常的方便,docker 自己就提供了负载功能,感觉很方便,就想给大家分享一下,做一个简单的教程. 环境 我是用了两 ...
- IntelliJ IDEA如何设置头注释,自定义author和date
下面这张图,保证你一看就会: 下面这个模板,你拿去改一改就行了. /** * @Author: Gosin * @Date: ${DATE} ${TIME} */ 如果觉得上面名字下面的波浪线碍眼,可 ...
- du 命令详解
du : show disk usage 作用:统计目录或文件所占用磁盘空间的大小. 语法:du 参数 选项 参数: -a 为每个制定文件显示磁盘使用情况, 或者为目录中每个文件显示各自磁盘使用情况 ...
- selenium爬取百度图片
一:简介 通过selenium模块,模拟火狐浏览器进行搜索下载操作. 二:脚本内容 # -*- coding:utf-8 -*- # 百度图片自动爬去 # Chrome浏览器类似,设置其options ...
- redis资料收集
http://www.runoob.com/redis/redis-sets.html redis set 使用 https://www.cnblogs.com/wanzaixiaoxin/p/49 ...
- Javascript高级程序设计笔记 <第五章> 引用类型
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...