首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用AES CTR

正确使用AES CTR
EN

Cryptography用户
提问于 2022-01-21 12:27:47
回答 2查看 1.4K关注 0票数 3

我读过AES CTR只有在正确使用时才是安全的。因此,我想确保我正确地使用它。

  1. 初始向量(IV)只能使用一次,不一定是随机的。对IV的一部分使用计数器是安全的,而另一部分只是一些const文本。计数器以明文发送给每个人,而消息的敏感部分则被加密。下一个IV是可预测的问题吗?
  2. 我知道IV永远不能重复,但是万一这个条件需要多少次迭代才能破解系统。我是说同一个计数器的两个重复还是100个?
  3. 最后但同样重要的是,使用AES-256比AES-128加密16字节消息是否增加了安全性?
EN

回答 2

Cryptography用户

回答已采纳

发布于 2022-01-21 12:46:03

在这里,我们做了一个区分。nonce \mathbin\|counterpart构成IV

  • 下一个IV是可预测的问题吗?

不,这不是一个问题,在CTR模式,阅读更多的[1]IV= (nonce\mathbin\|counterpart)被加密,密文用明文进行x。

C_i = \operatorname{AES-CTR}(nonce\mathbin\|encode(i)) \oplus P_i

只要(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

您的义务:作为安全合同

  • 选择大小为256的统一随机密钥k,并始终保持其机密性。
  • 选择IV并确保(k,IV)从不重复即使计数器递增;
    • 使用确定性计数器或LFSR来跟踪nonce,确保在出现错误/系统暂停时交换新的密钥,因为它们可能无法写入最后使用的nonce
    • 或者,使用随机nonce,确保您在同一键下的nonce冲突较低。
    • 始终从0启动计数器。如果计数器不是从0开始的,那么有一条危险的路径可能导致IV重复,如果现在是相同的话。

  • 对消息进行加密,并确保其长度不超过2^{32}
    • 保证没有区别,并且
    • 保证计数器永远不会通过所有的1状态,即永远不会超过计数器的最大值。

  • 存起来吧。

你得到了什么,

  • 注册会计师的安全,仅此而已!

相反,人们可以使用XChaCha20-Poly1305与192位的非(IV,key)发生是可以忽略不计的。您也将获得身份验证和完整性。而且,由于XChaCha20模式是为PRF设计的,所以更适合于使用CTR模式( XChaCha20内部使用CTR )。

票数 2
EN

Cryptography用户

发布于 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_1P'_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只会提高对量子计算机的安全性,以防它们变得实用.

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/98239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档