是否可以实现具有 64 位 I/O 块大小的 AES?

Is it possible to implement AES with a 64-bit I/O block size?

我正在开发一个具有非常特定加密要求的应用程序:
我们需要 encrypt/decrypt 个单独的 64 位值,以保护我们内部架构的某些部分免受通过我们的 public 网络端点进行的逆向工程。

问题是,现有的64位加密方式(比如3DES)不够安全,不能满足我们的要求(据我所知)。
它们的性能也比 AES 慢,这是另一个痛点。

我的问题是,我们能否使用 64 位块输入和输出来实施 AES?
我们是否必须创建修改后的 AES 算法? (如果我们这样做,也不会完全破坏交易。)

没有。 AES 在 4x4 矩阵上指定了四种基本操作:SubBytesShiftRowsMixColumns添加密钥

“8 字节 AES”将是一种根本不同的密码。特别是 ShiftRowsMixColumns 操作是基于方阵的概念。因此,任何 "AES-like" 块密码的块大小都需要是 N (4, 9, 16, ...) 的平方。

A​​ES 仅针对 128 位块大小定义。如果有减少块大小的方法,它就不会再是 AES 了。分组密码并不是决定您可以加密什么的唯一因素。操作模式决定了分组密码的实际应用方式。

如果您的明文大小有限,您可以在流模式下使用 AES,例如 CTR mode(加密计数器并将结果块与明文进行异或运算)。这种模式下的密文与明文具有完全相同的长度。唯一的问题是,为了安全起见,同一密钥下的每个密文的随机数 (IV) 必须是唯一的。如果您的系统可以跟踪随机数(它们可以是简单的 96 位全局计数器,如果明文从不长于 128 位,则它们甚至可以是 128 位全局计数器),那么您应该可以满足你的要求。

点击率加密:

如果您有 64 位输入,那么您可以添加另外 64 位可移动填充以提供 128 位。通常使用 AES 加密 128 位。解密时,只需删除解密后的填充即可。有许多不同的可能填充方案。您会发现许多 AES 库中内置了一些,例如 PKCS#7。

对于固定长度的 64 位输入,您可以使用随机填充,前提是您始终知道哪些 64 位是数据,哪些 64 位是填充。将两者混淆会产生有害的后果。

预计到达时间:对于 64 位值,您可以将它们中的两个连接起来形成一个 128 位值。解密后拆分回64位