【问题标题】:Cryptography: Mixing CBC and CTR?密码学:混合 CBC 和 CTR?
【发布时间】: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


【解决方案1】:

您最好只对整个文件使用 CTR。否则,您将在支持多种模式(CBC、CTR 和 CTS)以及确定使用哪种模式方面增加大量额外工作。目前尚不清楚这样做有什么价值,因为 CTR 非常适合加密大量数据。

您是否打算为每个页面重复使用相同的 IV?您应该稍微扩展一下页面的含义,但我建议为每个页面使用唯一的 IV。这些页面是否可以以某种方式寻址?您可能想了解一些新的disk encryption modes,以了解有关生成唯一 IV 的想法

您还确实需要对您的数据进行 MAC 处理。例如,在 CTR 中,如果有人翻转了一点密文,当你解密时它会翻转一点,你永远不会知道它被篡改了。您可以使用HMAC,或者如果您想简化整个方案,请使用AES GCM 模式,它结合了 CTR 加密和 GMAC 完整性

【讨论】:

  • 感谢您的意见。我已经将 CBC、CTR 和 CTS 组合在一起并正常工作。由于 CBC 似乎给了我一种更强的加密感,这就是为什么我想首先将它包含在策略中。但是,一般来说,混合使用不同模式是否存在任何已知风险?是否有助于降低恢复密码或密钥的复杂性?
  • CBC 并不比 CTR 模式强。两者都是 NIST 标准。如果重复使用随机数,CBC 可能会泄漏更少的信息,但您应该提防这种情况。 CTR 可能是现在的首选模式,Practical Cryptography 推荐它,而 GCM 等新模式则使用它。您仍然需要一个同时具有 CBC 和 CTR 的 MAC,并且考虑到您需要窃取密文以防止填充,我只会对所有内容使用 CTR。
  • 但总的来说,不,使用这些不同的模式不会降低任何安全性,只要您正确地执行其他所有操作。
  • 对不起所有的cmets。但是由于您似乎可以灵活地选择模式,您可能真的想查看 GCM (en.wikipedia.org/wiki/Galois/Counter_Mode)。它将一次性加密和验证数据,具有非常好的性能,并且它可以让您验证可能不需要加密的其他元数据。这也是为 NSA 的 Suite B en.wikipedia.org/wiki/NSA_Suite_B_Cryptography指定的唯一操作模式
  • 非常感谢您提供的其他信息和链接,这正是我一直在寻找的。我将认真研究 GCM 并评估为我当前模型引入的额外复杂性。然而,非常有趣的是,NSA Suite B Cryptography 中只提到了 GCM。我要的只是保密。任何(最近)推荐的密码学套件中是否提到了 CBC?另一方面,诚信不在我们的保护范围之内。另外,当我们稍后允许文件的网络传输时,GCM 似乎是完美的选择
【解决方案2】:

关于 CTR 模式,您需要了解一些事项。在您了解所有这些之后,您可以愉快地在您的情况下应用流密码:

  • 永远不要重复使用具有相同随机数的数据键;
  • 以上,甚至及时
  • 注意CTR模式确实显示了加密数据的大小;总是加密完整块可以在一定程度上隐藏这一点(如果遵守文件系统边界,通常一个 1024 字节的块需要一个比特块);
  • CTR 模式本身不提供身份验证(用于完成,因为这已经讨论过了);

如果您不遵守前两条规则,攻击者将立即看到编辑的位置,并且攻击者将能够检索与纯文本直接相关的数据。

在正节点上:

  • 您可以愉快地使用文件中的偏移量(例如在块中)作为 nonce 的一部分;
  • 在文件中查找、缓冲密文以及围绕 CTR 创建多线程代码非常容易。

一般来说:

  • 使用特定于数据的密钥特定文件集是值得的,这样如果密钥被泄露或更改,您就不必重新加密所有内容;
  • 仔细考虑如何使用、存储、备份您的密钥等。密钥管理是最难的部分;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多