何时使用 NIST AES 密钥包装?

信息安全 加密 AES
2021-08-25 22:05:09

密钥包装结构是一类对称加密算法,旨在封装(加密)加密密钥材料。Key Wrap 算法适用于以下应用:(a) 在不受信任的存储中保护密钥,或 (b) 通过不受信任的通信网络传输密钥。这些结构通常由标准原语构建,例如分组密码和密码散列函数。

使用 AES 密钥包装而不是普通的 AES 有什么优势,例如 CCM 模式(带有 CBC-MAC 的计数器)?优缺点都有什么?

除了我的主要资源NIST 密钥包装规范之外,有人能指出我关于 AES 密钥包装的好读物/论文吗?

或者,有人可以简短地解释一下它是如何工作的吗?

1个回答

可以将密钥包装算法设想为使用 AES 作为轮函数的扩展Feistel 方案,并结合用作粗略MAC的运行状态。如果您查看算法定义,您将看到对于每轮s轮,更新一个 64 位数据块,其中包含一个 AES 调用和另一个 64 位块的组合函数。这些块也被“旋转”,以便下一轮更新另一个块,依此类推。这实际上类似于将在完整明文上运行的大块密码定义为单个“块”。

随着对称加密系统的发展,这个效率非常低,因为它涉及每个输入字节平均 1.5 次 AES 调用(12 次 64 位块的 AES 调用),而GCM每个输入字节仅使用 0.0625 次 AES 调用(一个 AES每个 128 位块)。它还需要多次处理每个输入字节,因此必须完全缓冲整个明文消息:这对于批量加密来说是不够的。

密钥包装算法旨在保护密钥,并且遭受了一些仪式性的过度杀伤:大量累积的 AES 调用希望它会产生如此多的加扰,结果会很强大。这不是一个糟糕的选择。如果我们把它看成一个扩展的 Feistel 密码,那么有一些经验数据,许多轮次会带来安全性。不过,这应该值得进行一些体面的分析,而且据我所知,这还没有发生。这可能与这种密钥包装算法在野外似乎没有被广泛使用的事实有关。

AES 密钥包装算法的良好属性包括:

  • 它不需要随机性随机性在许多嵌入式系统上是一种稀缺资源,因此拥有一个没有它的安全方案是很好的。

  • 它不需要state如果只保留一个计数器,则无需修改 EEPROM 或 Flash 位。

  • 它是确定性的。这意味着用相同的密钥包装相同的明文将产生相同的字节序列。确定性大多是中立的,但偶尔在某些协议中很有用。

  • 它使用单一原语,即“AES”:代码大小也是嵌入式系统上的稀缺资源。

  • 它的大小开销很小:它只在输入大小上增加了 64 位,并且包含一个 MAC,所以这大约是可以实现的最小的。

不好的属性主要是这些:

  • 该算法效率低下,每个字节的 CPU 成本很高,并且需要完全缓冲。这就是为什么该算法适用于密钥包装,其中“密钥”是短实体,将包装成本保持在合理的范围内。

  • 尽管 AES 密钥包装算法已有 12 年历史,但它并没有从加密社区的大量分析甚至关注中受益,这可能是因为它的用例限制。