FBE文件加密

简述

本文将介绍基于 Linux Kernel 的 file-level encryption 实现的 X5 FBE 功能。

X5-FBE 和 FDE 类似,在使用者写数据时将数据自动的加密并且存储到 eMMC 中,在用户读数据时又可以自动的将数据从 eMMC 中读出并且解密呈现给使用者。使用者全程不需要去刻意的调用加密算法。

不同的是 FDE 是基于磁盘加密,它只能对某个分区进行保护,而 FBE 可以做到对任意一个文件夹中的内容进行保护。而且 FBE 可以在运行态下选择对某个文件进行加解密。可以看出 FBE 比 FDE 更加灵活。

缩写 全称
FBE File base encryption

X5-FBE使用方法

  • X5-FBE 在 Kernel 层基于 fscrypt,代码所在路径为 kernel/fs/crypto

Kernel 中要确保下面的配置已经打开,配置文件位于 kernel/arch/arm64/configs,地瓜 X5-evb 已经打开

CONFIG_FS_ENCRYPTION=y

这个工具通过 buildroot 集成到 X5 rootfs 中,烧录镜像后即可使用:

root@buildroot:~# fscryptctl -v
v1.0.0

地瓜 X5 平台支持使用派生密钥作为 FBE 的 key,派生密钥由 user root key 派生,usr root key 的说明可以看FDE

  • 确保目标分区已经开encryp功能

比如下面的实验我们都是在 /userdata 下执行,那么就要确保/userdata所在分区已经打开encrypt功能:

root@buildroot:~# tune2fs -O encrypt /dev/block/platform/by-name/userdata
tune2fs 1.46.5 (30-Dec-2021)
root@buildroot:~# tune2fs -l /dev/block/platform/by-name/userdata | grep -i "Filesystem features"
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg encrypt sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
  • FBE 默认使用 Kernel 提供的基于 CPU 的加解密算法

fscryptctl 中对于文件名加密使用的默认算法是 AES-256-CTS,对应文件内容加密使用的默认算法是 AES-256-XTS ,要在 Kernel 中确保这两种算法使能

CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_XTS=y

基于外部密钥

#初始化FBE
tune2fs -O encrypt /dev/block/platform/by-name/userdata
#生成密钥
dd if=/dev/random of=/userdata/keyfile bs=1 count=32
mkdir -p /userdata/fbe
cd /userdata/fbe/
#将密钥应用到文件夹
fscryptctl add_key . < /userdata/keyfile > /userdata/keyid
#设置文件夹策略
fscryptctl set_policy $(cat /userdata/keyid) .
echo "test" > test.txt;
cat test.txt
#删除对应密钥
fscryptctl remove_key  $(cat /userdata/keyid) .
cat test.txt

基于X5派生密钥

#初始化FBE
tune2fs -O encrypt /dev/block/platform/by-name/userdata
mkdir -p /userdata/fbe
cd /userdata/fbe/
#将密钥应用到文件夹
getdmkey --km | xxd -r -p | fscryptctl add_key . > /userdata/keyid
#设置文件夹策略
fscryptctl set_policy $(cat /userdata/keyid) .
echo "test" > test.txt;
cat test.txt
#删除对应密钥
fscryptctl remove_key  $(cat /userdata/keyid) .
cat test.txt