我看到的这些问题有点接近,但不完全是。
加密方法AES-256-Rijndael-CBC:
如果我们有多个密码块,如下所示:{iv}{加密块}.
我之前曾提到,我们不应该在其他块中使用相同的IV,因为块可以是相同的,所以我们需要这样的东西:
{IV+cipheredchunk}{IV+chiphered区块}{IV+chiphered区块}
我的问题是,是否可以避免为每个块添加16字节长的随机IV,也许我们可以对第一个块使用一个完全随机的IV,对于下一个块可以使用该块的前16个字节作为iv?
我们能保证加密的安全吗?
编辑:
在AES256 CBC中,每个“加密块”都是一个完整完成的加密消息。因此,例如,如果我们有整个明文消息来加密"abcdefghijk“,并且我们说每一块都是3个字母/字节,那么我们就可以:
AES256CBC加密"abc“->加密文本(”加密块“)
AES256CBC加密"def“->加密文本(”加密块“)
AES256CBC加密"ghi“->加密文本(”加密块“)
AES256CBC加密"jk“->加密文本(”加密块“)
我之所以这么做,而不是一次加密整个明文,是因为我处理的是令人难以置信的大文件的许多GB,没有任何程序或计算机能够同时处理。
因此,我试图在AES256 CBC模式下对文件的小部分进行加密,并将它们相互附加在一起:)
发布于 2019-12-26 22:42:06
您确实可以避免为每个块提供一个显式IV,而使用前一个加密的最后一个密文块确实是一种方法。但是:
请注意,您想要做的事情有无数的缺陷,如果您使用由密码专家编写的库,或者至少复制他们的一个设计(并成功地复制),那么风险就小得多。例如,流行的library库的最新版本包括加密流和文件加密模块,该库旨在安全地执行这种经过验证的常量内存块加密,但要小心执行:
此高级API使用秘密密钥加密消息序列,或将单个消息拆分为任意数量的块,并具有以下属性:
此API可用于安全地向对等方发送有序的消息序列。由于流的长度是不受限制的,因此也可以使用它来加密文件,而不管它们的大小。它透明地生成非key并自动处理键旋转。
基于CBC的方法并不能实现所有这一切。
尽管如此,为了理论上的考虑,避免CBC中密文扩展的另一种方法是使用第二个密钥和欧洲央行加密来从计数器或当前生成隐式IVs。首先生成和共享或派生两个分组密码密钥k_1 (用于IV生成)和k_2 (用于加密)和一个公共的\mathrm{IV}。然后,对于每个编号的块m_1, \dots, m_n,您可以这样加密每个块:
由于接收方知道k_1、k_2和\mathrm{IV},并且也可以计数,因此它们可以重构\mathrm{IV}_i值,而不必由发送方传输。
发布于 2019-12-26 16:11:32
CBC需要一个新的不可预测的IV来进行新的加密,它可以是多个块,并且需要填充。
如果你仔细看,实际上这就是CBC模式所做的。
只需使用最后一个密文块作为下一部分的IV。将加密和继续分割是没有错的。
CBC模式过时,只能提供机密性。在今天的标准中,我们使用了AES-GCM和Chacha20-Poly1305等认证加密模式,可以提供完全的机密性、完整性和身份验证。
)的一部分。
假设您将文件划分为n部件。使用AES-GCM加密它们中的每一个,并添加以下内容。在加密前为每个部分加上前缀如下;
有了这些,您现在有一个链,可以控制后,解密。你可以检测,添加,删除。订单在您的控制之下,您可以发送,即使没有订单。但是,您需要检查前缀。
您还可以
https://crypto.stackexchange.com/questions/76657
复制相似问题