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

时间:2010-06-10 08:04:31

标签: java security encryption mobile filesystems

这个问题是我在Java手机(J2ME,BlackBerry,Android)broader question about ideas implementing a small encrypted filesystem上提出的疑问的一部分。如果得到了收到的反馈,考虑到问题的密度,我决定将这些疑问分成小问题。

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

我的问题是:

最好只使用对称密钥(可能是AES-256)来加密所有文件(它们不会那么多,可能是数十个)并将此密钥存储在密钥库中(受一个密钥库保护)或者您是否愿意使用存储在每个文件旁边的动态生成密钥加密每个文件,使用存储在密钥库中的“主”密钥加密该密钥?

每种方法有哪些好处/缺点?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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


选项1的优点

  • 容易

选项1的缺点

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

选项2的优点

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

选项2的缺点

  • 稍微复杂一点
  • 开销,以便为每个文件生成一个对称密钥

请注意,我认为密钥库本身(具有引脚)是可信任的;否则你可以获得任何东西,如果你得到了针脚。还有比较文件的论点,如其他答案所述,但我认为这不是主要观点。