Linux中的dm-crypt使用512个字节块(磁盘扇区),具有加密明文子块,用于不可并行的分组密码模式:
使用密码设置中常见的模式(CBC、ESSIV、XTS),您可以得到一个完全改变的512字节块以避免位错误。一个损坏的块会比偶尔翻转的单个比特造成更大的破坏,并可能导致各种模糊错误。
/\资料来源:https://gitlab.com/cryptsetup/cryptsetup/-/wikis/FrequentlyAskedQuestions
它支持CBC,PCBC,OFB和CFB,它们是不可并行的.
我在Linux系统中测试了它:
dd if=/dev/zero of=./img count=5242880 bs=1
dd if=/dev/random of=./key count=32 bs=1
sudo cryptsetup open --type plain --cipher aes-cbc-essiv:sha3-256 --key-file ./key --key-size 256 ./img blah
sudo cat /dev/zero > /dev/mapper/blah
sudo cryptsetup close /dev/mapper/blah/\我用十六进制编辑器打开磁盘映像文件,我可以看到所有512个字节的块是不同的,即使整个磁盘映像中的明文是一致的(零)。
我的问题是:
dm-crypt如何使所有512字节块彼此不同,即使它的明文是相同的?
如果我用CBC加密某些内容,并将其拆分为512字节块,则密钥和IV对于每个512字节块都是相同的,因此,如果我加密相同的明文,块将是相等的。
发布于 2022-02-07 07:22:10
他们只是将扇区号或它的某些函数作为to /IV使用。扇区号在加密和解密时已知,因此不需要与密文一起存储,这是很好的,因为没有空间容纳它。
所有这些模式实际上都是高度并行的:磁盘I/O通常以至少4K的倍数发生,并且已经可以以8种方式并行化。子扇区并行性不足是设计特点之一。驱动程序不可能对解密的扇区进行身份验证,因为没有存储身份验证者的空间,因此它必须依靠更高的级别来注意明文是错误的,而且错误越多,就越有可能发生这种情况。
https://crypto.stackexchange.com/questions/98524
复制相似问题