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项目。如果您尝试打破应用程序,您很可能会成功。我想要的验证检查和验证检查不多,但是有足够的能够保护用户的帐户和对话。如果有什么问题,我会提前道歉。