0

背景

我有一个 Lua 环境,它内置了河豚加密 (CBC, IV = {00..0})。AES 不可用,纯 Lua AES 实现会变慢。

问题

我想根据RFC 4493中指定的算法生成 CMAC,该算法基于 AES。由于我需要这个 CMAC 在 Lua 环境和我自己构建的另一个程序之间进行交换,我想我只是将所有 AES crypt 函数更改为 Blowfish 函数。

每个 CMAC 的输入长度为 26 字节,而不同 CMAC 代之间只有几个字节发生变化。例如:

AAAAAAAAAAAA BA AACCCCCCCDDDDDDDDDFFFFFFFFFFFFFFFFFFFF
AAAAAAAAAAAA AB AACCCCCCCDDDDDDDDDFFFFFFFFFFFFFFFFFFFF

这导致了问题,即 CMAC 的第一部分对于每个输入都是相同的,只有最后一部分发生了变化:

0123456789ABCDEF 48534593402BC93D
0123456789ABCDEF DF82BC920DA92383 

这是河豚算法的问题吗?我能做些什么(更改 CMAC 算法)来确保我得到不同的结果,尤其是对输入只有很小的更改?

4

2 回答 2

1

按照设计,CMAC 可以与 Blowfish 等 64 位分组密码一起使用。但输出也将是 64 位的。您不应该更改算法中的任何内容。请参阅http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf以供参考。另请注意,64 位 MAC 的安全性非常低。

于 2013-06-23T05:26:09.820 回答
0

CMAC上的维基百科文章对算法进行了解释。

AES 是 128 位分组密码,而 Blowfish 是 64 位分组密码。CMAC 算法的几个部分取决于块大小。你必须重写那些部分。

一般来说,自己实现加密算法并不是一个好主意;许多微妙的事情都可能出错。如果没有可用的加密库,Lua 可能不是编写使用加密的应用程序的好选择。

于 2013-06-23T11:19:07.290 回答