首页 理论教育 Linux内核安全模块深入剖析:dm-verity简介

Linux内核安全模块深入剖析:dm-verity简介

时间:2023-11-22 理论教育 版权反馈
【摘要】:dm-verity是Device Mapper架构下的一种目标设备类型。图13-3 dm-verity架构dm-verity类型的设备需要两个“底层”设备,一个是数据设备,顾名思义用来存储数据,实际上就是要保障完整性的设备,另一个是哈希设备,用来存储哈希值,在校验数据设备完整性时需要。图13-3中表示的是dm-verity的一种典型应用,也是简单直接的应用。这还不够,dm-verity还要防备哈希设备中存储的哈希值被篡改的情况。最后提一下,dm-verity设备必须被只读使用。

Linux内核安全模块深入剖析:dm-verity简介

dm-verity是Device Mapper架构下的一种目标设备类型。通过它来保障设备或设备分区的完整性。它的典型架构如图13-3所示。

978-7-111-54905-5-Part03-21.jpg

图13-3 dm-verity架构

dm-verity类型的设备需要两个“底层”设备,一个是数据设备,顾名思义用来存储数据,实际上就是要保障完整性的设备,另一个是哈希设备,用来存储哈希值,在校验数据设备完整性时需要。

图13-3中表示的是dm-verity的一种典型应用,也是简单直接的应用。图中映射设备和目标设备是一对一关系,对映射设备的读操作被映射成对目标设备的读操作,在目标设备中,dm-verity又将读操作映射为对数据设备(Data Device)的读操作。但是在读操作的结束处,dm-verity加了一个额外的校验操作,对读到的数据计算一个哈希值,用这个哈希值和存储在哈希设备(Hash Device)中的值比较,如果不同,则本次读操作被标记为错误

下面介绍一下哈希值的存储和使用,如图13-4所示。(www.xing528.com)

978-7-111-54905-5-Part03-22.jpg

图13-4 dm-verity哈希设备

假设数据设备和哈希设备中每块大小均为4KB,再假设使用哈希算法SHA256,即每块数据的哈希值为32B(256 bits),则哈希设备中的每块(4KB)存储有4096/32=128个哈希值。所以在layer 0中一个哈希设备的块对应数据设备的128个块。到这里似乎完整了,数据设备中存储数据,哈希设备中存储哈希值。在读取数据时,计算数据的哈希值,和存储在哈希设备中的值比较,根据结果决定读操作是否成功。这还不够,dm-verity还要防备哈希设备中存储的哈希值被篡改的情况。所以要加上layer 1,在layer 1中的每块数据对应layer 0中的128个块(当然也可以比128少),layer 1中的数据就是对layer 0中数据计算哈希值,如果layer 1中只有一块,那么就此停止,否则继续增加layer,直到layer n,layer n中只有一块。最后对layer n再计算哈希值,称这个哈希值为root hash。这个哈希值就是对数据设备中各块和哈希设备中各块--layer 0到layer n--进行了一个复杂的哈希运算。因此,数据设备和哈希设备中数据的变化就会反映为root hash的变化。通过验证root hash就可以检验数据是否被篡改。

最后提一下,dm-verity设备必须被只读使用。这个不难理解。但是,有一个问题,就是哈希设备中的数据是如何建立的。答案是内核不负责建立,要先由用户态工具,比如veritysetup,“格式化”相应的设备。然后内核在其上建立dm-verity设备。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈