前言
跨雲CROSSIM推出的crossim-ims-share是一個重磅專案,促進了專案與專案方之間的深度共享合作。
使用共享IM
1. 下載android原始碼https://gitee.com/apowner/crossim-share-android (注:該程式碼僅供參考,開發者可根據自己的需求提取其中的模組使用)
2. 設定賬戶伺服器IP
3. 設定共享IM節點IP
4. 註冊並登入
驗證:到華為市場下載身邊大愛app,兩個app可以互相新增好友,相互聊天即可說明使用成功。
共享IM節點:
| 
                     103.163.46.82  | 
                     共享IM節點  | 
| 
                     47.92.123.66  | 
                     共享IM節點  | 
| 
                     39.100.133.144  | 
                     共享IM節點  | 
| 
                     45.32.90.120  | 
                     共享IM節點(美國)  | 
| 
                     39.100.147.50  | 
                     託管IM節點,支援web和小程式  | 
跨雲CROSSIM網路結構
資料儲存
RegisterServer儲存的資料
| 
                     Id  | 
                     使用者註冊id  | 
| 
                     Ec key pair  | 
                     Ec金鑰對  | 
| 
                     Contacts  | 
                     通訊錄  | 
| 
                     IMIP  | 
                     連結的共享IMS的IP  | 
| 
                     Face  | 
                     使用者頭像  | 
| 
                     Nickname  | 
                     使用者暱稱  | 
| 
                     Osnid  | 
                     Osnid  | 
注: RegisterServer儲存的資料為敏感資料,由企業建設一個service來儲存,或者儲存在使用者手機端。
ShareIMS儲存的資料
| 
                     Osnid  | 
                     需要提供服務的osnid  | 
| 
                     Msg  | 
                     聊天記錄  | 
| 
                     Face  | 
                     使用者頭像  | 
| 
                     Nickname  | 
                     使用者暱稱  | 
流程
1. RegisterServer生成id和ec key pair
2. RegisterServer呼叫命令將osnid註冊到ShareIMS,註冊成功就記錄下IMIP
3. app從RegisterServer獲取id、ec key pair、IMIP、Contacts、Face、Nickname
4. app透過IMIP連線到ShareIMS
5. app將face和nick那麼分別上傳到RegisterServer和ShareIMS
6. app新增好友以後,將contacts更新到Register
7. app傳送訊息以後,ShareIMS會將訊息轉發給其他IMS
8. 其他IMS收到訊息以後轉發給使用者,並記錄訊息來源(IP)
9. 使用者傳送回執以後,將回執傳送給ShareIMS。
更換共享服務
RegisterServer將osnid註冊到其他ShareIMS,APP不再連線到原來的IMS,可以傳送命令給原來的IMS登出其osnid。如果不登出,原有ShareIMS由於收不到來自APP的回執,在達到一定時間以後,就會將使用者訊息刪除,並且將使用者osnid從自己的列表中刪除。
安全性分析
由於OSPN網路的整體設計是基於PKI設計的,因此敏感資料的生成隔離了ShareIMS。
使用者將賬號登記到了ShareIMS上以後就可以使用IM服務。使用者將資料傳送到ShareIMS時的資料處理方案為:
(1) 生成隨機加密key
(2) 用對方公鑰加密key
(3) 用key加密明文
(4) 將密文打包
(5) 使用自己的私鑰對資料包進行簽名。
ShareIMS收到資料以後,由於沒有私鑰,無法解開資料內容,因此在ShareIMS上儲存的資料是安全的。
傳統的私有化部署IM服務,當伺服器發生故障時,會導致使用者無法使用。使用共享IM服務,當部分節點發生故障時,可立即切換到其他無故障節點繼續使用。
user1與user2透過多節點接入完成訊息互動示意圖
優點
敏感資料分離以後,企業和個人無洩露問題。且app可以同時連線多個ShareIMS,從多個節點獲取資料,切換網路方便,容錯性更高。
| 
                     Web3共享IM  | 
                     IM公有云  | 
                     IM私有云  | 
|
| 
                     價格  | 
                     根據使用量來定,每月可低至1元  | 
                     每月最低888元  | 
                     每年雲服務費2H4G每年1500起  | 
| 
                     維護  | 
                     無需維護  | 
                     無需維護  | 
                     需要專業人員維護  | 
| 
                     遷移  | 
                     遷移到任何節點,只需指定IP。從共享節點遷移到私有節點也僅需要指定新IP即可完成。  | 
                     無法遷移,在哪個雲商那裡購買就只能一直在該處使用。  | 
                     需要專業人員進行遷移。  | 
| 
                     服務提供人  | 
                     由參與者共享自己的多餘資源  | 
                     由雲商提供  | 
                     由企業自己提供  | 
| 
                     是否有收益  | 
                     提供服務者有收益  | 
                     使用者無收益  | 
                     無收益  | 
| 
                     安全性  | 
                     敏感資料由企業控制,接入節點不可預知,駭客攻擊難度大。  | 
                     安全由雲商負責。  | 
                     需要專業人員負責安全性,被攻擊導致DOS機率較大。  | 
| 
                     活躍度  | 
                     與全球app互聯,外連日活很高,往往小部分人就可以達到很高的外聯日活。  | 
                     由企業的運營團隊決定。絕大多數是低日活  | 
                     由企業的運營團隊決定。絕大多數是低日活  | 
| 
                     最低配置  | 
                     最低1核2G雲VM即可滿足需求  | 
                     一般要求2H4G以上  | 
|
| 
                     平臺關閉以後賬戶是否可以繼續使用  | 
                     可以  | 
                     否  | 
                     否  | 
| 
                     全球服務  | 
                     是  | 
                     否  | 
                     否  | 
缺點
目前僅支援android和ios,暫時不支援web端和微信小程式端(微信小程式需要使用https,開發者需要自己建立節點安裝證書,微信小程式建議參考託管IM節點)。
自建共享IM節點
開發者搭建共享IM節點參見專案
ospn-connector: https://github.com/openbpi/ospn-connector
ospn-ims-share: https://github.com/openbpi/ospn-ims-share
注:配置時,需要指定鄰近的共享IM節點IP。
