2013-03-31 61 views
2

考慮任何聊天應用程序,如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如何存儲此消息或文件?加密如何完成?簡而言之,如果我要製作這樣的產品,那麼我怎麼能向用戶保證他們的數據在我們的服務器上是安全和私密的,即使我們或我的公司無法讀取它,即使我們想要。

總之,一個公共領域的網站如何設法將陌生人和自身的用戶數據保密並保密呢?

感謝您的建議!

+0

「我假設在S上運行着NAT服務器,雙方都向S標識自己,」是什麼? NAT在這裏意味着什麼?網絡地址解讀? – thejh

+0

是的。 A和B都不知道對方的知識產權,所以調解員必須與他們交談,瞭解他們的知識產權。又名NAT。謝謝我將編輯問題以添加完整形式 –

+0

你想要1:1還是多對多(羣聊)? – thejh

回答

4

我假設1:1溝通(換句話說,愛麗絲和鮑勃有一個私人通信) - 小組聊天是棘手的。

看看OTR。基本上,您需要端到端加密並且聊天客戶端需要能夠自動與其他用戶交換密鑰並幫助用戶確定他是否信任某個密鑰(例如,使用允許兩個用戶確認彼此的密鑰的Socialist Millionaire Protocol 。關於使用共享機密問題的身份因此,服務器不需要爲這個任何特殊代碼 - 它只是向前或將加密後的數據不用輕觸,但是,客戶端需要相當長的一段代碼:

  • 的當兩個用戶第一次互相通話時,客戶端需要能夠自動交換公鑰
  • 客戶需要能夠存儲其他用戶的公鑰,以便他們注意到某人的密鑰更改。
  • 的客戶需要能夠幫助用戶在確認其他用戶的身份(例如,使用社會主義百萬富翁協議或通過交換過電話公鑰指紋)和存儲和永久顯示有關該信託信息(例如作爲用戶名旁邊的小「驗證」圖標)。
  • 客戶端需要能夠使用在第一個聯繫人上交換的密鑰從其他對等方登錄/驗證加密/解密簽名/驗證

當然,要說服用戶他們的客戶確實你說什麼,你需要透露源代碼或至少讓一些獨立機構審查

+0

謝謝thejh!看起來我可以使用它。 –

相關問題