在Web应用程序中加密来自用户的数据

时间:2020-03-05 18:46:31  来源:igfitidea点击:

某些网络应用程序(例如Google Docs)存储用户生成的数据。只能由其所有者读取的数据。或者可能不是?

据我所知,这些数据按原样存储在远程数据库中。因此,如果远程系统中具有足够特权的任何人(例如sysadmin)都可以潜伏我的数据,那么我的隐私可能会受到损害。

将加密的数据存储在远程数据库中并且只有数据的所有者才能解密的最佳解决方案是什么?如何使该过程对用户透明? (我们不能使用用户的密码作为加密其数据的密钥,因为我们不应该知道他的密码)。

解决方案

回答

如果在服务器上执行加密/解密,则无法确保明文未转储到某些日志文件等中的某处。

我们需要使用JavaScript / Java / ActiveX或者其他方式在浏览器中进行加密/解密。作为用户,我们需要信任Web服务的客户端,不要将未加密的信息发送回服务器。

卡尔

回答

不,我们不能使用密码,但是可以使用密码哈希。但是,Google Docs都是关于共享的,因此这种方法将需要为每个用户存储文档的副本。

回答

我认为卡尔是把它钉在了头上,但我想说的是,对于任何网站,如果我们向其提供任何机密/个人/特权信息,那么我们必须具有一定的信任度,这是网站管理员的责任。服务提供商建立这种信任。自从它诞生以来,这是在互联网上被问过很多次的问题之一,并且它将一直持续增长,直到我们在指纹上都编码了我们自己的SSL证书为止,即使如此,我们也不得不提出这个问题。 "我怎么知道手指仍然附着在使用者身上?"。

回答

好吧,我会考虑类似于亚马逊AWS的流程。我们使用不会远程保存的专用密码进行身份验证。仅使用哈希来验证用户。然后,使用主要算法和经过长期测试的算法之一生成证书,并从安全页面提供该证书。然后,可以使用公钥/私钥算法为用户加密事物。

但是主要问题仍然是:如果具有足够特权的人可以访问数据(例如:服务器被黑客入侵),我们将会迷路。只要有足够的时间和力量,一切都可能被破坏。这只是时间问题。

但是我认为算法和应用程序(例如GPG / PGP等)是众所周知的,可以以一种保护Web应用程序的安全性并将其可用性保持在普通用户可以处理的水平上来实现。

编辑我想赶上@Carl和Unkwntech并添加他们的声明:如果我们不信任网站本身,请不要泄露私人数据。甚至在有人入侵他们的服务器之前... ;-)

回答

Auron asked: How do you generate a key for the client to encrypt/decrypt the data? Where do you store this key?

好吧,密钥通常来自用户选择的某些密码。我们无需存储它,而是相信用户可以记住它。我们可以存储的内容可能是与该用户相关的盐值,例如,可以提高针对彩虹表攻击的安全性。

加密很难做到;-)我建议查看AxCrypt和Xecrets脱机客户端的源代码。

卡尔