我正在用 Java 编写一个安全的文件共享应用程序。一般架构如下所示:
- 用户希望加密文件以在多个用户之间安全共享。
- 应用程序在客户端生成一个随机 UUID 并将其用作 AES 256 密码,并使用 UUID 加密数据。
- 然后使用每个人的公钥对 UUID 进行 RSA 加密。每个共享用户一次。
- 每个加密的 UUID 数据包都作为文件的一部分存储在自定义文件头中。
- 然后将该文件上传到其他人可以访问的服务器。
- 用户每个人都可以使用他们的私钥来读取 AES 加密密钥并解密文件。
这是问题所在。用户的私钥必须加密并存储在我们数据库中的服务器上,以便可以从多个位置访问文件。在上传到服务器之前,私钥将在客户端使用用户选择的密码进行加密。
我想使用 AES 256 位加密来做到这一点。而且我想在不依赖 BouncyCastle 库或任何 3rd 方库的情况下完成整个工作。它需要使用标准的 Java 5 库,这就是为什么我选择使用 AES 256 加密和 RSA 而不是 PGP 之类的东西。
任何人都可以发现这种方法本质上不安全,或者想出一种更有效的方法来做到这一点吗?
编辑:
好的,我正在更新问题,因为我得到的所有答案都建议我不要将私钥传输到服务器。我需要服务器上的私钥的原因是因为用户需要能够从多个客户端和多个位置(即:他们的 iphone、他们的 ipad、他们的工作笔记本电脑、他们的家用电脑)访问他们的数据。他们不想在设备之间管理和复制他们的密钥,这比将他们的密钥存储在我们的服务器上更不安全,因为他们最终只会通过电子邮件将它们发送给自己。