X:/CHAT是一個Web應用程序,它在前端使用HTML,CSS和JavaScript,而後端則使用Node.js。它允許用戶以安全的方式相互通信(儘管我是Node.js的新手,並且無法保證上述安全性)。
JavaScript和本地存儲絕對必須使Web應用程序運行。本地存儲用於存儲公共鑰匙,私鑰,設置等。
如果使用“匿名聊天”功能,服務器絕對沒有存儲。我想製作我能想到的最安全的交流形式,最終我選擇什至不通過匿名聊天來存儲對話日誌。當您單擊“匿名聊天”按鈕時,您會重定向到“/匿名”,其中為您生成ID,以及公共密鑰和私鑰。這些僅保存在您的瀏覽器上(本地存儲)。服務器不存儲任何此信息。服務器存儲的唯一是對話ID和創建時間。這樣做是為了使對話設置為一個小時後到期。加載完成後,您可以將URL發送給您想要的任何人,並將其連接到您。一旦這樣做,他們還會獲得為他們生成的公共/私鑰對以及ID。然後,向您提供了他們的公鑰及其ID。當您發送消息時,您會使用其RSA-2048公共密鑰對其進行加密,然後他們使用私鑰在本地(本地)對其進行加密。由於該消息是在客戶端加密的,因此服務器永遠不知道正在說什麼。刷新頁面會刪除刷新的任何人的消息,因為這些消息尚未存儲在任何地方。由於服務器上沒有存儲任何東西,因此這意味著用戶可以輕鬆更改其ID等,這就是為什麼小組而不是公眾使用該項目的原因。讓服務器存儲匿名對話將提供用戶不可變的對話的好處,但這意味著服務器可以修改它們,並且日誌將存在。那麼,您是否願意信任您的朋友或一些隨機服務器?
普通聊天更像是您的通用聊天應用程序。消息仍在客戶端加密使用RSA-2048,用戶的私鑰使用AES-256-CTR加密,該密鑰使用用戶密碼的SHA512哈希作為解密密鑰。用戶的密碼使用帶有10個鹽回合的BCRYPT存儲。簡而言之,除非修改了服務器代碼或捕獲用戶的私鑰的東西,否則絕對無法獲取對話的內容。用戶的設置,聯繫人和其他數據以JSON格式存儲在文本文件中,以便於訪問。這些存儲在明文中,但是很容易使用用戶的密碼和AE進行加密。如果您想實現這一目標,請記住,已經寫了一些功能來使其更容易。您可以使用“ AES_ENCRYPT(明文,密碼)”和“ AES_DECRYPT(加密,密碼)”功能,我寫信給我輕鬆加密/解密您想要的任何內容。
可能會有一些錯誤或一些意外的行為,但這是可以預料的,畢竟這是我的第一個Node.js項目。如果您嘗試打破應用程序,您很可能會成功。我想要的驗證檢查和驗證檢查不多,但是有足夠的能夠保護用戶的帳戶和對話。如果有什麼問題,我會提前道歉。