【问题标题】:Storing encrypted files inside a database将加密文件存储在数据库中
【发布时间】:2011-08-20 15:51:25
【问题描述】:

我正在使用 PyCrypto 将一些文件存储在 SQLITE 数据库中。

我正在使用 4 个字段:
文件名,
文件的长度(以字节为单位)
文件的 SHA512 哈希
加密文件(使用 AES,然后使用 base64 到 ASCII)。

我需要所有字段来显示有关文件的一些信息而不解密它。

问题是:这样存储数据是否安全?
例如,ZIP 文件或可执行文件的第一个字符始终相同,如果您已经知道文件的哈希值和长度......是否可以解密文件,也许是部分解密?

如果不安全,我如何存储有关文件的一些信息以索引文件而不解密它们? (长度、哈希、名称、标签等信息)

(我用python,但你可以用任何语言给出例子)

【问题讨论】:

  • 注意为了节省空间和避免base64的开销(大约增加33%的大小),你应该使用blob将二进制数据存储在sqlite数据库中。

标签: python database security encryption


【解决方案1】:

使用 AES 加密的数据与纯数据具有相同的长度(给予或采用一些块填充),因此放弃原始长度不会损害安全性。 SHA512 是一种强大的加密哈希旨在提供有关原始内容的最少信息,因此我在这里也没有看到问题。

因此,我认为你的方案是相当安全的。任何被它“暴露”的信息都是微不足道的。无论如何,密钥管理可能会成为一个更大的问题。

【讨论】:

    【解决方案2】:

    为避免前几个字节相同的任何问题,您应该在块密码模式下使用带有随机 IV 的 AES。这样可以确保即使两个加密文件的第一个块(长度取决于密钥大小)完全相同,密文也会不同。

    如果你这样做,我认为你的方法没有问题。

    【讨论】:

      【解决方案3】:

      您不能只说“哦,它的 AES-256 当然是安全的”。仅通过您的帖子,我就可以看到您对流密码和分组密码的令人困惑的攻击,因此在您真正研究该主题之前,您可能应该实施此操作。

      话虽如此,您必须阅读有关block cipher modes of operation 的信息。整个CWE-310 家庭。拿起盗版密码学的副本不会有什么坏处。毕竟,仍然有足够的空间让你彻底搞砸。

      真正的解决方案:使用别人的实现

      【讨论】:

      • 谢谢,我会搜索那本书。如您所料,我是密码学的新手,我正在使用其他人的工具。我只想让我的私人数据尽可能私密。我正在对密钥进行加盐并将盐和 SHA512 密钥以及加密文件和标签存储在数据库中。它必须是安全的。使用别人的实现不是解决方案,除非您知道为文件创建“便携式加密压缩索引容器”的软件。这就是我想要做的。
      • @Cristi Constantin 我不认为这是存储密钥的有效方式。 sha512 是一种方式,你不能得到纯文本,如果你再次用 sha512 击中它,那么攻击者也可以。谁需要访问数据?您试图阻止谁访问数据?
      • @Rook:我阅读了您的个人资料,所以我不会不同意您所说的任何内容 :)。无论如何,SHA512 是一种单向功能,对吗?因此,如果我对密码进行加盐(8 个字符加盐)并对结果进行散列,则应该不可能使用彩虹表攻击。将文件存储在数据库中的人应该是唯一有权访问文件的人。没有其他人。
      • @Rook:我真的不需要存储哈希和盐,我可以只存储加密文件,但是假设您输入一次密码(当您打开加密容器时)和只要您保持软件运行,密码就会保存在内存中,如果要打开文件,则必须使用内存中的密码来解密文件但是您不知道密码是否正确,直到您以某种方式执行文件(据我所知,AES 加密文件可以用错误的密码解密)。所以只有文件执行正确才能知道你输入了wright密码。
      • @Rook: 总之,我必须在打开容器之前存储一些东西来检查密码。
      【解决方案4】:

      您确实需要考虑要防范哪些攻击,以及可能的攻击者的资源。

      一般来说,加密存储一些数据只有在满足您的确切要求时才有用。特别是,如果攻击者有办法在破坏数据的同时破坏密钥,那么加密实际上是没有用的。

      【讨论】:

      • 好吧,我只是希望我的私人数据......尽可能私密。也许我应该使用 PGP 而不是 AES。无论如何,我得到了我想要的答案。谢谢你的提示!
      • @Cristi:您需要在应用程序中考虑密钥管理;这是使用加密的主要问题。
      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2016-12-25
      • 2011-07-15
      • 2020-03-20
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多