安全、私密且匿名的点对点聊天——基于Tor网络。
TorChat 真的很酷。 它拥有一些其他工具没有的酷炫功能。
与使用固定地址的标准Tor聊天系统不同,这个实现完全是临时的。
**零持久性**:服务端创建一个临时的隐藏服务。一旦会话结束,.onion地址会被删除,无法恢复或重复使用。
**混合架构**:我注意到托管Tor服务通常是用户最头疼的部分。为了解决这个问题,服务端模式使用内嵌的Tor进程,不需要任何配置。客户端模式则直接连接到你已有的Tor实例(例如Tor浏览器)。也就是说,使用系统Tor。
**简单加密**:我选择了ChaCha20-Poly1305进行加密。它在大多数硬件上比AES更快,并且具有内置的身份验证功能——如果你消息中的单个比特在传输过程中被篡改,应用会直接拒绝它。
嗯,这就是用🔏设计的。
注意:ChaCha20-Poly1305是一种带关联数据的认证加密(AEAD)算法,它结合了ChaCha20流密码和Poly1305消息认证码。[1] 它的软件性能很快,在没有硬件加速的情况下,通常比AES-GCM更快。[1]: §B
来源:https://en.wikipedia.org/wiki/ChaCha20-Poly1305 https://protonvpn.com/blog/chacha20
自动设置:你不需要成为网络专家。服务端会自动处理Tor握手并创建秘密的.onion地址。
自毁邀请:邀请链接内置计时器。链接只有效10分钟;如果没有人加入,这个“门”就会永久关闭。
二维码共享:不用手动输入56个字符的洋葱地址(很容易输错),主持人可以直接显示二维码让客人扫描。
双向通话(全双工模式):利用Python线程,双方可以同时发送和接收消息,无需等待对方说完。
完全擦除:这个工具是临时的。这意味着它不留下任何足迹。没有日志、没有历史、没有保存的文件。一旦关闭聊天,地址和消息就会消失,仿佛从未存在过。
TorChat 采用Tor架构,以获得最佳用户体验:
零依赖 - 使用内嵌Tor
你只需运行AppImage即可。AppImage无需任何设置。
./TorChat-x86_64.AppImage
# 选择:[1] 主持聊天(服务端)
需要Tor - 使用系统Tor或Tor浏览器
希望大多数人已经有这个了。
选项A:使用Tor浏览器(最简单)
# 1. 首先你需要打开Tor浏览器,因为它提供了一个在端口9150上工作的SOCKS代理,这是Tor浏览器使用的端口。
# 2. 运行TorChat客户端
./TorChat-x86_64.AppImage
# 选择:[2] 连接到对等方(客户端)
选项B:使用系统Tor
# 1. 安装并启动系统Tor
sudo apt install tor [ debian ]
sudo pacman -S tor [ arch ]
要启动tor服务,你需要使用以下命令:
sudo systemctl start tor。
这将启动并运行tor服务。如果你想使用tor,则必须使用tor服务。命令 sudo
systemctl start tor
就是你应该输入来启动tor的命令。
# 2. 运行TorChat客户端
./TorChat-x86_64.AppImage
# 选择:[2] 连接到对等方(客户端)
人员1(主持人):
chmod +x TorChat-x86_64.AppImage
./TorChat-x86_64.AppImage # 选择 [1] 服务端
# 分享邀请URL/二维码
人员2(加入者):
# 先打开Tor浏览器,然后:
./TorChat-x86_64.AppImage # 选择 [2] 客户端
# 粘贴邀请URL
如果你觉得自己是个很酷的开发者,那就看这里。
Python 3.7+
系统Tor(仅客户端模式需要)
git clone https://github.com/blackXploit-404/torchat.git
cd torchat
python -m venv torchat
source torchat/bin/activate
pip install -r requirements.txt
服务端(主持人):
python3 server.py
# 这使用内嵌Tor,因此无需设置
客户端(加入者):
# 先启动系统Tor
python3 client.py
加密流程:
共享密钥通过SHA256哈希生成32字节的密钥。
每条消息生成一个随机的12字节nonce。
消息被加密,nonce被附加在数据前面。
接收方取出前12个字节作为nonce用于解密。
网络:
服务端:绑定到127.0.0.1:5000,Tor将其映射到一个公网的.onion地址。
客户端:使用SOCKS5协议通过Tor电路建立TCP连接。
┌─────────────────┐ ┌─────────────────┐
│ 服务端模式 │ │ 客户端模式 │
├─────────────────┤ ├─────────────────┤
│ 内嵌Tor │ │ 系统Tor │
│ - Tor进程 │◄──►│ - SOCKS代理 │
│ - 隐藏服务 │ │ - 端口9050/9150 │
│ - 无依赖 │ │ - 已有Tor │
└─────────────────┘ └─────────────────┘
发送方:
用户消息:"Hello World"
│
▼
┌─────────────────────────┐
│ ChaCha20-Poly1305 │
│ 加密引擎 │
├─────────────────────────┤
│ 密钥:SHA256(secret) │
│ Nonce:12字节随机数 │
│ 明文:消息 │
└─────────────────────────┘
│
▼
加密后的字节:[nonce + ciphertext + auth_tag]
│
▼
┌─────────────────────────┐
│ Tor网络 │
│ (3跳匿名性) │
└─────────────────────────┘
接收方:
我收到了一些加密字节。这些加密字节已被接收。加密字节现在在这里。
│
▼
┌─────────────────────────┐
│ ChaCha20-Poly1305 │
│ 解密引擎 │
├─────────────────────────┤
│ 密钥:SHA256(secret) │
│ Nonce:提取 │
│ 验证:auth_tag │
└─────────────────────────┘
│
▼
解密后的消息:"Hello World"
主持人 TOR网络 客户端
┌─────────┐ ┌───┐ ┌───┐ ┌───┐ ┌─────────┐
│ 内嵌Tor │───────────▶│ A │───▶│ B │───▶ │ C │◄─────│ 系统Tor │
│ │ │ │ │ │ │ │ │ │
└─────────┘ └───┘ └───┘ └───┘ └─────────┘
│ 入口 中间 出口 │
│ 节点 节点 节点 │
▼ ▼
.onion地址 3跳加密电路 SOCKS5代理
-共享密钥。此方法使用一个已设定的密码,目前使用起来是没问题的。
无用户认证。任何获得邀请URL的人都可以加入。
无消息历史。消息不会存储在任何地方。这意味着当你发送一条消息时,它不会被保留。消息不会被保存,所以你以后无法查看它们。这就是系统处理消息的方式。消息不会被保存在任何存储中,它们只是一闪而过。然后就消失了。
邀请过期 - 邀请出于安全考虑会过期(默认10分钟)
# 内嵌Tor(服务端)
DataDirectory /tmp/tor_chat_xyz/
HiddenServiceDir /tmp/tor_chat_xyz/hidden_service/
HiddenServicePort 5000 127.0.0.1:5000
SocksPort 0 # 服务端禁用
# 系统Tor(客户端)
SocksPort 9050
# 默认系统配置
"地址未找到":提醒用户等待30-60秒,让Tor网络发布新的.onion描述符。
"连接超时":建议检查Tor服务状态和网络连接。
sudo systemctl status tor
现在它的功能比这个更多了

TorChat 旨在用于合法的隐私增强通信。请负责任地使用,并遵守当地法律。
本项目采用 MIT 许可证。详情请参阅 LICENSE。
想让 TorChat 变得更好?欢迎贡献!