把文件加密压缩,文件自身的SHA512哈希值作为密码,破解得到这个文件的可能性?

1、文件价值永远大于破解成本 2、只能得到加密压缩后的文件,源文件和SHA512哈希值已经不以任何形式存在(包括人的记忆中) 3、不限破解时间 4、不…
关注者
19
被浏览
12,920

4 个回答

这个题其实还是稍微有点意思的,但是这道题的解决其实涉及到了密码学中一个大概10年前争论不休的问题:一个安全Hash的输出能否看成一个随机数?

=====================我是回答问题的分割线=====================

首先我们还回答一下问题。这个问题其实需要几个前提条件:

  • 加密算法本身是安全的。即:只有通过枚举密钥这一种方法才能够破解该加密算法。当然了,这是一个非常直观的说法,有些不太严谨,不过便于理解。
  • 产生密钥所使用的Hash(即文中提到的SHA512)是安全的,很难找到两个不同的输入m1,m2,使得Hash(m1) = Hash(m2)。这也是一个非常直观的说法,不太严谨,便于理解。

在这两个条件成立的前提下,如果我们认为一个安全Hash的输出值可以看成一个随机数,那么这个问题的答案是 可证明安全 的。否则,这个问题的答案是 实际上安全 的。

这里我可以大概说一下为什么安全:因为Hash的输出值可以看成是一个随机数。因此,加密文件Hash的结果也可以看成是一个随机数。这样,密文的加密是通过一个随机产生的密钥进行加密的,由于加密算法是安全的,因此除非获知密钥,否则无法恢复出明文信息。因此,这样的加密满足:(1)密钥的随机性,(2)加密算法的安全性。因此加密是安全的。

如果我们不能把Hash的输出看成一个随机数。那么加密过程不满足密钥随机性这一条件。因此,攻击者可以通过破解Hash完成加密算法的破解。但是,攻击者在问题条件下用这种方式破解也是不可行的,因为其攻击的前提就是要知道加密的密钥,即Hash结果。但是如果知道Hash的结果问题也就解决了… 所以虽然严格意义上讲我们无法形式化证明安全,但是这种加密方法是实际上安全的。

====================我是有关题目解读的分割线=================

1. 一个安全Hash的输出能否看成一个随机数

在密码学中,一个安全Hash的输出可以看成一个随机数是有对应的密码学安全模型的,这个模型叫做Random Oracle Model,中文为随机预言模型,其定义可参考维基百科:

隨機預言

。现在一般认为,随机预言可以作为一个安全假设,但并不能证明这个模型是严格意义上安全的。

2. 有关题目的一些解读

这种加密方式,其实密码是没有给接受者的。虽然密码的生成使用了明文,但是如果加密算法是安全的,那么密文与明文是严格不相关的,也就是说从密文是无法推出明文的任何有用信息的。也就是说,密码完全没有包含在加密的密文中…

当然,我的回答里面涉及到了一些密码学的假设以及证明,如果有疑问或者对这个感兴趣,欢迎私信联系我~

这个问题可以再提炼一下。带密码保护的压缩,可以看作一种加密算法,那么问题就变成了:

加密过程中,使用原文的hash作为密钥是否安全?

观察下这个过程:

密文 = encrypt( 明文, hash(明文) )

可以看到,这个过程中,密文完全是由明文自己生成的,并没有引入额外的随机性。更深入的分析已经超出我目前的能力了,但这种方式无疑增大了被破解的概率——也许微不足道。

即便不考虑任何对hash算法和加密算法本身安全性的分析,这种做法也给自动化暴力破解提供了便利:

for key in 密钥空间:
    if hash( decrypt(密文, key) ) == key:
        print "find: ", key

当然,512比特(sha512)的密钥空间还是相当大的,这种暴力破解非常耗时。但假如加通过分析能找出一种让 hash( decrypt(密文, key) ) 逼近 key 的算法,那破解速度就会大大增加。

另外,目前ssh-keygen的默认生成密钥长度都是1024位了。这也就说明,512位的密钥对于现在的计算能力来说已经不那么安全了。