首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组密码检测填充行为

分组密码检测填充行为
EN

Cryptography用户
提问于 2016-01-23 20:53:15
回答 1查看 289关注 0票数 0

假设我有一个crypto provider,即:我给提供者一些明文字节,并得到加密的结果。

我不知道所使用的加密方法,但我知道它使用的是块密码,而块密码的操作方式类似于欧洲央行(每个块都是单独加密的=> 2相同的明文块,如果没有前缀的话,应该会导致两个相同的密文块),因此容易受到不同的填充攻击。

crypto provider可以在纯文本中添加前缀和后缀,但我不知道它们是否和多长。

我想对这个crypto provider执行不同的填充攻击(检测前缀和后缀长度,在线性时间内使用蛮力后缀,去掉预和后缀,.)。

实际上,一切都正常,但我需要知道crypto provider使用的填充方法是否在添加填充块(如果是length of the plaintext % blocksize == 0 )。否则,我计算前缀+后缀的长度可能是错误的。

给出所描述的情况,是否有一种方法可以检测到这一点,而不必测试确切使用的填充方案?

我做自动取款机:

要检测blocksizeprefix + suffix长度,首先对一个字节进行加密,获取cipertext (cipher_a)的长度,然后将一个字节添加到明文(plaintext_n)中,直到cipertext (cipher_n)的长度与第一个字节一样大。

现在我知道了:

blocksize = length(cipher_n) - length(cipher_a)

如果所使用的填充确实添加了一个空的填充块:

fixes_length = length(cipher_a) - length(plaintext_n)

否则:

fixes_length = length(cipher_a) - length(plaintext_n) -1

简短的例子,(希望)说明问题所在。

假设:blocksize = 3prefix = "xx"suffix = "yy"

有一个空的填充块:

代码语言:javascript
复制
 ╔═══════╦═════════════╦═════════╗
 ║ Chars ║ Plaintext   ║ Blocks  ║
 ╠═══════╬═════════════╬═════════╣
 ║ 1     ║ xxa yy-     ║ 2       ║
 ║ 2     ║ xxa ayy --- ║ 3       ║
 ╚═══════╩═════════════╩═════════╝

在这种情况下,计算是正确的。

blocksize = 3

fixes_length = 6 - 2 = 4

没有空的填充块:

代码语言:javascript
复制
 ╔═══════╦═════════════╦═════════╗
 ║ Chars ║ Plaintext   ║ Blocks  ║
 ╠═══════╬═════════════╬═════════╣
 ║ 1     ║ xxa yy-     ║ 2       ║
 ║ 2     ║ xxa ayy     ║ 2       ║
 ║ 3     ║ xxa aay y-- ║ 3       ║
 ╚═══════╩═════════════╩═════════╝

这个fixes_length是错的。

blocksize = 3

fixes_length = 6 - 3 = 3

我对密码学比较陌生,所以如果我的术语不对,请原谅。

EN

回答 1

Cryptography用户

回答已采纳

发布于 2016-01-24 00:50:53

恐怕没有有效的方法来了解所部署的填充方法,除非它是由编写原始代码的人的描述提供的。您必须尝试强行使用填充方案来估计所使用的填充方案。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/32131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档