【发布时间】:2010-10-23 14:46:49
【问题描述】:
我需要一个非常、非常快速的一对一算法。该算法不需要是牢不可破的。相当强大就足够了,但它必须是闪电般的速度。我将在硬件中实现它。面积也是一个问题,所以它不应该使用太多逻辑。
它应该是一个函数 f_N(x),其输入是一个 N 位数,其输出是一个 N 位数。 N 是一个常数,可能在 20-70 之间。该函数必须是一对一的。 (即可逆,意味着可以解密。解密速度无关紧要。)
我需要在 3ns 内加密,即每秒大约 333M 输入。例如,DES 每秒大约 50Mbits。我需要每秒 333M 输入。
到目前为止,我一直在使用大约 6 轮的 Feistel 密码。这似乎需要大约 3ns。
建议?
更多笔记
有一些问题,所以我会解释一下。我需要将键放入哈希表中。标准方法是散列输入键并将结果用作表的索引。表中的每一行都必须存储原始键。 Information theory 告诉我们,表的行实际上不需要和输入键一样宽,而是和输入键一样宽 less桌子。例如:
- 输入:x(N 位)
- 哈希:x%128(8 位)
- 验证器:floor(x/128)(N-8 位)
在整数通常具有相同宽度但我在硬件中进行的 CPU 上会很愚蠢。
x%128 是一个容易破解的哈希。事实上,如果输入键仅在前几位不同,您将意外破坏散列。我想要一个不会被意外破坏的哈希,甚至可能很难被故意破坏。我还尝试了LFSR。 LFSR 速度很快,但两个长度相等的 LFSR 会生成线性相关的哈希结果。 (如果 f(x) 和 g(x) 对两个不同的多项式给出相同的哈希,则 f(x+1) 和 g(x+1) 很容易相关。)
所以,我需要一个具有 N 位输入和 V 位、H 位输出 (V+H=N) 的函数,其中很难找到两个长度为 N 的输入,以便两者都输出相同的 H。加密符合要求,因为它使输出的长度与输入的长度相同,并且难以逆转。加密以外的其他方法也可能起作用,尽管我想要的似乎几乎就是加密的定义。
很抱歉没有提前解释所有这些。希望这可以澄清事情。
【问题讨论】:
-
您对 Andrew Hare 帖子的评论表明您需要加密哈希。这很重要,因为 R.A. 的答案 (TEA) 不适合用作哈希 - XBox 安全性严重依赖它。
-
如果需要哈希而不是加密算法,请相应地编辑您的问题,因为存在很大差异。但是你确实提到它需要是可逆的......
-
你还没有解释你的 6 轮 feistel 密码有什么问题。这听起来是个不错的方法。
标签: encryption hardware cryptography