6

我从一个弱密码(ex 为 8 个小写字符)和一个文件开始。我需要使用该密码加密该文件。结果必须能够抵御已知的攻击。

方法 1:我可以使用 SHA-256 对密码进行哈希处理,然后使用生成的哈希和文件作为 AES-256 的输入,从而得到一个加密文件。我知道 SHA-256 和 AES-256 都非常快。这不会使文件容易受到暴力攻击吗?

例如,是否可以抓取一个预先计算的 SHA-256 哈希表,并假设它是一个非常小的文件和一个非常弱的密码,尝试在合理的时间内使用该表中的每个哈希进行 AES-256 解密(几个个月使用专门的硬件)。

方法 2:使用 bcrypt。如果我理解正确,bcrypt 比 SHA-256 + AES-256 更适合加密文件,因为它的密钥生成方案有一个工作因素,可以产生更强的密钥。还是我错了?

我见过的 Ruby 和 Python 实现(包装器?)专注于使用 bcrypt 作为密码的散列方案,而不是密码本身。我什至可以使用 bcrypt 来散列弱通行证并“一步”加密文件吗?

方法 3:使用 bcrypt 对 pass 进行散列,使用该散列和文件作为 AES-256 的输入,给我加密文件。这解决了“生成密钥太快”的问题。(假设它是一个问题。)但是,bcrypt 哈希是 448 位长,而 AES-256 需要一个 256 位的密钥。天真的解决方案是简单地删除散列的尾随位并将其用作 AES-256 的密钥。我不会走这条路,因为我对密码学知之甚少,不知道后果是什么。

编辑:我不能给通行证加盐,因为这是离线应用程序。IE。没有合理的地方存放盐。我可以对通行证进行加盐并将未加密的加盐与加密文件一起存储。如果说数据库遭到破坏,盐几乎本质上是公开/可见的。盐的目的是防止彩虹表攻击。感谢尼莫,下面。

4

1 回答 1

12

方法 4:使用PKCS#5(PBKDF2 用于从通行证派生密钥 + 您选择的密码用于使用该密钥进行加密),最好是其他人的实现。

别忘了盐。(你把它和加密数据一起存储。它只需要8个字节左右。)

于 2011-06-03T15:32:45.853 回答