我正在建立一个存储调查数据的系统,其中一个要求是如果黑客能够访问Web服务器,他们就无法查看任何数据。但是,Web应用程序确实需要能够解密数据并显示它(例如,经过身份验证的用户可能需要查看包含纯文本调查响应的表格。)
我无法弄清楚网络服务器如何解密数据而黑客也无法做到这一点。显然,如果解密密钥存储在服务器上,则对服务器的访问也需要访问解密密钥。
到目前为止,我唯一能想到的是向用户分发解密密钥,让他们在身份验证过程中输入解密密钥,将其存储在cookie中,然后在每个Web请求中提交密钥,以便它从不存储在服务器上,而是存储在有限的时间内。显然,这将通过HTTPS提供,以便密钥也在传输时加密。
我从未见过一个系统需要私钥作为身份验证过程的一部分,因此我假设有更好的方法来执行此操作。
虽然这更像是一个理论问题,但应用程序将使用PHP编写,可能使用托管在Ubuntu服务器上的Laravel框架。
答案 0 :(得分:0)
你正试图解决一个非常棘手的问题,但是如果你敢于朝着这个方向努力,这里有一些指示:
编辑:
您的要求的问题是,一个坏的(或疏忽的)用户可以破坏一切(即将解密的数据暴露给任何人和每个人)。但是,如果这是你愿意接受的东西,那么有潜在的解决方案,但它们并不容易实现。
一个要求是加密计算需要在客户端进行,加密数据的密钥需要在用户之间安全地共享,而不会将其暴露给Web应用程序本身。最现实的解决方案是拥有原生(粗)客户端和avoiding JavaScript cryptography。但是,Mylar声称要解决JavaScript加密问题。
您需要公钥加密才有机会。用户需要能够相互交换加密密钥,并且用户需要能够对其他用户进行身份验证,以防止黑客服务器发生MITM情况。
一般来说,如果你想尝试解决这个问题,我会说你确实已经完成了你的工作,你可能会遇到很多问题。但是,我回复的主要原因是表明理论上并非不可能,最近的密码学和Web应用程序安全研究表明了这一点。