如何检测消息是由CBC还是ECB模式加密的?
我写了一个函数,可以随机使用AES 128 CBC或ECB进行加密,并对明文和密文进行汉明距离计算,但似乎不关联密码模式。
如何检测块密码模式?
提前感谢您的回答。
如何检测消息是由CBC还是ECB模式加密的?
我写了一个函数,可以随机使用AES 128 CBC或ECB进行加密,并对明文和密文进行汉明距离计算,但似乎不关联密码模式。
如何检测块密码模式?
提前感谢您的回答。
问题陈述中已经给出了答案:
请记住,ECB的问题在于它是无状态和确定性的;相同的16字节明文块将始终产生相同的16字节密文。
因此,假设某些重复的明文块出现在相同的密文块偏移量上,我们可以直接寻找各种长度的重复的密文块。
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
}
}
https://github.com/dustinconrad/crypto-tutorial/blob/master/src/crypto_tutorial/lib/block.clj#L118
根据密文%16或24或32计算块大小,使其等于0
汉明距离应由密码块1与其余密码块完成
如果我们使用浮点算术平均每个字节,如果该值低于某个阈值,则为ECB。
我知道你正在做的练习,我现在也在做。我建议对加密字符串进行频率分析(不要忘记字符串可能是base64编码或十六进制编码)。如果你得到的频率分布与编码字符串的语言匹配,则可以安全地假设它是ECB模式,否则可能是CBC模式。
我不知道这是否真的有效,因为我现在只是在做练习,但这是一个开始。
编辑:
我有点匆忙回答了这个问题,感觉应该解释得更多一些。如果它是以ECB模式加密的,则无论字符串和密钥的填充如何,频率分析都应该显示出正常的分布样式。而以CBC模式加密的加密应该具有非常随机且可能是平坦的分布。