如何检测分组密码模式

时间:2013-06-29 16:41:45

标签: aes ecb block-cipher cbc-mode

如何通过 CBC ECB 模式检测邮件是否为隐藏?

我已经创建了一个随机加密 AES 128 CBC ECB 的功能,并且我在明文之间进行了汉堡化密文,但接缝与密码模式无关。

如何检测分组密码模式

提前谢谢

4 个答案:

答案 0 :(得分:10)

答案几乎在问题陈述中给出:

  

请记住,ECB的问题在于它是无国籍的   确定性;相同的16字节明文块将始终产生   相同的16字节密文。

因此,假设一些重复的明文块出现在相同的密文块偏移处,我们可以简单地继续寻找各种长度的重复密文块。

答案 1 :(得分:2)

我正在做同样的问题集,刚刚完成了这个问题(使用clojure)。

我的第一个提示是,如果你使用支持头等功能/ lambdas的语言,你需要做的更清楚。

无论如何,让我们稍微分解一下这个问题:

首先,只需编写一个函数来验证黑盒子是否用ecb加密数据。你会怎么做?

它可能看起来像(下面的伪代码)

function boolean isEcbBlackbox(func f) 
{   //what input can I use to determine this?
    result = f("chosen input")
    if(result ...) {//what property of result should I look for?
        true
    } else {
        false
    }
}

请记住,ECB的关键弱点是将相同的明文块加密为相同的密文块。

编辑:挑战现在是公开的,所以我将链接到我的解决方案:

https://github.com/dustinconrad/crypto-tutorial/blob/master/src/crypto_tutorial/lib/block.clj#L118

答案 2 :(得分:0)

根据密码文本%16或24或32计算块大小,这些密码永远是== 0

汉明距离应该通过密码块1和其他密码块来完成

如果我们使用浮点算术平均到每个字节,如果该值低于某个阈值,则它是ECB。

答案 3 :(得分:-3)

我知道你正在做的确切运动,我现在正在做这件事。我建议对加密字符串执行Frequency Analysis(不要忘记字符串可能是base64'd或hex)。如果你得到的频率分布与你编码的字符串的语言相匹配,那么可以安全地假设它在ECB中,否则它可能是CBC。

我不知道这是否真的有效,因为我现在只是在做练习,但这是一个开始。

修改

我赶紧回答这个问题,觉得我应该多解释一下。如果它在ECB模式下加密,则频率分析应显示正常的分布样式,而不管字符串的开头/结尾和使用的键是否填充。 CBC模式下的加密应该具有非常随机且可能是平坦的分布。