【发布时间】:2012-10-05 00:52:49
【问题描述】:
我有一些必须受密码保护的脱机文件。我的策略如下:
密码算法:AES、128 位块、256 位密钥 (PBKDF2-SHA-256 10000 次迭代,随机盐存储在其他地方)
整个文件被分成页面大小为1024字节的页面
对于完整的页面,使用 CBC
-
对于不完整的页面,
如果 CBC 至少有一个块,则将其与密文窃取一起使用
如果 CTR 少于一个块,则使用 CTR
通过这种设置,我们可以保持相同的文件大小
IV 或 nonce 将基于盐和确定性。由于这不是用于网络通信,我认为我们不需要担心重放攻击?
问题:这种混合会降低安全性吗?我们最好只在整个文件中使用 CTR 吗?
【问题讨论】:
-
使用盐和 10000 次迭代是不合理的开销。 KDF 函数已经为密钥派生而设计。对于大多数偏执狂来说,仅使用额外的盐就足够了。
-
@PavelOgnev,单独使用盐只会阻止构建彩虹表。但即使没有彩虹表,今天一台具有多核和 GPU 的普通机器也可以在一秒钟内测试至少几百万个密码。 10000 次迭代只能在一定程度上延迟它。为了非常安全,关键是使用长密码(例如 > 15 个字符)
-
这将处理线性并发症。所以这不是一种加密方法。攻击者需要超级计算机而不是 PC,但它不可避免地会破解弱密码。
-
所以,如果您有兴趣,10000 次 KDF 迭代将仅补偿密码中的 2 个随机符号。
-
@PavelOgnev,是的,我知道 10000 次迭代并不能保护正在恢复的密码。然而,世界上没有这样完全安全的系统。我们只是想采用每一种好的和资源友好的做法来提高安全性。如果额外的练习只会增加几年来破解密码,那么已经很好了
标签: encryption cryptography aes