首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES-GCM和标签长度

AES-GCM和标签长度
EN

Cryptography用户
提问于 2023-03-13 07:29:49
回答 2查看 99关注 0票数 1

由于协议限制,我只能为tx (不包括报头)输入24字节的数据,如果我使用AES_GCM加密数据,我知道我不需要担心填充。

例如,如果我的数据是22个字节,我将得到一个22字节的加密输出。所以,我在AES-GCM或AES-CTR上都没有发现。然而,我发现AES-CTR流密码在Microsoft密码库中是不可用的,因此决定使用AES-GCM。但是,我再次观察到,AES-GCM的输出是密码文本和标记.建议此标记字段的值至少为32个字节。我最初考虑使用两个字节的CRC,所以我的数据如下:

ciphertex + CRC16 = 24 bytes

但是当我读到关于AES-GCM的文章时,我发现标记字段和CRC做的工作是一样的。如果我指定了用于加密的标记长度为2个字节,可以吗?另一个选项是使用CRC16,因为它只需要2个字节。

另一个信息是我的钥匙/IV对每隔1小时不断更换一次。请建议什么是最好的出路-哪种加密方法是最好的

EN

回答 2

Cryptography用户

发布于 2023-04-12 11:44:06

如果我使用AES_GCM加密我的数据,我知道我不需要担心填充。

正确的。

如果我的数据是22个字节,我将得到一个22字节加密的输出。

这不算初始化向量。通常的大小是12个字节,通常作为密文的头。您可以缩小它的大小(并且有带有零的接收器垫),但它必须保持足够宽,使IV不会被重复使用。可以是个柜台。如果有效载荷的字段不需要加密,每次使用时都会改变(例如,时间保证单调,因为它能幸免于重置),那么它们可以安全地作为IV使用(并从加密的内容中删除)。

建议此标记字段的值至少为32个字节。

不是的。标记字段最多为16个字节(128位)。在某些应用程序中,将其减少到4字节(32位)是可以的。如果标记是b-bit,那么如果n试图获得验证设备接受的虚假消息,则会导致一个消息被接受的概率不超过n/2^b。例如,使用一个4字节的标记,如果对手在一天内每毫秒提交一条消息,那么他们成功的概率是2%。

最小标记大小没有硬限制(除非由某个API强制执行)。如果将其减少到2个字节,每秒提交一条消息一小时的对手成功的概率为5.5%。如果您的接受设备在少量错误之后锁定,这可能是可以接受的(但这是以牺牲可用性/抵抗拒绝服务为代价的)。

其他选择是使用CRC16

不是的!不要在受CRC16保护的数据上使用AES-CTR (或等效的AES-GCM无标记):获取一条消息的对手可以将其更改为将被接受的另一条消息,这是利用CRC和CTR加密的线性性进行的基本攻击。

我的钥匙/IV对每隔1小时更换一次。

如果你每小时加密一次以上,就不要这么做!不能重复使用密钥/IV对。AES-GCM (和AES-CTR)对此极为脆弱.即使在理论上,如果AES密钥为128位,则重用IV也是不可取的,因为它允许多目标攻击。

同样,您必须想出一种在每次加密时更改IV的方法,至少在重复使用相同的密钥时是这样的。两种最标准的方法是:

  • 一个宽的随机IV (标准是12字节),您不会喜欢它。
  • 使用AES-GCM-SIV,但是开销更糟。
  • 专用计数器,它可以更窄(例如两个字节),但必须是不会重复的(对于给定的键)。需要考虑的问题包括对手重置设备/计数器或使其溢出和循环的能力。
  • 使用不需要加密和自然更改的数据字段,并且不会重复(对于给定的密钥)。我想这是你最好的选择。

您还可以在加密之前使用更好的数据编码来节省一些空间。例如,12位小数可以容纳5个字节。

票数 2
EN

Cryptography用户

发布于 2023-03-13 07:47:29

CRC16是线性的,如果我们将它的真实性委托给它,那么将标记截断到两个八进制将是一种选择(只要它对您的目的足够安全)。

每次调用加密时,IV都必须更改--否则它将重用“密码流”,而且它可能会被破坏。

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

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

复制
相关文章

相似问题

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