Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树

这篇具有很好参考价值的文章主要介绍了Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇说AVB内存装不下的较大分区(如文件系统)可能会使用哈希树,还提到了dm-verity。这篇来看看这两个是啥?

dm-verity

1、dm-verity

1、能不能将多个硬盘,映射成一个逻辑的硬盘,那样我们程序就不用关心复杂的地址问题了,也不用关系是哪个device了? DM-raid技术RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks)

2、将某个地址段的数据进行加密,只有授权方式才可访问,比如FDE。 DM-crypt技术

3、访问存储介质上的数据时,校验下是否被篡改过。DM-verity技术。

DM就是Device-Mapper的缩写,也就说上述的想法都可以基于Device Mapper实现,Device Mapper可不仅仅实现了这些,还包括LVM2、DM-multipach等。

1.1 什么是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);

Device Mapper可参考IBM博客:https://www.ibm.com/developerworks/cn/linux/l-devmapper/

1.2 dm-verity简介

dm-verity是Device mapper架构下的一种目标设备类型,通过它来保障设备或设备分区的完整性,它的典型架构是如图一。
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树

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 就可以校验数据是否被篡改。

简直是精妙啊!!!

哈希树(Merkletree)

2、哈希树(Merkletree)

我还以为hash树是hash-tree,哈哈哈哈

哈希树(hash tree;Merkle tree),在密码学及计算机科学中是一种树形数据结构,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 。哈希树能够高效、安全地验证大型数据结构的内容。哈希树的概念由瑞夫·墨克于 1979 年申请专利,故亦称墨克树(Merkle tree)。

Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。只要任一叶节点有变化,根哈希都会变。在比特币区块里,所有交易都按照Merkle Tree的格式组织起来,再跟区块头里的hashMerkleTreeRoot对应起来,就可以保证本区块交易信息的不可篡改。

接下来是时候看看AVB的详细工作了!!!

参考资料:
https://www.cnblogs.com/linhaostudy/archive/2018/01/17/7418289.html文章来源地址https://www.toymoban.com/news/detail-464173.html

到了这里,关于Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android源码学习- APP启动流程(android12源码)

    百度一搜能找到很多讲APP启动流程的,但是往往要么就是太老旧(还是基于android6去分析的),要么就是不全(往往只讲了整个流程的一小部分)。所以我结合网上现有的文章,以及源码的阅读和调试,耗费了3整天的时间,力求写出一篇最完整,最详细,最通俗易懂的文章,

    2024年02月11日
    浏览(44)
  • 【Android】APP启动优化学习笔记

    用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动速度,让用户获得更好的使用体验。 竞争优势

    2024年02月14日
    浏览(40)
  • centos 系统启动后直接进入dracut,找不到/dev/mapper/centos-root

    提示界面如下:  Warning: /dev/mapper/centos-root does not exist 解决方式: 在shell命令行中执行如下命令,可以找到相关的lvm虚拟卷。然后临时进入系统 进入系统之后,重新生成相关的内核启动文件 然后重启系统即可。 参考:lvm - warning /dev/centos/root swap centos-root does not exist -- after

    2024年02月15日
    浏览(40)
  • Docker容器 - 启动报错:No space left on device

    目录 运行 报错 解决问题 具体操作 重新运行 docker: Error response from daemon: mkdir /var/lib/docker/overlay2/82f185b561334827b34f78dd05dfd83b30b16e710fb27f88c09262bd94dd2fbc-init: no space left on device .  原因是磁盘空间不足,此时创建数据卷的时候docker会报错No space left on device。 首先来看一下磁盘的使用量

    2024年02月11日
    浏览(65)
  • Android framework学习指南之Launcher启动过程原理分析

    Launcher是一个用来显示系统中已经安装的应用程序的应用程序,Launcher 在启动过程中会请求PackageManagerService 返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应的应用程序,它的作

    2024年02月03日
    浏览(47)
  • Android 高通Camera2 Camera Device Close

     1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放,于是带着这个思路去进行百度探索 2、一开始我去寻找 ImageReader.OnImageAvailableListener 这个问题 3、后面网上去寻找因为  Camera2最大连拍限制是 2 网上很多数包括Google相机源码 需要单独开个线程去处理图片的逻辑

    2023年04月09日
    浏览(42)
  • [Android]问题解决-Device must be bootloader unlocked

    在push文件时,remount命令发生如下报错: 根据屏幕提示,按up键选择unlock 重启回到normal模式开机

    2024年02月04日
    浏览(51)
  • “List of Devices Attached“:Android设备连接问题解析

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将聚焦于一个在Android开发和移动设备管理中经常遇到的问题,那就是\\\"list of devices attached\\\"。让我们一起深入了解这个话题,了解其中的奥秘和解

    2024年03月13日
    浏览(48)
  • 成功解决Android设备adb连接后显示device unauthorized

    在电脑通过USB连接新的Android设备,想要通过adb来进行一些操作时,却发现命令提示符上在输入下面命令后显示设备未授权的信息也就是\\\"unauthorized\\\" 有人提出的解决方案是打开Android设备的 开发者选项 中的 USB调试 ,但笔者在之前已经打开了,由此可知问题并不与此相关。 通过

    2024年02月13日
    浏览(45)
  • 【Android】adb devices找不到设备驱动的解决方法

    初次使用难免会遇到一些问题,或者换了电脑后操作,按照网上的指导执行命令adb devices找不到设备问题,该怎么办呢,接下来给详细讲一讲。 首先,确保USB连接上电脑的手机上弹出通知提示已启用调试模式, 然后,在电脑上打开终端执行命令adb devices,结果可能如下,问题

    2024年02月07日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包