在 Linux 上使用 cryptsetup/dm-crypt 对流密码进行磁盘加密?

在 Linux 上使用 cryptsetup/dm-crypt 对流密码进行磁盘加密?

我一直尝试使用 cryptsetup(在 modi plain 或 LUKS 中)创建一个具有流密码 [Chacha20*, ARC4] 而不是默认分组密码之一的设备,但没有成功。

对于不同的发行版/内核(Fedora、Ubuntu),行为是相同的,其中内核原则上支持密码[/proc/crypto、/lib/modules/*/kernel/crypto/]

对于 Chacha20,chacha20poly1305 cryptsetup 在创建过程中失败,因为没有 cbc-plain 支持(默认可用)——我认为这对于不关心块模式的流密码来说是合理的。

对于 RC4,我可以创建一个设备并访问它,但是关闭后重新打开会失败,并且该设备无法重新打开。

我对 RC4 的方法:

> dd if=/dev/zero of=/dev/shm/container bs=1M count=200
> dd if=/dev/urandom of=/tmp/keyfile bs=1k count=8
> cryptsetup --cipher arc4 --key-file=/tmp/keyfile open --type plain /dev/shm/container ramdisk
> mkfs.ext4 /dev/mapper/ramdisk
> echo "test" > /dev/mapper/ramdisk/test.foo
> cryptsetup close ramdisk

> cryptsetup --cipher arc4 --key-file=/tmp/keyfile open --type plain /dev/shm/container ramdisk
  -- fails

使用 LUKS 时,标头信息如下所示

> cryptsetup luksDump /dev/shm/container 
 LUKS header information for /dev/shm/container
 Version:        1
 Cipher name:    arc4
 Cipher mode:    cbc-plain
 Hash spec:      sha256
 Payload offset: 4096

实际上,我也可以用不同的 arc-modi-IV 组合来格式化设备 - 我认为普通容器默认也使用 cbc-plain(这听起来不合理,或者?)。

我的假设是,cryptsetup/dm-crypt 不支持流密码,并且 chacha20 的失败应该是默认行为,而 arc4 不能被正常捕获??

问题是,这个假设是否正确或者如何将流密码与 dm-crypt 一起使用?

答案1

在 cryptsetup 问题跟踪器上,我得知,它仅支持分组密码,不支持流密码。因此,ARC4 的行为应该与 Chacha20 一致,即失败但不允许创建设备/容器。

https://gitlab.com/cryptsetup/cryptsetup/issues/301

相关内容