為什麼有了 Signal,還要選擇 Coming ?

買賣虛擬貨幣

CHAINX · PCX


如今,我們的大多數通訊都是使用智慧手機和計算機上的訊息傳遞應用程式線上進行的。但是,確保我們的訊息保持私密性和安全性變得越來越困難,這就是為什麼業務使用者和消費者現在都轉向加密訊息傳遞應用程式的原因。而加密通訊應用 Signal 就是端對端加密通訊應用軟體中的佼佼者。 

Signal 

加密通訊軟體 

全球各地數百萬人每天在使用 Signal 進行免費的即時通訊。收發可信的訊息,進行高畫質影片語音通話, 讓人們隨時保持互聯互通。藉助 Signal 持續的高階隱私保護技術,可專心與重要的人分享重要的時刻。那麼 Signal 都有哪些技術實現(基於服務端 3.21 版本)? 

基於 websocket 

協議通訊 

首先說一下使用 websocket 通訊的好處是: 

1. 真正的全雙工方式,建立連線後客戶端與伺服器端是完全平等的,可以互相主動請求。而 HTTP 長連線基於 HTTP,是傳統的客戶端對伺服器發起請求的模式 

2. 減少通訊量,只要建立起 websocket 連線,就一直保持連線,在此期間可以源源不斷的傳送訊息, 直到關閉請求。也就避免了 HTTP 的非狀態性。和 HTTP 相比,不但每次連線時的總開銷減少了,而 且 websocket 的首部資訊量也小 ,通訊量也減少了。 

3. 減少資源消耗,那麼為什麼他會解決伺服器上消耗資源的問題呢?其實我們所用的程式是要經過兩層代理的,即 HTTP 協議在 Nginx 等伺服器的解析下,然後再傳送給 相應的 Handler(PHP等)來處理。

簡單地說,我們有一個非常快速的接線員(Nginx),他負責把問題轉交給相應的客服(Handler)。本身接線員基本上速度是足夠的,但是每次都卡在客服 (Handler)了,老有客服處理速度太慢。導致客服不夠。Websocket 就解決了這樣一個難題,建立後,可以直接跟接線員建立持久連線,有資訊的時候客服想辦法通知接線員,然後接線員在統一 轉交給客戶。這樣就可以解決客服處理速度過慢的問題了。 

Signal 加密通訊軟體正是基於 websocket 協議實現端對端的通訊,客戶端只需要與伺服器建立長連線,就可以實時的接收和傳送訊息,而不是像傳統的 http 請求-應答模式,伺服器只是起一個轉發訊息的作用, 並不會對訊息做任何的處理,訊息的延遲大大降低,保證了訊息的實時性。 

採用 Protocol buffer 

序列化方式

Protocol Buffer 和 XML、JSON 一樣都是結構資料序列化的工具,但它們的資料格式有比較大的區別: 

  • 首先,Protocol Buffer 序列化之後得到的資料不是可讀的字串,而是二進位制流 

  • 其次,XML 和 JSON 格式的資料資訊都包含在了序列化之後的資料中,不需要任何其它資訊就能還原序列化之後的資料;但使用 Protocol Buffer 需要事先定義資料的格式(.proto 協議檔案),還原 一個序列化之後的資料需要使用到這個定義好的資料格式 

  • 最後,在傳輸資料量較大的需求場景下,Protocol Buffer 比 XML、JSON 更小(3到10倍)、更快 (20到100倍)、使用和維護更簡單;而且 Protocol Buffer 可以跨平臺、跨語音使用 

Signal 加密通訊軟體採用 Protocol buffer 實現對客服端與服務之間資料傳輸的序列化和反序列化,使傳輸 的資料更小,速度更快,效率更高。

臨時
儲存
下線訊息 

Signal 透過 Redis 的釋出/訂閱(publish/subscribe)實現訊息的轉發,在釋出訊息的過程中,無可避免的會遇見一端下線的情況,在這種情況下發布訊息會失敗,Siganl 會將釋出失敗的訊息先寫入Redis快取, 再將訊息臨時儲存在 PostgreSQL 資料庫中,當使用者再次上線時,會從資料庫中讀取訊息推送給使用者,在訊息推送成功之後,會將資料庫中的資料刪除,不做任何的保留。

端對端的

加密-X3DH 金鑰演算法

Signal 的核心是"暢所欲言",對 Signal 而言,隱私並非可有可無,而是必不可缺,每條訊息、每次通話、每時每刻都應受到保護,Signal 採用 X3DH 金鑰協商協議來為每次的會話進行加密,來確保每條訊息的隱私性。先用一個簡單的場景介紹一下 DH 金鑰演算法:Alice 和 Bob 想要在一個不安全的通道共享一個 金鑰,該金鑰可被用來進行後續的其他的操作,並且僅被 Alice 和 Bob 所知,第三方無法得知。一個簡單的方法就是,現在全世界都是知道一個值 P=100。Alice 生成隨機值5(私鑰),然後乘上 P,接著傳送 Pa = 500 給Bob;同樣 Bob 生成隨機值6(私鑰),然後乘上 P,接著傳送 Pb = 600 給Alice。   

這樣,Alice 有 100,5 ,600,Bob 有 100,6,500。 

Alice計算: 隨機值 5(自己私鑰) * 600(對端的公鑰) = 3000 等式1 

Bob 計算 : 隨機值 6(自己私鑰) * 500(對端的公鑰) = 3000 等式2 

這樣  Alice 就和 Bob 共享了一個值 s=3000(公鑰),雙方使用 s 對訊息進行加密,再使用各自的隨機值(私鑰)進行解密。這就是 DH 金鑰演算法的一個簡單應用場景,Signal 的使用的 X3DH 金鑰演算法是在 DH 金鑰演算法的衍生演算法 EC-DH 演算法的基礎上衍生出來的,它的安全性更高。 

Signal 存在的問題 
服務端的壓力 

因為 Signal 所有端對端的通訊都是經由服務端將訊息轉發,這就涉及到了服務端的壓力問題,舉一個簡 單的場景: 

在 A 地到 B 地之間有一條高速通道 S,所有的車都是透過 S 這條高速通道從 A 第到 B 地,當車流量越來越大,單條車道已經不能再滿足我們通車的需求,這時候就必須拓寬我們的車道,將單車道變為雙車道。隨著車流量的繼續增大,漸漸的雙車道也不能滿足通車需求,於是就將雙車道拓寬為四車道、八車道。 

雖然拓寬車道可以暫時的解決車流量增加的問題,但終有一天會達到臨界點。伺服器就像我們的車道一樣,隨著使用者的增多,就不得不增加伺服器的數量來支撐我們的服務,增加伺服器數量的同時,也表示著我們的伺服器越來越大.

Signal 的伺服器不僅僅是用來做訊息轉發,還做了其他的工作,如果某天伺服器再像 2021 年 1 月份出現宕機的情況,就意味著所有的服務都將不可用。 

Signal 的電話號碼登入

是否真的隱私?

Signal 的註冊登入簡單快捷,只需要使用手機+驗證碼就可以登入 Signal,開啟隱私聊天之旅。但是 Signal 使用電話號碼登入真的隱私嗎? 

Signal 的群內成員的註冊資料,包括手機號都會被檢視到,並且會檢視手機的通訊錄,在聯絡人介面展 示。對很多國家而言,都實行了實名制電話號碼,每個電話號碼都對應了一個真實的人。如果我想知道我的朋友是否註冊了Signal,只需要在聯絡人介面搜尋他的電話號碼就可以了,這又是否足夠隱私?對於有心人而言,用一個電話號碼查到個人的真實資訊,我相信這並不是難事。

Coming 

加密通訊軟體 

首先來對比一下 Signal 和 Coming 的相同和不同點 

從表中可以看出,Coming 和 Signal 最大的不同點有兩個: 

1. 對伺服器的依賴: Coming 在前期會和 Signal 一樣,採用 websocket 的通訊方式,但在後期會增加 SMS 通訊方式,使用者可以在兩種通訊方式之間自由切換,減少對伺服器的依賴,就算伺服器宕機了,也還是可以進行通訊,做到真正的端對端通訊。

2. 對 BTC 的支援: Coming 支援多種幣種的支付,與 Signal 最大的不同在於 Coming 支援 BTC 的支付。 

除此之外,Coming 在後期使用鏈上的公私鑰對進行登入,不在使用電話號碼+驗證碼的方式登入,實現 了真正的去中心化。

我們致力於將 Coming 打造成一個去中心化、對伺服器依賴輕、支援包含 BTC 在內的多種幣種支付的端對端加密隱私通訊軟體。

作者:Coming,來源:ChainX社羣

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读