我一直尝试使用 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 一致,即失败但不允许创建设备/容器。