AES的变量是什么?

信息安全 AES
2021-09-10 02:01:00

AES 是一种标准加密例程,可以在多种语言中一致使用,假设所有变量都匹配。我的问题是,变量是什么。我知道以下内容

  • 变体(这是 AES-256,还是简单的 AES-128)

  • 要加密的数据

  • 密钥(常用 128 位)

  • 初始化向量 - 现在这是什么?它也是128个预定位吗?

    我通过阅读 Wikipedia 了解到,IV 用于防止整个流中的两个相同的 16 位块在加密后相同,因为这会使数据更容易猜测。

  • 还有模式吗?

    我猜这将是填充/流式传输,而不是所需的 128 位长度..但是有多少模式,或者这是多样化的?

对不起,如果我弄错了,但我很困惑,并且想要一个清晰的变量列表。我想我都明白了,但我不确定我是否做对了。

2个回答

AES 密码只有一个参数:密钥间接地,还定义了 AES 变体。AES-128 用于 16 字节密钥,AES-192 用于 24 字节密钥,AES-256 用于 32 字节密钥。

我不认为输入数据是一个参数。

与您具有链接模式正交,这是您设法加密/解密与密码的块大小不匹配的数据片段的方式。例如 ECB、CBC、CFB 等。我使用通用术语密码,因为链接模式适用于任何分组密码,而 AES 恰好是其中之一(例如,您有 TDES、Blowfish 等),具有恒定的分组大小为 16 字节。

一些链接模式(CBC、OFB、CFB、GCM)需要一个初始化向量,它通常与密码的块大小相匹配。在某些情况下,IV 称为nonce,它可能小于块大小(例如 CTR)。

最后,一些链接模式可能要求明文的长度是某个值的倍数(例如,CBC 的块大小,CFB 的段大小)。在这些情况下,您可能还需要定义特定的填充算法(例如 PKCS7 样式)。

AES 本身具有三种变体:AES-128、AES-192 和 AES-256。在内部,算法具有非常相似的结构。该数字是密钥的长度(以位为单位),即预先安排的秘密的长度(AES 是共享秘密密码)。更大的数字不仅意味着更长的密钥,而且还意味着使用密钥和输入完成更多的工作以产生输出。

这三种算法中的每一种都指定了两个函数encryptdecrypt这两个函数都将一个称为键的n位值(n = 128、192 或 256)作为输入,将一个称为输入块的 128 位值作为输入,并产生一个称为输出块的 128 位值作为输出。输入块encrypt称为明文,输出块称为密文;对于decrypt,角色互换。

encrypt(key, plaintext) = ciphertext
decrypt(key, ciphertext) = plaintext

AES 是一种分组密码它仅指定如何加密或解密 128 位块。如果您的数据比这更短或更长,您需要更复杂的东西:您需要有一种 操作模式,通常称为链接模式,因为它指定如何一个接一个地处理一个块。链接模式的选择很大程度上独立于块处理算法的选择。

一些链接模式只需要键和输入。例如,最简单的模式ECB只是说将输入切割成适当大小的块,应用加密/解密算法,并将输出块粘贴在一起。这种模式有很多缺陷(例如,如果它们与块边界对齐,您可以在输入中发现重复;您可以判断两个加密消息是否相同,因为它们具有相同的密文)。

许多链接模式需要额外的输入,通常是一个块大小。它通常以某种方式与第一个输入块混合,称为初始化向量(通常缩写为IV)。IV 通常是随机选择的;这是某些模式的要求,而对于其他模式,永远不要为相同的密钥选择相同的 IV 两次就足够了(随机抽取确保了这一点)。IV 用于(至少)使具有相同密钥的相同明文的两次加密不同。使用随机 IV 的流行模式是CBC另一种流行的模式是CTR(计数器)它的 IV 更恰当地称为nonce,因为它不必是随机的,只需不重复。

仅当输入是块大小的倍数时,才将输入分解为块。否则,通常的过程是在开始时拆分尽可能多的块,并对最后的部分块应用填充方案。尽管填充往往意味着添加一些位来组成一个完整的块,但安全填充并不是那么简单:带有一些填充P的部分块B有与恰好是BP的完整块混淆的风险. 好的填充方案必须对所有消息应用一些填充,即使是那些恰好是确切数量的块的消息。一些操作模式强制使用特定的填充方案,而其他操作模式与填充无关。加密库通常要求块密码函数的输入仅为完整块,将填充任务留给调用者。

有些模式可以用分组密码制作加密/解密算法以外的东西。CMAC等模式制作消息验证码,即基于共享秘密的签名。GCM等模式既加密又签名( AES- n -GCM-encrypt(key, IV, tag, plaintext) 的输出既是密文又是 MAC)。