2

我有一些必须受密码保护的脱机文件。我的策略如下:

  • 密码算法:AES,128 位块,256 位密钥(PBKDF2-SHA-256 10000 次迭代,随机盐存储在其他地方)

  • 整个文件分为页面大小为 1024 字节的页面

  • 对于完整的页面,使用 CBC

  • 对于不完整的页面,

    • 如果 CBC 至少有一个块,则使用密文窃取

    • 如果 CTR 少于一个块,则使用 CTR

通过这种设置,我们可以保持相同的文件大小

IV 或 nonce 将基于盐和确定性。由于这不是用于网络通信,我认为我们不需要担心重放攻击?

问题:这种混合会降低安全性吗?我们最好在整个文件中使用 CTR 吗?

4

2 回答 2

4

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

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

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

于 2012-10-15T04:08:47.823 回答
2

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

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

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

在正节点上:

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

一般来说:

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