如何加密数据以便Web应用程序可以读取数据,但是有权访问Web服务器的人不能?

时间:2017-08-23 21:31:14

标签: php security encryption

我正在建立一个存储调查数据的系统,其中一个要求是如果黑客能够访问Web服务器,他们就无法查看任何数据。但是,Web应用程序确实需要能够解密数据并显示它(例如,经过身份验证的用户可能需要查看包含纯文本调查响应的表格。)

我无法弄清楚网络服务器如何解密数据而黑客也无法做到这一点。显然,如果解密密钥存储在服务器上,则对服务器的访问也需要访问解密密钥。

到目前为止,我唯一能想到的是向用户分发解密密钥,让他们在身份验证过程中输入解密密钥,将其存储在cookie中,然后在每个Web请求中提交密钥,以便它从不存储在服务器上,而是存储在有限的时间内。显然,这将通过HTTPS提供,以便密钥也在传输时加密。

我从未见过一个系统需要私钥作为身份验证过程的一部分,因此我假设有更好的方法来执行此操作。

虽然这更像是一个理论问题,但应用程序将使用PHP编写,可能使用托管在Ubuntu服务器上的Laravel框架。

1 个答案:

答案 0 :(得分:0)

你正试图解决一个非常棘手的问题,但是如果你敢于朝着这个方向努力,这里有一些指示:

  • 麻省理工学院的Mylar是最近的突破,试图为这个问题提供一个实用的解决方案(与不切实际的homomorphic encryption相反),但似乎有一些security flaws。然而,寻找实用的解决方案是正确的方向。
  • 有一个称为zero knowledge web application的概念,有时称为“无知识”,它将加密密钥保存在客户端,并在客户端执行所有加密/解密。在没有认可产品的情况下,以SpiderOak为例可以提供信息。但是,要小心,如果您在JavaScript中进行加密,那么访问您服务器的黑客可以用他们的恶意JavaScript替换您的JavaScript。怎么处理这个?看看Mylar。

编辑

您的要求的问题是,一个坏的(或疏忽的)用户可以破坏一切(即将解密的数据暴露给任何人和每个人)。但是,如果这是你愿意接受的东西,那么有潜在的解决方案,但它们并不容易实现。

一个要求是加密计算需要在客户端进行,加密数据的密钥需要在用户之间安全地共享,而不会将其暴露给Web应用程序本身。最现实的解决方案是拥有原生(粗)客户端和avoiding JavaScript cryptography。但是,Mylar声称要解决JavaScript加密问题。

您需要公钥加密才有机会。用户需要能够相互交换加密密钥,并且用户需要能够对其他用户进行身份验证,以防止黑客服务器发生MITM情况。

一般来说,如果你想尝试解决这个问题,我会说你确实已经完成了你的工作,你可能会遇到很多问题。但是,我回复的主要原因是表明理论上并非不可能,最近的密码学和Web应用程序安全研究表明了这一点。