【问题标题】:Is it a good idea to use only a key to encrypt an entire (small) filesystem?仅使用密钥来加密整个(小)文件系统是个好主意吗?
【发布时间】:2010-06-10 17:02:43
【问题描述】:

这个问题是我对 Java 移动电话(J2ME、BlackBerry、Android)上的broader question about ideas implementing a small encrypted filesystem 提出的疑问的一部分。如果收到的反馈很少,考虑到问题的密度,我决定将这些疑问分成小问题。

总而言之,我计划为手机“创建”一个加密文件系统(在 BoucyCastle 或 JCE 子集的帮助下),提供一个 API,让他们以透明的方式访问它们。加密将基于文件(而不是块)进行。

我的问题是这样的:

仅使用对称密钥(可能是 AES-256)来加密所有文件(它们不会那么多,可能有几十个)并将此密钥存储在密钥库中(由pin)还是您更愿意使用存储在每个文件旁边的即时生成的密钥来加密每个文件,并使用存储在密钥库中的“主”密钥加密该密钥?

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

【问题讨论】:

    标签: java security encryption mobile filesystems


    【解决方案1】:

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

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

    【讨论】:

    • 您的第二个选项是一个很好的答案。使用多个密钥没有意义,因为保护最终都是由初始密钥提供的。另一方面,使用 IV 会降低已知明文攻击的成功率。
    • 我没有想过你的第二个选择。看起来很有趣
    【解决方案2】:

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


    选项 1 的优点

    • 简单

    选项 1 的缺点

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

    选项 2 的优点

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

    选项 2 的缺点

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

    请注意,我认为密钥库本身(具有密码)是可信的;否则,如果您获得密码,您当然可以访问任何内容。正如另一个答案中提到的,还有比较文件的论点,但我认为这不是重点。

    【讨论】:

    • 我没有考虑过密钥过期。你会怎么处理?我的意思是,可以每 XXX 个月更新一次吗?另一方面,如果过期是一个问题,那么每个文件密钥过期也不是一个问题吗?这是一个单一的用户环境,所以这稍微简化了一些事情。
    • @Fernando Miguelez 在多用户环境中,过期更成为一个问题,其中使用的个人密钥/证书可能会过期。要考虑的另一件事是用户是否丢失了其密钥/证书;我们使用的是智能卡,所以这是一个问题。这个想法确实是每个 Xxxx 飞蛾更新密钥/证书。也许你不需要解决这些问题。
    • 对于第一个版本,我们不打算使用证书或多用户环境(每部手机仅一个用户)。关于更新安全令牌问题的唯一要求是用户 PIN(如果我们只是重新编码密钥库,这并不复杂)。无论如何,我感谢您的考虑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2015-03-14
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多