如何测试加密算法的质量?

时间:2009-05-04 13:10:55

标签: testing encryption random cryptography probability

我想测试加密算法的强度。它不一定非常强大,它只是必须抵制意外破解,并说,一个坚定的黑客有10个小时的浪费。 (我写了the crypto algorithm。是的,我知道这通常是一个坏主意,但我认为我有充分的理由。)

我应该做什么样的测试?到目前为止,我已经尝试过这个:

  • 生成随机A。
  • 翻转A的一个随机位以生成B.
  • 检查加密中的1的数量(a)XOR加密(b)是否符合泊松分布(除了XOR从不输出0)。

还有其他建议的测试吗?

关于加密

这是一个标准的Fiestel密码设计用于3ns 并且完全是组合的,没有寄存器。 (这比DES / AES /等快几个数量级。)我在3ns内做了尽可能多的回合,只有大约6次。

首先,我置换输入位的顺序。

然后对于输入的左半部分的每一位I XOR与其一起输出函数F. F输入3位并输出1位。 F的3个输入位从输入的右半部分中选择。 F的输出是{00001111}的排列,因此F是平衡的。从右半部分的位中选择F的3个输入位,使得右半部分的每个位使用相同的次数(或尽可能接近)。每个“F”随机且独立地生成一次。

接下来,我交换结果的左右两半再做一次。同样,新输入的每个位都有新的“F”。

所有这一轮。我做了6次,每轮都有随机的,独立生成的F函数。 6轮需要大约3ns。我也试过改变轮数和F的输入数量。

7 个答案:

答案 0 :(得分:21)

从网上下载制作低等级脏装置的说明,用华盛顿特区的街道地图加盖,然后对其加密并发送至obama@whitehouse.gov。

您的加密算法的强度将与穿着黑色西装的男士出现在门口的时间成反比。

请记住,这可能是一次性的实验,至少在你在Gitmo度过的几年中是这样的: - )

答案 1 :(得分:11)

我怀疑通常的答案是“如果你需要问这个问题,你可以期待的最好的是姊妹级加密。”


但是,如果必须,您可以首先将通常的randnomness测试应用于输出(How to test random numbers?),包括字节,单词,长词等。

如果你不能通过,你知道它没有任何进一步的工作是弱的。请注意,通过此操作可确保其强大。

答案 2 :(得分:11)

在互联网上发布,看看是否有人可以破解它(NIST / NSA用AES,SHA-3等做了什么。)。

我会看看所有常见的攻击。<​​/ p>

确定有人必须暴力查找明文的密钥空间有多大,是否比所有可能的密钥小?两个密钥是否会产生相同的密文?

你能选择一个能在密文中显示密钥的明文吗?

答案 3 :(得分:8)

如果你不得不问 - 这是一个很好的迹象,表明你不应该自己编写。

如果你只是想写一个作为学习练习,那么Kirtan建议的加密酷刑测试可能是好的。但是,如果您计划真正将此加密用于真正需要安全性的某些目的,那么该工具将无法替代已发布的算法经过多年的专家分析。

即使您的算法生成看起来随机的输出,也不意味着它必然是安全的。

答案 4 :(得分:6)

我几乎可以保证你没有充分的理由。但是,如果您这样做,请提交给您的同行和NIST审核,当AES出现更换时。实际上知道自己在做什么的人的持续检查是了解的唯一方法。

答案 5 :(得分:4)

加密算法的统计评估是必要的,但不足以确保其安全。许多算法具有已知的弱点或潜在弱点,这些弱点或潜在弱点与加密的熵和统计特性无关。看看RSA(取决于分解很难),MD5(collision attacks)和其他算法。这些人经历了多年的严谨探索。

答案 6 :(得分:1)

遵循不写自己的建议。这并不意味着您必须引入一个巨大的复杂ssl库。看看类似于TEA(并且是衍生物)的东西,它们可以在一行中以十几行编码。