首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用AES-GCM的规则是什么?

正确使用AES-GCM的规则是什么?
EN

Cryptography用户
提问于 2020-10-04 21:24:43
回答 1查看 4.5K关注 0票数 10

当使用AES-GCM时,我知道每当我用相同的键调用AES-GCM算法时,我都应该使用一个新的初始化向量。要正确使用AES-GCM,还必须遵循哪些其他规则?

我正在寻找一个要点清单,我可以遵循作为一个开发人员的建议,以及忽略这些建议的后果。

我正在使用AES-GCM的Java实现。

EN

回答 1

Cryptography用户

回答已采纳

发布于 2020-10-04 22:21:16

规则或您的义务

  1. 密钥生成:随机选择密钥制服,并将其保密。
  2. (Key,IV) Resue:绝不能再使用(IV,Key)对。
  3. 最大文件大小:推荐的IV是96位,所以32位计数器左。这意味着计数器最多只能计数2^{32}。前两个被使用,所以最多有2^{32}-2调用的CTR加密。因此,对于IV,最多可以对2^{32} - 2块、2^{36} - 32字节或2^{39} - 256位进行加密。这是大约\approx 68千兆字节。你应该先停下来,看看更多的建议部分。
  4. 解密前检查身份验证标记。如果有错配,抛出一个错误。
  5. 标签大小:使用推荐的标签大小128位.你不应该削减太多的标签大小。有关标记安全性的详细信息,请参阅以下漂亮的帖子:

  6. 键大小:喜欢256位,尽管是128个位AES是安全的。在AES中,如果使用256位AES而不是128位AES,将在%40左右减速.
  7. IV大小:一个可以提供超过96位的IV,然而,这将导致一个附加GHASH呼叫转换成96位。较大的\textbf{if } \operatorname{len}(IV) = 96 \textbf{ then } Y_0 = IV \mathbin\| 0^{31}1 \textbf{ else } Y_0 = \operatorname{GHASH}(H, \{\}, IV)丢失了计数器/LFSR的确定性IV代。坚持使用96位。

Advices

  1. 对于IV代,NIST建议有两种类型的800-38D
    1. 确定性构造以短的方式使用计数器/LFSR来防止IV在同一密钥下重用。一个人需要存储最后的计数器/阶段来前进。在系统故障期间,这些值可能无法正确恢复,组合模式半随机、半计数器/LFSR可以消除这些值或以新键启动。此计数器不应与CTR加密中使用的内部计数器混淆。带有NIST的LFSR建议的确定性IV生成对于AES-GCM的硬件实现非常有效,如这个答案中所指出的那样。
    2. 基于RBG的构造RGB是一个随机比特生成器.简而言之,NIST:随机场要么由组成
      1. 来自已批准的RBG的具有足够安全强度的r(i)位输出字符串,或
      2. r(i)-bit增量函数应用于给定密钥的前文IV随机场的结果

  2. 随机IV与顺序IV,AES-GCM最佳工作96位IV,当IV是连续产生。如果您选择随机IV,然后由于在同一密钥下的IV冲突,那么在同一密钥下要加密的消息数量的限制要比顺序96位IV小得多。
  3. 限制消息大小,减少伪造:限制消息大小,以消除对手的伪造优势。它在最大消息大小(例如,平均值)上是线性的:仅仅发送一条2^{36}-byte消息就会使对手的任务比将所有消息限制在2^{14}上要容易400万倍。
  4. 限制消息大小阻止DOS攻击:限制消息大小以防止拒绝服务,方法是在拒绝伪造之前选择内存大小可以拒绝的大小。
  5. 如果您需要使用AES-128;在密钥协商期间,最好是双方不仅在密钥上达成一致,而且在随机初始计数器上达成一致。然后使用计数器/LFSR对其进行增量。

更深的

  1. (IV,密钥)重用:这可能导致机密性的丢失,因为底层加密是由CTR模式执行的。CTR模式将分组密码转换为流密码。和所有流密码一样,如果密钥流被重用,婴儿床拖动技术可以显示消息。一旦消息被删除,密钥流也会被显示出来。然而,这并不意味着AES在这里被打破了。一个仍然需要执行KPA攻击,AES已经知道是安全的。重用还可以产生伪造的灾难性结果。

感谢SqueamishOssifrage对聊天的评论和建议。

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

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

复制
相关文章

相似问题

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