Skip to content

Latest commit

 

History

History
70 lines (45 loc) · 3.35 KB

README_CN.MD

File metadata and controls

70 lines (45 loc) · 3.35 KB

E2EEGroupChat

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

使用说明

  1. 打开 https://chat.0f31.com/ 并根据提示加入频道,可以选择加入属于自己的随机名称的频道,或者加入 lounge 等预设频道进行聊天。这个频道名对服务器是加密的,服务器只能看到一个频道的hash,就算服务器被攻击者攻破,攻击者也无法得知或者加入用户的频道。
  2. 连接成功后,应用会生成 RSA 密钥对,并将公钥发送到服务器。
  3. 服务器将转发其他用户的公钥,前端存储这些公钥。
  4. 用户输入消息并发送,前端使用 AES 密钥加密消息,服务器只负责转发加密消息。
  5. 新用户加入或用户离开时,前端会生成新的 AES 密钥,并加密后分发给其他用户。
  6. 无cookie,关闭窗口即丢失所有聊天消息。

安全机制

  • RSA 加密:用于加密 AES 密钥,确保密钥传输安全。
  • AES 加密:用于加密消息内容,确保消息在传输过程中不会被窃取。
  • 动态密钥更新:用户加入或离开频道时,都会生成新的 AES 密钥,防止新用户解密之前的消息并防止老用户解密退出后的消息。

致谢

  • 特别感谢 rao2357zouxianyu 对项目的密码协议设计所做的贡献。

贡献指南

欢迎大家对 E2EEGroupChat 项目提出建议和改进意见。请遵循以下步骤进行贡献:

  1. Fork 本仓库。

  2. 创建新的分支:

    git checkout -b feature-branch
    
  3. 提交您的更改:

    git commit -m "描述您的更改"
    
  4. 推送到分支:

    git push origin feature-branch
    
  5. 创建 Pull Request。

许可证

本项目采用 MIT 许可证。