从自己的安全系统中重新找回自己

Recusing myself from my own secure system

本文关键字:找回自己 系统 自己的 安全      更新时间:2023-09-26

这更像是一个软件工程问题,而不是编程问题。我试着让这个标题尽可能地相关,如果有人觉得他们可以用词更恰当,请告诉我。

因此,我一直在使用async开发一个即时聊天web服务。javascript和PHP。该应用程序背后的主要卖点是高度保密。有很多即时聊天应用,从Live Messenger、Yahoo Messenger、IRC和Skype等等。然而,可以说我是偏执狂,但我觉得我永远无法信任软件背后的公司,因为用户几乎没有控制权,大多数公司似乎完全忽视了隐私问题。我知道还有很多其他安全/私人IM应用程序,但我决定创建自己的应用程序,它使用SSL加密所有使用点(用户->数据库->用户)之间的通信,消息表中的to/from属性是用salt进行SHA256散列的,并且作为进一步的预防措施,一旦接收方接收到(或者我应该说是请求)消息,就会自动从数据库中删除消息。

目前,这些信息本身都是纯文本的。我可以使用PHP的各种加密库,但我如何才能这样做,从而消除我自己作为所有者解密消息从而损害隐私的可能性?

当然,我绝不会这么做,我只是想在这种程度上证明隐私。如果我用密码加密,我就会知道密码。如果我用编程密码加密,我就会知道PHP将密码存储在哪里。

有办法解决这个问题吗?还是这只是以信任结束?

更新:据我所知,PHP是无状态的,但例如会话迫使服务器将数据存储在内存中,这是否是将密钥/密码存储在内存的解决方案?

谢谢你的任何想法或建议。

解决这类问题的典型方法是使用公钥加密。您可以在此处阅读概述:http://en.wikipedia.org/wiki/Public-key_cryptography.

简而言之,每个用户都有一个公钥/私钥组合。公钥是公共的,因此您可以获取任何人的公钥。私钥只由其所属的用户保存。公钥加密的密钥是一种数学方法,允许使用公钥加密某些内容,但只能使用私钥解密。因此,你可以获得某人的公钥,加密发送给他们的消息,他们是唯一可以用私钥解密的人。

在您的方案中,公钥可以保存在服务器上,并由客户端请求。公钥对任何人都可用。在只使用浏览器的环境中,存储私钥是一项挑战。它可以存储在本地存储器中,但只能在特定的计算机上使用。如果你允许它存储在你的服务器上,这样用户无论在哪里都可以检索他们的私钥,那么你就回到了最初的问题(你必须相信服务器和服务器作者,他们自己没有访问私钥)。

有一种更复杂的算法试图缓存公钥/私钥(可能在本地存储中),但每当它不再可用时(比如用户切换计算机时),只需铸造一个新的公钥并将其存储在本地,然后用新的公钥更新目录。这样做的好处是,你可以在新计算机上继续使用该系统,但缺点是,除非你有与该公钥对应的私钥,否则你将无法读取用以前的公钥加密的消息。因此,这可以在实时即时消息场景中工作,在该场景中,消息永远不会为您保存在服务器上,但如果服务器为您保存消息,并且您希望能够从任何位置读取消息,并且每个位置都有自己的密钥对,则不起作用。

SSL通过使用动态生成的公钥/私钥对来解决这个问题,但它们是在直接的端到端连接中协商和交换的(因此中间没有节点可以查看或存储未加密的数据),因此另一种可能性是使用对等游戏技术(它有自己的缺点,可能仅在浏览器中是不可能的)来创建对等连接,并通过该连接使用SSL来交换安全凭据(在您和服务器的视图之外)或直接交换消息。您的服务器将用于促进两个端点的连接和通信,但不用于安全信息的交换。

您可以在客户端上进行加密。如果你想要最大的隐私,那么你就不信任服务器上的任何东西。如果消息和/或解密密钥从未到达服务器,那么即使你很想读取消息,你基本上也无法读取

当然,现在您遇到了一个新问题——如何在不涉及服务器的情况下在两个或多个客户端之间交换解密密钥。