alsultaneo/v2v

GitHub: alsultaneo/v2v

一个无需注册、基于浏览器端 AES-256-GCM 加密、24小时自动销毁的零知识加密聊天室,服务器永远无法看到明文内容。

Stars: 3 | Forks: 1

# v2v — 零知识加密聊天 24小时后自动销毁的私密加密聊天室。无需账号。不留日志。不留痕迹。 **在线演示:** [v2v.site](https://v2v.site) ## 运作机制 1. 打开网站 — 点击 **Create Encrypted Room** 2. 与你想要邀请的人分享6位房间代码 3. 使用文本、语音消息和照片进行聊天 4. 所有内容会在24小时后自动删除 无需注册。无需邮箱。无需手机号。 ## 加密 所有加密过程均**在浏览器中**使用 Web Crypto API 完成。服务器永远不会看到明文。 - **算法:** AES-256-GCM - **密钥派生:** 在客户端基于房间 ID + salt 的 SHA-256 哈希值进行派生 - **文件:** 在上传前作为二进制数据进行加密 — 服务器仅存储密文 - **参与者:** 昵称在发送到服务器前会进行加密 - **密钥传输:** 房间密钥永远不会离开浏览器。通过 "Copy Secure Link" 按钮分享房间,该按钮会将密钥嵌入到 URL 片段(`#key=...`)中 — 片段内容不会在 HTTP 请求中发送 ### 服务器能看到的内容 | 数据 | 服务器存储的内容 | |---|---| | 消息 | 仅限 AES-256-GCM 密文 | | 文件 | 加密的二进制数据块 | | 昵称 | 已加密 | | IP 地址 | SHA-256 哈希值(加盐,不可逆) | | 房间密钥 | 永远不会获取 — 密钥保留在浏览器中 | ## 功能特性 - 文本消息、表情符号 - 语音消息(在浏览器中录制,上传前加密) - 照片分享(上传前加密) - 参与者列表(加密昵称) - 删除单条消息 - 拖拽文件上传 - 从剪贴板粘贴图片 - 移动优先设计(针对 iOS 和 Android 优化) - 基于 Long-poll 的实时消息传递 - 24小时不活跃后自动删除聊天室 ## 自托管 **环境要求:** PHP 7.4+,Apache 或 Nginx,对项目目录具有写入权限。 ``` git clone https://github.com/YOUR_USERNAME/v2v.git cd v2v chmod 755 . ``` 将你的 Web 服务器文档根目录指向项目文件夹。无需数据库 — 房间以 JSON 文件形式存储。 **Apache** — 确保 `mod_rewrite` 已启用。该项目无需修改 `.htaccess` 即可运行。 **Nginx** 示例: ``` server { root /var/www/v2v; index index.php; location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 在 `config.php` 中**进行配置**: ``` define('ETH_ADDRESS', 'your_eth_address'); // donation address define('ROOM_TTL', 86400); // 24h in seconds define('RATE_LIMIT_MAX', 80); // requests per minute per IP define('MAX_FILE_SIZE', 10 * 1024 * 1024); // 10 MB ``` ## 项目结构 ``` v2v/ ├── index.php # Entry point — routing ├── api.php # All API endpoints + form handlers ├── server.php # Core functions: logging, rate limiting, cleanup ├── config.php # Configuration constants ├── views/ │ ├── main.php # Landing page HTML │ └── room.php # Chat room HTML └── assets/ ├── crypto.js # AES-256-GCM encryption engine (Web Crypto API) ├── chat.js # Chat logic: send, poll, render, voice, files ├── main.css # Landing page styles └── room.css # Chat room styles ``` 运行时自动创建的目录: ``` rooms/ — room JSON files uploads/ — encrypted file blobs admin/ — analytics (server-side only) ratelimit/ — rate limit counters v2v/ — action logs (hashed IPs only) ``` ## API API 在运行时具有完整的文档: ``` GET /index.php?api=1&action=api_schema ``` | 端点 | 描述 | |---|---| | `POST ?api=1&action=create_room` | 创建新房间 | | `POST ?api=1&action=send_message&room=ID` | 发送加密消息 | | `GET ?api=1&action=get_messages&room=ID&last_id=0` | Long-poll 获取新消息 | | `GET ?api=1&action=get_history&room=ID` | 获取最近 100 条消息 | | `POST ?api=1&action=upload_file&room=ID` | 上传加密文件 | | `POST ?api=1&action=add_participant&room=ID` | 注册加密昵称 | | `GET ?api=1&action=get_participants&room=ID` | 获取活跃参与者 | | `GET ?api=1&action=room_info&room=ID` | 房间元数据 | | `POST ?api=1&action=ping&room=ID` | Keepalive 保活 | ## 安全说明 - 房间 ID 是6位数字代码 — 它不是秘密,只是一个会合点 - 实际的加密密钥是在浏览器中从房间 ID 派生出来的;与他人共享房间 ID 意味着他们可以阅读消息 - 如需更高安全性,请使用 "Copy Secure Link",其中包含片段中随机生成的密钥 - 频率限制:每个 IP 每分钟 80 次请求 - 文件大小限制:每个文件 10 MB - 每个房间最多存储 500 条消息 - 房间在24小时不活跃后自动过期 ## 许可证 MIT — 可免费使用、修改和自行托管。 *构建它的原因,是我厌倦了那些知道得太多的聊天工具。*
标签:AES-256-GCM, JSON文件存储, OpenVAS, PHP, SHA-256, URL片段传密钥, Web Crypto API, 前端加密, 加密算法, 加密聊天室, 匿名聊天, 后渗透, 图片分享, 安全通信, 实时通讯, 客户端加密, 密钥派生, 对称加密, 开源聊天, 数据可视化, 文件加密传输, 无痕聊天, 无账号注册, 无需数据库, 移动端优化, 端侧加密, 端到端加密聊天, 网络信息收集, 网络安全, 自动删除, 自动化审计, 自托管聊天, 语音消息, 长轮询, 阅后即焚, 隐私保护, 隐私工具, 隐蔽通信, 零知识加密