代码之家  ›  专栏  ›  技术社区  ›  sanjeev mk

聊天应用程序的服务器端实现[已关闭]

  •  2
  • sanjeev mk  · 技术社区  · 13 年前

    考虑一下任何聊天应用程序,比如gtalk,whatsapp。我的问题与服务器端如何实现这些功能有关。情况是:
    客户端A想通过聊天服务器S与客户端B通话。当实现通信时,我假设S上运行NAT(网络地址转换)服务器,双方通过该服务器向S表明自己的身份。
    在这一点之后,S或S上运行的任何聊天服务器都充当A和B之间的中介。当A发送“嗨,B,你好吗?”时,这句话一定要发送给S,然后S会将其发送给A。

    我的第一个问题是:客户端和服务器之间的通信,是加密的吗?我知道数据将根据TCP/IP通信堆栈进行分组,并且该数据包的数据部分将包含发送的实际文本A。但是这个数据部分,它是通过加密来保护的吗?这意味着,如果有人在哪里嗅探数据包并提取数据,他们能弄清楚A向B发送了什么吗?
    我问的原因是:如果我要制作一个聊天应用程序,我该如何保护我的用户的隐私不受陌生人甚至我自己的侵犯(因为a发送的内容对我的服务器代码是可见的,我还不如把它写到一个文件中;谁知道呢,谷歌可能会这么做:P)。

    现在假设B处于脱机状态,那么S将不得不延迟向B发送消息,直到B联机并要求存储消息。或者在这一点上,考虑像dropbox这样的应用程序临时存储文件。

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

    总之,一个公共域网站是如何管理用户数据的隐私和安全,使其不受陌生人和自身的影响的?

    谢谢你的建议!

    1 回复  |  直到 13 年前
        1
  •  4
  •   thejh    13 年前

    我假设1:1的交流(换句话说,爱丽丝和鲍勃有私人交流)群聊很棘手。

    看一看 OTR 。基本上,你需要 端到端加密 并且聊天客户端需要能够自动与其他用户交换密钥,并帮助用户确定他是否信任密钥(例如 Socialist Millionaire Protocol 它允许两个用户使用有关共享机密的问题来确认彼此的身份。因此,服务器不需要任何特殊代码,只需转发或存储加密数据,而无需接触。然而,客户端需要相当多的代码:

    • 客户需要能够 交换公钥 当两个用户第一次相互交谈时自动进行。
    • 客户需要能够 存储其他用户的公钥 这样他们就能注意到某人的钥匙发生了变化。
    • 客户端需要能够在 确认其他用户的身份 (例如,使用Socialist Millionaire协议或通过电话交换公钥指纹)和 存储并永久显示有关此信任的信息 (例如,作为用户名旁边的一个小的“已验证”图标)。
    • 客户需要能够 加密/解密 签署/验证 使用第一次联系时交换的密钥从其他对等方发送的消息。

    当然,为了让用户相信他们的客户真的会按照你说的去做,你需要 公开你的源代码 或者至少 让几个独立的党派来审查 .