E2EEGroupChat 是一个基于 WebSocket 的端到端加密(E2EE)实时群聊应用。通过使用 RSA 和 AES 加密技术,确保消息在传输过程中不会被服务器或第三方窥探。本应用开发过程中设计思想是把服务器当成一个可能的恶意中间人。因此,服务器并不存储任何明文或密钥,服务器起到的作用只是转发加密后的消息,就算服务器被攻破成为了恶意中间人,用户的任何消息也无法被攻击者监听。具体加密流程见泳道图 https://chat.0f31.com/swim-lane-zh.html 。
您可以访问 https://chat.0f31.com/ 进行体验。
- 端到端加密:使用 RSA 和 AES 加密技术,确保消息只有发送方和接收方能解密。
- 前向安全、后向安全:用户加入或离开频道时,会生成新的 AES 密钥,也就是说,一个用户只能看到自己加入频道之后到退出频道之前的所有消息。加入之前的消息和退出之后的消息,由于AES密钥不同,均无法解密。因此,如果两个人在进行私密聊天,而突然发现第三个人闯入了聊天室,两个人可以立刻终止聊天并转移到其他频道,这样新加入的第三个人无法阅读到任何两人的聊天内容。
- 实时通信:基于 WebSocket 实现低延迟的消息传输。
- 在线用户列表:实时显示当前在线的用户。
- 简单易用的用户界面:响应式设计,适配各种设备。
- 前端:HTML, CSS, JavaScript, Bootstrap
- 加密库:node-forge
- 实时通信:WebSocket
- 打开 https://chat.0f31.com/ 并根据提示加入频道,可以选择加入属于自己的随机名称的频道,或者加入
lounge
等预设频道进行聊天。这个频道名对服务器是加密的,服务器只能看到一个频道的hash,就算服务器被攻击者攻破,攻击者也无法得知或者加入用户的频道。 - 连接成功后,应用会生成 RSA 密钥对,并将公钥发送到服务器。
- 服务器将转发其他用户的公钥,前端存储这些公钥。
- 用户输入消息并发送,前端使用 AES 密钥加密消息,服务器只负责转发加密消息。
- 新用户加入或用户离开时,前端会生成新的 AES 密钥,并加密后分发给其他用户。
- 无cookie,关闭窗口即丢失所有聊天消息。
- RSA 加密:用于加密 AES 密钥,确保密钥传输安全。
- AES 加密:用于加密消息内容,确保消息在传输过程中不会被窃取。
- 动态密钥更新:用户加入或离开频道时,都会生成新的 AES 密钥,防止新用户解密之前的消息并防止老用户解密退出后的消息。
欢迎大家对 E2EEGroupChat 项目提出建议和改进意见。请遵循以下步骤进行贡献:
-
Fork 本仓库。
-
创建新的分支:
git checkout -b feature-branch
-
提交您的更改:
git commit -m "描述您的更改"
-
推送到分支:
git push origin feature-branch
-
创建 Pull Request。
本项目采用 MIT 许可证。