代码之家  ›  专栏  ›  技术社区  ›  Fernando Miguélez

只使用密钥加密整个(小)文件系统是个好主意吗?

  •  2
  • Fernando Miguélez  · 技术社区  · 14 年前

    这个问题是我对 broader question about ideas implementing a small encrypted filesystem 关于Java手机(J2ME、黑莓、Android)。如果收到少量反馈,考虑到问题的密度,我决定将这些疑问分为几个小问题。

    总之,我计划为移动电话“创建”一个加密的文件系统(在BoucyCastle或JCE的一个子集的帮助下),提供一个允许以透明方式访问它们的API。加密将在文件基础上执行(而不是块)。

    我的问题是:

    只使用对称密钥(可能是AES-256)加密所有文件(可能不是那么多,也可能是几十个)并将此密钥存储在密钥存储库(受PIN保护)中是个好主意,还是您更愿意使用存储在每个文件旁边的动态生成密钥加密每个文件,并使用存储在密钥上的“主”密钥加密该密钥撕下?

    每种方法的优点/缺点是什么?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Joe Albahari    14 年前

    对每个文件使用单独的密钥更安全,因为缺少密钥的人无法判断两个文件是否相同。

    另一个选项是对每个文件使用相同的键,但使用不同的初始化向量。您将初始化向量(未加密)存储在文件头中。

        2
  •  3
  •   ewernli    14 年前

    我做了一个项目,我们有完全相同的问题,我们选择了选项2。


    方案1的优点

    • 容易的

    方案1的缺点

    • 如果密钥被公开,所有文件都需要重新加密。
    • 如果密钥过期,所有文件都需要重新加密
    • 出于性能原因,密钥必须是对称的

    方案2的优点

    • 如果主密钥过期,单个密钥仍然可以,不需要重新加密文件。
    • 如果主密钥被公开,则可以创建新的主密钥,并且每个单独的密钥都需要用新的主密钥重新加密。
    • 可以创建每个用户的主密钥;额外的间接级别支持
    • 出于性能原因,单个密钥必须是对称的,但主密钥可以是非对称的(这一点非常重要)

    方案2的缺点

    • 稍微复杂一点
    • 为每个文件生成一个对称密钥所需的开销很小

    注意,我认为keystore本身(具有pin)是可信的;否则,如果您获得pin,当然可以访问任何东西。还有比较文件的论点,如另一个答案中提到的,但我不认为这是要点。