考虑到 AES-256 加密,一个密钥应该加密的最大数据量是多少?分组密码模式/IV/计数器是否也控制限制?
如果说最大容量是 50GB,是指 50GB 的一个文件有限制还是 10GB 的 5 个文件有限制?
考虑到 AES-256 加密,一个密钥应该加密的最大数据量是多少?分组密码模式/IV/计数器是否也控制限制?
如果说最大容量是 50GB,是指 50GB 的一个文件有限制还是 10GB 的 5 个文件有限制?
块密码是一种伪随机排列:密钥在块值空间的可能排列集合中看似随机地选择函数(该空间对于 AES 的大小为 2128,因为它具有128位块)。PRP 的大多数用法都很好,只要它看起来像Pseudorandom 函数。PRP 和 PRF 之间的区别在于,PRP 永远不会为两个不同的输入提供两个相同的输出,而 PRF 可能会这样做。然而,一个随机选择的函数只会给你这样一个随机的碰撞,并且它需要大量的调用:如果处理大小为 N 的块,平均需要 2 N/2 次调用。
翻译:当您使用 AES加密超过 2 64 个块(即 2 68个字节,因为 AES 块是 16 个字节)时,AES 开始看起来更像 PRP 而不是 PRF,这就是您应该停止的地方。那是超过 2.5 亿 TB,这是相当可观的数量。
上述数据量是否被处理为您可能选择称为“文件”的 10 亿、100 亿还是 420 亿都无关紧要。AES 处理 16 字节的块,并且一无所知。另一方面,这并不重要,因为您实际上不会达到 2 个68字节的限制:AES 是用 128 位块精确定义的,因此我们可以加密 TB 的数据而不必担心密钥用完. 指定 AES 时,它旨在替换3DES,其 64 位块大小确实令人担忧(2 32个 8 字节的块,即 32 GB,在当今的机器上可以很容易地达到)。
密钥大小与此无关。这都是关于块大小的,对于 AES 来说是 128 位(不管密钥大小)。
Thomas Pornin(另一只熊)对加密模式如何影响密码的这一方面进行了出色的解释。简短的回答是,如果你使用前一个块的输出来设置下一个块的状态,那么你就有重复自己的风险。
特别是在 OFB 模式下,当模式重复时,您会进入循环。这可能是一个非常紧密的循环,或者在探索所有可能的值之前,循环可能根本不会重复。平均循环大小为N/2位。具体来说,平均而言,总共有 2 N个可能的状态,您将在重复之前运行这些状态中的2 N/2个。由于您的状态计数器通常与您的块大小相同,因此块大小为 128 位,平均而言,您将在重复之前循环 2 64 个块(不是位,不是字节)。
相反,“计数器模式”(“CTR”)操作使用简单的计数器作为密码状态。这意味着您可以保证在重复之前循环遍历整个可能的空间。因此,如果您的状态是 128 位,那么您将在重复之前循环遍历所有 2 128个状态。
值得指出的是,这样大小的空间实际上是无限的。在您必须更改密钥之前,这大约是 5,000,000,000,000,000,000,000,000,000,000,000,000,000 个字节。那是一个 128 位块;使用 256 位块,您可以将零的数量加倍。
CBC 模式(可能是最常见的)使用给定密码块的输出来设置下一个块的状态,这意味着状态受到前一个加密块内容的严重影响。这意味着循环(如果有的话)的存在和大小将部分由被加密的明文决定。这使得数学不太精确,但您应该不会比使用 OFB 模式更差性能。
TL;DR:使用 CTR 模式,不要费心切换键。