有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Dropboxlike Java应用程序中的gwt加密

我在考虑应用程序中的加密。该体系结构包括:

  1. 服务器
  2. 桌面客户端
  3. 网络客户端
  4. 移动客户端

其目标是允许用户将其数据存储在服务器上,并从所有客户端访问数据,但通过加密客户端上的数据来保证数据隐私

Dropbox就是这种架构的一个例子,但据我所知,他们不这样做——他们必须在服务器上存储明文数据,否则,即使同一个文件由多个用户存储,他们也无法通过只存储一次来节省空间

您将如何实现这样一个应用程序?我正在考虑使用Java作为桌面客户端;理论上,同样的加密代码可以在GWT web客户端(编译为Javascript)和Android客户端中重用。然而,这只是理论上的

  1. 所有这些平台上都有可用的加密库吗
  2. 使用什么算法
  3. 私钥呢?我可以每次向用户询问密码,但如何确保所有客户端中同一用户的私钥相同
  4. 我希望避免使用多个密码;但是,如果我在数据和身份验证中使用相同的密码,我如何防止服务器将数据提供给提供错误密码的黑客,或者防止服务器因为拥有用户密码而能够解密用户数据
  5. 有什么可能的陷阱

共 (1) 个答案

  1. # 1 楼答案

    实际上你需要一些不同的cryto

    首先,您希望客户机加密要上载的文件,并在检索到加密的有效负载后将其解密

    第二,您需要某种方法来传输加密文件,以确保只有正确的用户才能访问其文件

    第一个问题需要对称加密算法。有很多,但你最好的选择可能是AES。如果你看一下gwt-crypto,他们有一个java bouncy castle实现的包装器。这需要处理三个平台中的两个。我不使用android平台,但如果没有AES实现,我会感到惊讶。至于密钥,你可能会得到一个密码的散列。只要记住彩虹桌的可能性,并采取适当的措施。用于加密文件的密码永远不需要通过网络,因为我了解你的模型所有的加密和欺骗都是在客户端完成的。由于您提到系统管理员是潜在的攻击者,因此您确实需要调查密钥记录器、内存转储等,但这超出了您提出的具体问题的范围

    第二个问题是使用带有客户端和服务器端证书的TLS解决的问题。这样的客户端可用于您正在查看的所有三个平台。不过,你是否想让用户经历安装客户端证书的麻烦取决于你。有各种各样的后备方案,但没有一个经过充分审查