Dropboxlike Java应用程序中的gwt加密
我在考虑应用程序中的加密。该体系结构包括:
- 服务器
- 桌面客户端
- 网络客户端
- 移动客户端
其目标是允许用户将其数据存储在服务器上,并从所有客户端访问数据,但通过加密客户端上的数据来保证数据隐私
Dropbox就是这种架构的一个例子,但据我所知,他们不这样做——他们必须在服务器上存储明文数据,否则,即使同一个文件由多个用户存储,他们也无法通过只存储一次来节省空间
您将如何实现这样一个应用程序?我正在考虑使用Java作为桌面客户端;理论上,同样的加密代码可以在GWT web客户端(编译为Javascript)和Android客户端中重用。然而,这只是理论上的
- 所有这些平台上都有可用的加密库吗李>
- 使用什么算法李>
- 私钥呢?我可以每次向用户询问密码,但如何确保所有客户端中同一用户的私钥相同李>
- 我希望避免使用多个密码;但是,如果我在数据和身份验证中使用相同的密码,我如何防止服务器将数据提供给提供错误密码的黑客,或者防止服务器因为拥有用户密码而能够解密用户数据李>
- 有什么可能的陷阱李>
# 1 楼答案
实际上你需要一些不同的cryto
首先,您希望客户机加密要上载的文件,并在检索到加密的有效负载后将其解密
第二,您需要某种方法来传输加密文件,以确保只有正确的用户才能访问其文件
第一个问题需要对称加密算法。有很多,但你最好的选择可能是AES。如果你看一下gwt-crypto,他们有一个java bouncy castle实现的包装器。这需要处理三个平台中的两个。我不使用android平台,但如果没有AES实现,我会感到惊讶。至于密钥,你可能会得到一个密码的散列。只要记住彩虹桌的可能性,并采取适当的措施。用于加密文件的密码永远不需要通过网络,因为我了解你的模型所有的加密和欺骗都是在客户端完成的。由于您提到系统管理员是潜在的攻击者,因此您确实需要调查密钥记录器、内存转储等,但这超出了您提出的具体问题的范围
第二个问题是使用带有客户端和服务器端证书的TLS解决的问题。这样的客户端可用于您正在查看的所有三个平台。不过,你是否想让用户经历安装客户端证书的麻烦取决于你。有各种各样的后备方案,但没有一个经过充分审查