使用弱密码加密文件,bcrypt或SHA-256 + AES-256?

Nic*_*kiy 6 encryption cryptography aes sha bcrypt

我从一个弱密码(前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散列传递,使用该散列和文件作为AES-256的输入,给我加密文件.这样可以解决"密钥太快而无法生成"的问题.(假设它有问题.)但是,bcrypt哈希长448位,AES-256需要256位密钥.天真的解决方案是简单地删除散列的尾随位并将其用作AES-256的密钥.我不会走这条路,因为我对密码学知之甚少,不知道后果是什么.

编辑:我不能限制通行证,因为这是一个离线应用程序.即.没有合理的地方储存盐.我可以将通道加盐,并将未加密的盐与加密文件一起存储.如果说数据库受到损害,盐几乎就是公共的/可见的.盐的目的是防止彩虹表攻击.感谢Nemo,吼叫.

Nem*_*emo 12

方法4:使用PKCS#5(PBKDF2用于从传递中获取密钥+使用该密钥进行加密的密码),最好是其他人的实现.

不要忘记盐.(您将它与加密数据一起存储.它只需要8个字节左右.)

  • 你错了:-).根据定义,盐是公开的.有关详细信息,请参阅[此处](http://stackoverflow.com/questions/6141537/how-store-salt-in-distributed-environment/6141693#6141693). (4认同)
  • 因为它是一种广泛使用的标准,使用广泛使用的加密原语.例如,SHA-256比Blowfish获得了更多的分析,这使得它在大多数人看来"更安全".但据我所知,这两件事都没有被破解.(使用标准还可以提高可维护性;将来人们可以更轻松地找到其他平台的实现,如果这是一个问题.) (2认同)