如何製作類似於 Signal 的真正安全的消息應用程序?
已發表: 2021-10-05在線交流的隱私和安全是當今的熱門話題,這是有原因的。 由於我們知道如何創建加密應用程序,因此我們想在本文中分享我們的經驗並提供提示。 我們將討論行業現狀、加密方法和可能的風險。 如需估價,請滾動至文章末尾。
發生了什麼?
2021 年初,全球最受歡迎的即時通訊應用 WhatsApp 推出了新的服務條款。 他們引起了軒然大波,部分原因是混亂。 之後,特斯拉 CEO 埃隆馬斯克是 Facebook(WhatsApp 歸 Facebook 所有)的知名批評者,他建議他的 4250 萬推特粉絲改用以前不太知名的信使 Signal。
使用信號
— 埃隆·馬斯克 (@elonmusk) 2021 年 1 月 7 日
在這條推文之後, Signal——順便說一句, WhatsApp本身使用的加密系統——用戶激增。 這種激增是如此之大,以至於服務器難以應對。 Signal 的開發人員設法處理了這種情況,但它表明對安全消息傳遞系統的需求正在上升。 現在,每個人都想知道如何創建像 Signal 這樣的應用程序。 這讓我們看到了這篇文章。
擁有安全的即時通訊工具意味著什麼?
當今大多數即時消息應用程序都使用端到端加密。 它是什麼? 下面以聊天應用程序架構圖為例:
簡而言之,一個典型的信使具有三個主要相互關聯的部分:
發件人的設備
服務器
收件人的設備
消息由發送方通過服務器發送給接收方。 如果沒有加密,此消息將作為純文本傳輸,因此任何人都可以在傳輸過程中的任何時候讀取它。 通過加密,消息從純文本轉換為密文(使用密鑰加密)以進行傳輸,然後在接收方的設備上使用配對密鑰轉換回(解密) 。
端到端加密意味著加密密鑰存儲在兩端,即存儲在用戶的設備上,而不是存儲在服務器上。 這使得除了發送方和接收方之外的任何人都無法閱讀消息。 甚至擁有服務器的服務提供商也無法訪問它們。 為了破解這些消息,黑客需要訪問用戶的設備,因為入侵服務提供商的服務器幾乎沒有用。
端到端加密的弱點是它容易受到所謂的中間人(MITM) 攻擊。 熟練的 MITM 黑客可以破解存儲在服務器上的公鑰並配置系統以將黑客識別為合法的接收者,從而允許黑客竊聽對話,甚至代替預期的接收者參與其中。
為了對抗 MITM 攻擊,Signal 開發人員使用雙棘輪算法進一步升級了他們協議的端到端加密。 除了用戶安裝應用程序時創建的公鑰和私鑰之外,此算法還會創建會話密鑰。 為每條發送的消息創建會話密鑰,並在會話完成時(即收到消息時)自毀,如果黑客設法獲得一個會話的密鑰,則無法解密所有消息。
WhatsApp 對其所有消息使用端到端加密。 實際上,它使用的是 Signal 自己的加密協議。 那麼它現在有什麼問題呢?
端到端加密的不同方法
WhatsApp 確實無法窺探您的消息內容,也無法監聽您的應用內通話。 但是,WhatsApp 使用的 Signal 加密協議版本僅加密消息的內容。 這意味著 WhatsApp 以及 Facebook 以及他們決定與之共享信息的任何人都可以看到您在與誰交談,何時何地。 此元數據可以揭示有關對話中所有參與者的非常私人的信息。
與此同時,Signal 應用程序也使用了一種更新的協議來對元數據進行編碼,任何人——甚至包括應用程序的所有者——都無法在不直接訪問用戶設備的情況下對其進行解碼。
此外,根據 Signal 的隱私政策,幾乎沒有元數據永久存儲在他們的服務器上——只有在收到消息所需的時間。 然後刪除除用戶上次登錄日期以外的所有內容。
唯一這樣做的其他信使應用程序是 Telegram。 但是,在 Telegram 中,端到端加密僅適用於秘密模式,默認情況下不適用於所有聊天。 Telegram 上的一般消息沒有很好地加密。 至少 Telegram 拒絕與任何人分享此類信息,無論是政府還是廣告商。
今天,消息應用程序安全是一個巨大的話題——信使無法或不願意與政府分享用戶信息經常會受到限制和禁令。 例如,Telegram 在其創建者的故鄉俄羅斯已被禁止; 阿拉伯聯合酋長國已禁止所有非國有 VoIP 服務。 作為回應,世界各地的人們都需要更安全的通信方式,而安全移動消息應用程序的市場也在不斷增長。
那麼如何製作一個安全的信使呢?
大多數人至少使用一個信使,可能是幾個,信使應用程序的基本功能集幾乎不會讓您感到驚訝。 因此,我們將在本節中進行簡要介紹。 以下是安全聊天解決方案的功能表:
特徵 | 描述 |
---|---|
入職 | 簡要介紹您的應用程序; 越短越好,但要使其易於理解。 |
註冊登錄 | 信使帳戶通常與電話號碼相關聯。 |
用戶資料 | 個人資料存儲用戶的個人信息和重要功能(如聯繫人、設置和常見問題解答)的鏈接。 |
設置 | 允許用戶為方便起見調整信使。 |
通知 | 在信使應用程序中,必須有一個可靠的即時通知系統。 |
文字聊天 | 需要現代消息傳遞應用程序來支持一對一聊天和群聊。 |
文件傳輸 | 用戶需要能夠交換文本消息以及共享圖像和文檔。 |
語音聊天/通話 | VoIP 功能在今天與發短信一樣重要。 即使互聯網速度較慢,高質量的聲音也需要穩定的連接。 ![]() |
自毀消息 | 即使使用 Signal 協議,如果有人拿到用戶的手機,他們可以看到所有以前的消息,除非用戶刪除它們。 您可以為用戶添加一個選項來設置計時器以銷毀消息和/或媒體文件。 |
同步 | 大多數人擁有不止一台安裝了通信應用程序的設備。 為了讓用戶能夠在他們認為合適的設備之間順利切換,您需要提供同步功能。 |
兩步驗證 | 為了在設備被盜時更好地保護用戶數據,請通過指紋、密碼、PIN 碼或驗證碼或鏈接提供兩步驗證。 |
如果您想構建一個與眾不同的點對點消息傳遞應用程序,請考慮以下功能:
貼紙和 GIF。 如今,其他所有 Messenger 都將流行的 GIF 服務 Giphy 集成到其界面中,以補充表情符號。 當 Telegram 開始免費提供貼紙時,貼紙開始流行(例如,與 Viber 不同,後者只有一些貼紙是免費的)。
秘密/私人聊天。 無論您是否對用戶的元數據進行加密,在當今暴風雨般的現實中,消失或可鎖定聊天可能會成為您應用的賣點。 例如,Telegram 提供的秘密聊天會在您在設備上退出 Telegram 時自動消失。 這些聊天內容不會存儲在 Telegram 的雲服務器上,因此即使您在多台設備上登錄也無法備份或同步。
視頻聊天。 2020 年,由於大流行而被迫遠程工作的人數眾多,視頻會議工具的受歡迎程度大幅上升。 許多人對現有的流行通訊工具缺乏視頻通話——一對一和群組通話——感到遺憾。 它絕不是必須具備的功能,但它肯定會受到用戶的歡迎。
如何保護消息傳遞應用程序
後端是信使發生奇蹟的地方。 後端專家負責您的聊天應用程序的安全性和可靠性,因為他們知道如何加密消息。
有多種方法可以實現端到端加密並使通信應用程序安全。 通常,加密的消息存儲在信使的服務器上——雲服務器更安全,因此推薦用於此目的——並且解密密鑰只能從用戶的設備中獲得,以避免在服務器被黑客入侵時發生數據洩露。
也可以完全放棄將消息存儲在您的服務器上並將它們存儲在用戶的設備上。 但這意味著您的用戶將無法恢復他們的消息歷史記錄,以防他們登錄的設備丟失或刪除應用程序。 在設備之間同步消息也是不可能的。
要製作像 Signal 這樣的安全消息傳遞應用程序,您實際上可以使用 Signal 本身的加密消息傳遞 API 。 Signal 的開源加密協議在構建 Messenger 的開發人員中最受歡迎,因為它不斷接受同行審查和審計。 在撰寫本文時,以下信使使用 Signal 的協議來加密其消息的內容:
- 微信
- Facebook Messenger(僅限秘密聊天)
- Skype(僅限私人對話)
- Android 版 Google 信息 (SMS)
Telegram 使用自己的 256 位對稱 AES 加密算法,稱為 MTProto 進行秘密聊天。 但是,該算法是閉源的,因此 Telegram 受到了廣泛批評。
製作安全消息應用程序的成本
製作任何應用程序的成本在很大程度上取決於開發所需的時間。 就功能的數量而言,信使似乎並不太複雜; 但是,對於加密良好的消息傳遞應用程序而言,僅後端可能需要大約 520 小時才能構建。
信使後端的常用編程語言選項是Elixir 或 Erlang — Ruby on Rails 不是文本消息、媒體和音頻/視頻通話形式的大量數據的好選擇。 WhatsApp 使用 Erlang,而 Elixir 使用的是 Discord。
在Mind Studios ,我們開發了一個帶有基於 Elixir 的後端的信使應用程序。 但是,Elixir 本身是基於 Erlang 並混入了一些 Ruby,因此經驗豐富的 Elixir 開發人員也可以使用 Erlang 編寫代碼。
以下是我們對開發安全消息傳遞應用程序所需時間的看法:
業務分析和創建規範 — 96 小時以上
UI/UX 設計 — 168+ 小時
iOS 客戶端移動應用程序 — 具有最重要功能的 MVP 需要450 多個小時
後端開發 — 520 多個小時
iOS 應用測試 — 約240 小時
Android 開發所需的時間比 iOS 開發時間略短,但由於設備種類繁多,測試所需的時間更長。
根據這個粗略的時間估算,構建一個真正安全的聊天應用程序的成本將從 51,590 美元起,並且會增加額外的功能。
結論
安全信使特別重要,對它們的需求今天很高,明天會更高。 但競爭也是如此。 並非每家公司都可以製作加密的消息傳遞應用程序。 要開發像 Signal 這樣的安全即時消息應用程序,您需要在這個領域有經驗的開發人員。
在設計方面,您還需要跟上行業領導者的步伐。 Signal 應用程序很簡單,並不以其直觀性而聞名,但它贏得了關心隱私而不是花里胡哨的用戶。 另一方面,WhatsApp 和 Telegram 看起來很花哨,除了安全之外還非常直觀(雖然它們的安全性可能與 Signal 不在同一級別,但仍然令人印象深刻)。 因此,要在這個細分市場中大放異彩,您的自定義應用程序需要既安全又用戶友好。 平衡這些要求不是小事。 但是有了合適的團隊,這是可能的。