首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DES-CBC与随机IV -键空间有多大?COTS工具能破解吗?

DES-CBC与随机IV -键空间有多大?COTS工具能破解吗?
EN

Cryptography用户
提问于 2020-04-30 13:48:37
回答 1查看 354关注 0票数 0

我花了一夜的时间颠倒了Jasypt 1的“基本文本加密器”的实现。该算法在文档中被定义为'PBEWithMD5AndDES‘。

执行情况如下:

  • 随机生成64位盐。
  • 这个秘密产生于
代码语言:javascript
复制
secret = password + salt
for i in range(0, 1000):
    secret = md5(secret)
  • 然后将秘密的前8个字节用作DES密码,最后8个字节用作IV,并使用DES对数据进行加密。

考虑到这一点,我是否正确地认为实现的总密钥空间是120位(56+64)?

我已经在python中写了一个概念反转的证明,但我想计算一下野蛮使用一个真正的键需要多长时间。到目前为止,我还无法诱导hashcat解密使用这个算法加密的东西,而且我也不确定它是否能解密。

我的问题是:

  • 键空间真的是120位吗?
  • 我是不是漏掉了什么东西,还是hashcat没有能力破解它?
  • 其他工具能破解吗?
  • 是否有可能在不对预期输出进行假设的情况下推断出正确的输出(例如所有输出必须是ASCII数据,或匹配文件头)?

编辑:为了减少任何混淆,我的解密器如下所示

代码语言:javascript
复制
import base64
import hashlib
from Crypto.Cipher import DES

passphrase = "123456" # Key used to encrypt
# Salt randomly generated at encrypt-time, and stored at
# the beginning of the encrypted data:
salt = base64.b64decode("vqmy2fiCipU=")
enc_b64 = "vqmy2fiCipVBIhiAzDfvTL0301DLgTqd"
enc_data = base64.b64decode(enc_b64)
if (salt != enc_data[0:8]):
    raise Exception("Salt does not match enc_data salt")
enc_data = enc_data[8:]

m = hashlib.md5()
m.update(passphrase.encode())
m.update(salt)
result = m.digest()

for i in range(1, 1000):
    m = hashlib.md5()
    m.update(result)
    result = m.digest()

# value of result is: md5("123456" + salt) iterated 1,000 times.

key = result[:8]
iv = result[8:16]
des = DES.new(key, DES.MODE_CBC, iv)
print(des.decrypt(enc_data).decode())
# > Hello World

1

EN

回答 1

Cryptography用户

发布于 2020-05-01 00:34:28

键空间真的是120位吗?

不是的。它仍然是56位,至少当多个块被加密。对于CBC模式,您可以尝试并解密一个带密钥的块,用前面的密文块对它进行XOR,您应该会得到一个明文块。如果您对最后一个明文块执行此操作,则需要查找PKCS#5填充。如果这是正确的,那么您可以开始查看是否可以生成有效的明文。

如果只有一个块被加密,那么IV就像一个一次性垫。在这种情况下,您将不得不猜测密码(当然,假设您有盐)。

我是不是漏掉了什么东西,还是hashcat没有能力破解它?

有可能。但是,对于一个有成就的程序员来说,编程可能并不难。Hashcat似乎专注于密码哈希本身。假设密码不太复杂,猜测它可能仍然是尝试解密密码文本的最佳方法。

其他工具能破解吗?

当然,破解单个DES可以由专门的硬件完成(列表是这里)。不过,要求获得这样的资源是个不话题。

是否有可能在不对预期输出进行假设的情况下推断出正确的输出(例如所有输出必须是ASCII数据,或匹配文件头)?

嗯,除了填充物,是的,你必须能够测试明文是否在某种程度上是可理解的。但是,如果您解密了许多块,那么明文可能就不会那么随意了,所以您可以对其进行测试。例如,如果它压缩得很好,它可能值得再看一次(但是压缩通常是相当昂贵的)。

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

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

复制
相关文章

相似问题

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