17

如何检测消息是否通过CBCECB模式加密?

我创建了一个随机加密AES 128 CBCECB的函数,并且我在明文密文之间进行了汉密处理,但接缝与密码模式无关。

如何检测分组密码模式

先感谢您

4

4 回答 4

11

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

请记住,欧洲央行的问题在于它是无状态的和确定性的;相同的 16 字节明文块将始终产生相同的 16 字节密文。

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

于 2013-12-21T21:35:10.683 回答
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

于 2013-07-03T20:40:25.573 回答
0

根据密文 % 16 或 24 或 32 计算块大小 == 0

汉明距离应由密码块 1 和其余密码块完成

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

于 2018-02-02T03:50:09.410 回答
-2

我知道你正在做的确切练习,我现在正在自己做。我建议对加密字符串进行频率分析(不要忘记字符串可能是 base64 或十六进制)。如果你得到一个与你编码的字符串的语言相匹配的频率分布,那么可以安全地假设它在 ECB 中,否则它可能是 CBC。

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

编辑:

我有点匆忙地回答了这个问题,觉得我应该解释更多。如果它在 ECB 模式下被加密,那么频率分析应该显示正态分布样式,而不管使用的字符串和密钥的开始/结束是否有任何填充。CBC 模式下的加密应该具有非常随机且可能平坦的分布。

于 2013-07-02T09:26:29.010 回答