服务器端实现聊天应用程序

时间:2013-03-31 16:14:30

标签: java php sql-server web-services chat

考虑任何聊天应用程序,如gtalk,whatsapp。我的问题与服务器端实现如何完成有关。场景是:
客户端A希望通过聊天服务器S与客户端B通信。当实现通信时,我假设在S上运行NAT(网络地址转换)服务器,双方通过该服务器识别自己在此之后,S或任何聊天服务器在S上运行,充当A和B之间的中介。当A发送“嗨B,你好吗?”时,这句话必须转到S,然后S将其发送给A。

我的第一个问题是:客户端和服务器之间的通信是加密的吗?我知道数据将根据TCP / IP通信栈进行打包,并且该数据包的数据部分将包含发送的实际文本A.但是这个数据部分是通过加密来保护的吗?这意味着,如果某人在哪里嗅探数据包并提取数据,他们是否能够找出A发送给B的内容? 我问的原因是:如果我要创建一个聊天应用程序,我如何保护我的用户的隐私免受陌生人甚至我自己的侵害(因为我发送的内容对我的服务器代码是可见的,我不妨将其写入一个文件;谁知道,谷歌可能会这样做:P)。

现在假设B处于离线状态,那么S必须延迟将消息发送到B,直到B上线并询问存储的消息。或者在这一点上,考虑像dropbox临时存储文件这样的应用程序。

第二个问题:S如何存储此消息或文件?加密是如何完成的?简而言之,如果我要制作这样的产品,我怎么能向用户保证他们的数据在我们的服务器上是安全和私密的,即使我们想要,即使我或我的公司也无法阅读它。

总结一下,公共域名网站如何设法将其用户数据保密并保护其免受陌生人及其自身的侵害?

感谢您的建议!

1 个答案:

答案 0 :(得分:4)

我假设1:1通信(换句话说,Alice和Bob有私人通信) - 小组聊天很棘手。

看看OTR。基本上,您需要端到端加密,聊天客户端需要能够自动与其他用户交换密钥,并协助用户确定他是否信任密钥(例如使用{{3这使得两个用户可以使用有关共享机密的问题来确认彼此的身份。因此,服务器不需要任何特殊代码 - 它只是转发或存储加密数据而不会触及它。但是,客户端需要相当一些代码:

  • 当两个用户第一次互相交谈时,客户需要能够自动交换公钥
  • 客户需要能够存储其他用户的公钥,以便他们在某人的密钥更改时发现。
  • 客户需要能够帮助用户确认其他用户的身份(例如使用社会主义百万富翁协议或通过电话交换公钥指纹)和存储并永久存储显示有关此信任的信息(例如,作为用户姓名旁边的小“已验证”图标)。
  • 客户需要能够使用首次联系时交换的密钥加密/解密签署/验证来自其他对等方的消息。

当然,为了让用户相信他们的客户真的按照您的意思行事,您需要披露您的源代码,或者至少让一些独立方审核