我读过AES CTR只有在正确使用时才是安全的。因此,我想确保我正确地使用它。
发布于 2022-01-21 12:46:03
在这里,我们做了一个区分。nonce \mathbin\|counterpart构成IV
不,这不是一个问题,在CTR模式,阅读更多的[1]。IV= (nonce\mathbin\|counterpart)被加密,密文用明文进行x。
只要(IV,key)对不再重复,假设每次加密都从0开始,使用新的nonce或新密钥,那么16字节就没有问题。
如果有重复,那么保密性就会丢失。
我知道IV永远不能重复,但是万一这个条件需要多少次迭代才能破解系统。我是说同一个计数器的两个重复还是100个?
两对就足以打破婴儿床和拖曳技术的机密性。现在它是自动化的[2]。如果你知道其中的一个,那么用x-或找到另一个就很简单了。
最后但并非最不重要的一点是,使用AES256 over AES128加密16字节消息是否增加了安全性?
只要使用得当,CTR模式就是CPA安全模式。AES-128是安全的(主要是)[3],但是使用AES-256,即使是Grover机器提供的量子对手也是安全的。
请注意,在CTR模式下,您只能获得CPA安全性,即没有完整性和身份验证。为了实现完整性和认证,可以使用AES-GCM(与SIV)。SIV模式使用消息来避免IV问题。当IV重复时,它只泄漏消息的相等性,而不泄漏内容。
正确使用AES CTR
相反,人们可以使用XChaCha20-Poly1305与192位的非(IV,key)发生是可以忽略不计的。您也将获得身份验证和完整性。而且,由于XChaCha20模式是为PRF设计的,所以更适合于使用CTR模式( XChaCha20内部使用CTR )。
发布于 2022-01-21 14:24:33
对于CTR,要求计数器值不重复(对于给定的键)。计数器模式的最大缺点是,不重复IV (初始计数器值)是不够的。
计数器值是否可预测并不重要。如果您可以安排计数器从0开始,每个消息块增加1,这是使用CTR的一个非常好的方法。注意,对于多条消息,这意味着第一条消息使用计数器值0, 1, 2, \ldots, a,第二条消息使用计数器值a+1, a+2, \ldots, b,第三条消息使用b+1, b+2, \ldots, c,依此类推。
让我来说明重复的计数器值出了什么问题。将E设为块加密函数,并为计数器值n作为块的编码编写\langle n\rangle。如果您发送两个双块消息P_0||P_1和P'_0||P'_1 (每个P^{(j)}_i代表一个块),一个是IV n,另一个是IV n+1,那么相应的密文是C_0||C_1 = (E(\langle n\rangle) \oplus P_0) || (E(\langle n+1\rangle) \oplus P_1)和C'_0||C'_1 = (E(\langle n+1\rangle) \oplus P'_0) || (E(\langle n+2\rangle) \oplus P_1)。注意这两个密文是如何使用E(\langle n+1\rangle)的。对手可以xor使用相同计数器值的两个密文块,它们的加密掩码会取消:C_1 \oplus C'_0 = P_1 \oplus P'_0。这通常足以猜出部分或全部明文块。例如,许多消息包含一个已知的或大部分已知的标题,在这个重复计数器值的示例中,这将转化为显示第一个消息中标头后面的16个字节的内容。
如果您无法跟踪使用了哪些计数器值,避免重复的一个常见技术是为IV使用一个16字节的随机值,这使得重复使用计数器值的可能性很小,以至于在实践中不会发生这种情况。
在大多数情况下,您应该使用标准的认证加密(AEAD)模式,例如SIV或GCM或GCM或CCM。这有两个好处。一种是对密文进行身份验证:解密时,您可以验证密文没有被更改。(没有密匙是不可能验证密文的真实性的。一个对手仍然可以交换两条真正的信息,所以真实性并不意味着完整。)使用标准AEAD模式的另一个优点是,对于安全性来说,计数器值不重复就足够了:没有其他微妙的条件。SIV模式的优点是,即使IV偶然重复,这只能显示消息是相同的,它不会透露任何关于他们的内容。
使用AES-256而不是AES-128只会提高对量子计算机的安全性,以防它们变得实用.
https://crypto.stackexchange.com/questions/98239
复制相似问题