Encryption 关于在ubifs上使用fscrypt与ext4的区别的问题

Encryption 关于在ubifs上使用fscrypt与ext4的区别的问题,encryption,embedded-linux,ext4,ubifs,Encryption,Embedded Linux,Ext4,Ubifs,我正在做一个嵌入式Linux项目,可以在多个平台上运行 平台。一个使用e.MMC存储,另一个使用NAND闪存。我想要 对所有文件系统进行加密(主要是为了防止有人 解开闪存芯片并将其放入读卡器)。我想 尽可能在两种硬件类型之间尝试并维护一种通用方法 尽可能的。两者之间的一个大区别是磨损水平 在e、MMC的硬件中,而对于NAND,我将使用UBI 对于根文件系统,我考虑使用squashfs,它是 使用dm crypt进行保护。对于NAND设备,我已经试过了 我可以在ubiblock上分层dm cryp

我正在做一个嵌入式Linux项目,可以在多个平台上运行 平台。一个使用e.MMC存储,另一个使用NAND闪存。我想要 对所有文件系统进行加密(主要是为了防止有人 解开闪存芯片并将其放入读卡器)。我想 尽可能在两种硬件类型之间尝试并维护一种通用方法 尽可能的。两者之间的一个大区别是磨损水平 在e、MMC的硬件中,而对于NAND,我将使用UBI

对于根文件系统,我考虑使用squashfs,它是 使用dm crypt进行保护。对于NAND设备,我已经试过了 我可以在ubiblock上分层dm crypt,然后使用设备映射器 来装壁球。这很好地映射到了e.MMC世界 唯一的区别是设备映射器位于gpt分区上 而不是块设备

我的挑战是针对其他读/写文件系统。我想登上一座山 将文件系统覆盖在只读根目录和数据分区之上。 我想这两个也被加密。我一直在调查 fscrypt如何能帮助我。(我相信dm crypt不会与ubifs一起工作)

对于e.MMC上的文件系统,我将使用ext4和NAND ubifs。文档中说这两个都支持fscrypt。我一直在挣扎 这里有一些详细的文档介绍如何在ubifs中使用它 (ext4还有很多)但我认为有一些 这两种方法的实现方式不同,我希望 了解更多的人可以证实这一点

在NAND方面,我只能通过使用 fscryptctl工具( )与功能更全面的fscrypt工具相反 (). 这是按照我的指示做的 在将fscrypt支持添加到mkfs.ubifs的修补程序中找到,请单击此处:

这似乎是使用 提供的钥匙。当我在ext4上查看fscrypt时,这里似乎是 我不能这么做。根目录本身不能加密,只能加密 子目录。在这里阅读: 信息技术 说:

“请注意,ext4文件系统不允许删除根目录 加密,即使它是空的。希望加密整个 有一个密钥的文件系统应该考虑使用DM隐窝。 所以这是不同的。似乎我也不能申请ubifs 像在ext4中一样加密子目录。README.md 这里给出了一个使用ext4的示例。 这将加密名为test的子目录。我不知道该怎么做 使用ubifs也是一样。有人能帮我吗

我一直在使用NANDSIM内核模块进行测试。在…的结尾 这篇文章是构建加密覆盖ubifs的脚本 文件系统。如您所见,mkfs.ubifs直接获取密钥 它似乎将其应用于分区上的所有文件。你 然后无法将策略应用于任何子目录,因为它们已经存在 加密的

我想使用userspace提供的一些其他特性 fscrypt工具提供例如保护器(所以我不需要使用 直接使用主密钥)。然而,我无法找到任何方法来获取用户空间fscrypt 用于在ubifs上设置加密的工具。userspace fscrypt命令 在文件的根目录中创建.fscrypt目录 分区以存储有关策略和保护器的信息。这 似乎更适合根本身未加密的ext4实现

当我尝试使用“fscrypt setup”设置未加密的ubifs时,我会运行 由于制作标准的ubifs似乎创建了v4 ubifs格式,因此陷入了麻烦 版本,而不是所需的v5。这意味着“fscrypt加密” 命令失败。(在dmesg输出中可以看到类似的错误

[12022.576268] UBIFS error (ubi0:7 pid 6006): ubifs_enable_encryption
[ubifs]: on-flash format version 5 is needed for encryption).  
是否有办法让mkfs.ubifs创建未加密的v5格式 文件系统?还是v5意味着加密

下面是我使用fscryptctl工具创建加密ubifs的脚本:

#!/bin/bash

MTD_UTILS_ROOT=../../mtd-utils
FSCRYPTCTL=../../fscryptctl/fscryptctl
MOUNTPOINT=./mnt

dd if=/dev/urandom of=overlay.keyfile count=64 bs=1 # XTS needs a 512bit key
descriptor=`$FSCRYPTCTL get_descriptor < overlay.keyfile`
$MTD_UTILS_ROOT/mkfs.ubifs --cipher AES-256-XTS --key overlay.keyfile
-m 2048 -e 129024 -c 32 -r ./overlay -o overlay.enc.img

$MTD_UTILS_ROOT/ubiupdatevol /dev/ubi0_6 overlay.enc.img

# Try it out
$FSCRYPTCTL insert_key < overlay.keyfile
key=`keyctl show | grep $descriptor | awk '{print $1}'`
mount -t ubifs /dev/ubi0_6 $MOUNTPOINT
ls $MOUNTPOINT
umount $MOUNTPOINT
keyctl unlink $key
!/bin/bash
MTD_UTILS_ROOT=../../MTD UTILS
FSCRYPTCTL=../../FSCRYPTCTL/FSCRYPTCTL
装入点=./mnt
dd if=/dev/uradom of=overlay.keyfile count=64 bs=1#XTS需要一个512bit密钥
descriptor=`$FSCRYPTCTL get_descriptor
注意,我一直在5.4内核上使用mtd utils v2.1.2