这个问题是我在Java手机(J2ME,BlackBerry,Android)broader question about ideas implementing a small encrypted filesystem上提出的疑问的一部分。如果得到了收到的反馈,考虑到问题的密度,我决定将这些疑问分成小问题。
总而言之,我计划为移动电话“创建”加密文件系统(在BoucyCastle或JCE的子集的帮助下),提供一个API,以透明的方式访问它们。加密将基于文件(而不是块)进行。
我的问题是:
最好只使用对称密钥(可能是AES-256)来加密所有文件(它们不会那么多,可能是数十个)并将此密钥存储在密钥库中(受一个密钥库保护)或者您是否愿意使用存储在每个文件旁边的动态生成密钥加密每个文件,使用存储在密钥库中的“主”密钥加密该密钥?
每种方法有哪些好处/缺点?
答案 0 :(得分:5)
对每个文件使用单独的密钥更安全,因为缺少密钥的人无法判断两个文件是否相同。
另一种选择是使用相同的密钥,但每个文件使用不同的初始化向量。将初始化向量(未加密)存储在文件的标题中。
答案 1 :(得分:3)
我参与了一个项目,如果我们有完全相同的问题,那么我们选择了2。
选项1的优点
选项1的缺点
选项2的优点
选项2的缺点
请注意,我认为密钥库本身(具有引脚)是可信任的;否则你可以获得任何东西,如果你得到了针脚。还有比较文件的论点,如其他答案所述,但我认为这不是主要观点。