Repository navigation
Releases: Freecode100Year/private-talk
Release list
v2.4.0 前向保密,网页可核验
隐匿对话 v2.4.0:前向保密,网页可核验
与 2.x 兼容:暗号、房间地址都不变,新旧版本可以在同一个房间里。
前向保密(协议 v3)
- 每人进房时在浏览器里生成临时密钥(ECDH P-256),公钥用暗号密钥封好后再发出,服务器看不懂也伪造不了。
- 每条消息用一次性钥匙加密(HMAC 链,用过即丢);有人离开、掉线或被移出,留下的人全部换钥匙。
- 临时密钥只在网页内存里:事后拿到暗号,也解不开当时录下的密文。
- 安全码:侧栏显示 6 位数字,由每个人的临时公钥算出;大家核对一致,就说明中间没有人被调包。
- 丢消息提示:中间有消息没送到(断网或被服务器丢弃),会提示少了几条。
- 新旧共存:房间里有旧版本的成员,或服务器是旧版本时,全员自动退回旧方式,侧栏和对话里明确提示「暂未启用前向保密」;旧版本的人离开后自动恢复。服务器故意丢掉密钥消息,也只能造成这种看得见的退回。
- 服务器只多转发两样看不懂的东西:密钥帧(单独限额,不受 6 秒间隔限制)和消息序号。
网页可核验
- 部署和构建时生成
/integrity.json:网页每个文件的 SHA-256,用发布密钥(server/release-key.pem)签名。 node scripts/verify-site.mjs <网址> [--min-version 2.4.0]从外部核对一个正在运行的网站:清单签名、每个文件的哈希、页面引用的脚本有没有清单以外的。- GitHub 上的
site-watch每 6 小时替 chat.freedom8964.com 核对一次。 - 外部核对看不到「只对某个人下发改过的代码」;担心这一点请用安卓 App 或离线包(网页随安装包签名发布)。
安卓
- 联网版 App 2.3.0 同步发布,内置本版网页:android-online-v2.3.0。
测试
单元测试 57 项(三系统);浏览器端到端测试 101 项,加上 v3 专项测试(三人房间、离开换钥、模拟旧版客户端加入和离开),在本地、Cloudflare 运行时和线上都已通过;安卓 WebView 83 实测通过。
⚠ 自己部署的 Docker / 离线包升级后,旧版网页的标签页需要刷新才会用上 v3。升级会断开当时的聊天。
🤖 Generated with Claude Code
安卓客户端 2.3.0(联网版,前向保密)
安卓客户端 2.3.0(联网版):前向保密
内置网页更新到隐匿对话 2.4.0(private-talk d352fbd),连接 chat.freedom8964.com。
- 前向保密(协议 v3):每人进房时生成临时密钥;每条消息用一次性钥匙加密;有人离开、掉线或被移出,大家自动换钥匙。事后就算暗号泄露,也解不开当时录下的对话。
- 安全码:房间侧栏显示 6 位数字。大家互相念一遍,一样就说明中间没有人被调包。
- 丢消息提示:有消息没送到时(断网,或被服务器丢弃),会提示少了几条。
- 与旧版共存:房间里有人还在用旧版本时,自动退回旧加密方式,并明确提示「暂未启用前向保密」;旧版本的人离开后自动恢复。
已在安卓 10(WebView 83)模拟器上实测:与电脑浏览器互发消息,两端安全码一致。
签名证书 SHA-256:612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2(与之前各版相同,可直接覆盖安装)。
🤖 Generated with Claude Code
安卓客户端 2.2.0(已被 2.3.0 取代)
⚠ 已被 2.3.0 取代(新增前向保密)。
「隐匿对话」安卓联网版 2.2.0。
- 界面新增 8 种语言,共 12 种:简体中文、繁體中文、English、Español、বাংলা、Русский、العربية、Kreyòl Ayisyen、한국어、اردو、Français、हिन्दी。跟随系统语言,也可在右上角切换。阿拉伯语和乌尔都语从右往左排版。
- 暗号可以用任何语言的文字和数字(以前只能用数字、英文字母和中文)。
- 修复平板宽度下标题单词粘连、601–720px 顶部溢出。
- 其余同 2.1.0:网页文件内置在 App 里(服务器被攻破也改不了加密代码),禁止截屏和录屏。
升级:已装 2.0.0 / 2.1.0 的可以直接覆盖安装(同一签名,已在模拟器上验证)。从 1.0.0 升级需先卸载。
- 文件:
PrivateTalk-online-v2.2.apk,Android 7.0 及以上。 - APK 签名证书 SHA-256:
612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2 - 内置网页来源:隐匿对话 60403a6。校验值见
PrivateTalk-online-SHA256SUMS.txt,源码PrivateTalk-online-source.zip。
🤖 Generated with Claude Code
安卓客户端 2.1.0(联网版,新增西班牙语)
⚠️ 已被 2.2.0 取代。
「隐匿对话」安卓联网版 2.1.0。
- 新增西班牙语(Español)界面:跟随系统语言,也可在右上角切换。
- 平板宽度(601–960px)顶部只显示图标,不再挤出屏幕。
- 其余同 2.0.0:网页文件内置在 App 里(服务器被攻破也改不了加密代码),禁止截屏和录屏。
升级:已装 2.0.0 的可以直接覆盖安装(同一签名,已在模拟器上验证)。从 1.0.0 升级需先卸载。
- 文件:
PrivateTalk-online-v2.1.apk,Android 7.0 及以上。 - APK 签名证书 SHA-256:
612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2 - 内置网页来源:隐匿对话 36ae53c。校验值见
PrivateTalk-online-SHA256SUMS.txt,源码PrivateTalk-online-source.zip。
🤖 Generated with Claude Code
安卓客户端 2.0.0(已被 2.1.0 取代)
⚠️ 已被 2.1.0 取代(新增西班牙语,可直接覆盖安装)。
「隐匿对话」安卓联网版 2.0.0。
和 1.0.0 的区别
- 网页文件内置在 App 里:页面、脚本、样式都从安装包里读取,不再从网站下载。网站服务器或 CDN 就算被攻破,也改不了 App 里负责加密的代码。只有聊天消息(WebSocket)走网络。
- 禁止截屏、录屏,最近任务里也看不到聊天画面。
- 包含网站最新功能:消息补齐长度、红色「紧急离开」、切后台模糊、安卓输入法一次点发送。
- 没网时也能打开首页;联网后即可进房。
升级注意:签名换成了本项目自己的密钥,需要先卸载 1.0.0 再安装。以后的版本会用同一把密钥,可以直接覆盖升级。
已测试(Android 11 模拟器):断网打开首页(证实页面来自安装包);联网后用邀请链接进房,与另一台设备互发消息成功;正式版截屏被系统拦截。
- 文件:
PrivateTalk-online-v2.apk(约 0.9 MB),Android 7.0 及以上。 - APK 签名证书 SHA-256:
612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2(与离线版相同) - 内置网页来源:隐匿对话 d9b7591。校验值见
PrivateTalk-online-SHA256SUMS.txt,源码PrivateTalk-online-source.zip。
🤖 Generated with Claude Code
安卓客户端 1.0.0(已被 2.0.0 取代)
⚠️ 已被 2.0.0 取代:2.0.0 把网页文件内置在 App 里,更安全。升级需先卸载 1.0.0。
「隐匿对话」安卓联网客户端:打开即访问 https://chat.freedom8964.com/ ,网页由网站实时加载,与网页版完全一致。
- 文件:
PrivateTalk-online-v1.apk(约 25 KB),Android 7.0 及以上,不分 ARM/x86。 - 权限:只有联网权限;不读文件、相机、麦克风、通讯录,不读取剪贴板。
- 证书校验失败直接断开,不放行;退出时清理 Cookie、缓存和网页存储。
- 安装:下载 APK → 允许浏览器/文件管理器「安装未知应用」→ 安装。老手机建议先更新「Android System WebView」或 Chrome。
已测试:Android 11 模拟器(系统自带 WebView 83)上安装、打开网站、进房间,并与另一台设备的浏览器互发消息成功。测试中发现网站在 Chrome 86 以下的浏览器内核里进不了房间,已在网站端修复(8aa9510)。
2026-10-14 复测:从本页下载的 APK 校验值一致;邀请链接直接打开 App 进房间、中英文收发、复制房间链接均正常。复测发现安卓输入法下第一次点「发送」没反应,已在网站端修复(b40965c),App 无需更新。
APK 签名证书 SHA-256:3ef031a4e53f41e6e863187ff67fa4d1f3540016c11e10de25b77dc28cee5ae6
文件校验值见 PrivateTalk-online-SHA256SUMS.txt。源码:PrivateTalk-online-source.zip。
🤖 Generated with Claude Code
安卓离线版 v3(arm64,免互联网)
「隐匿对话」安卓离线版:一部手机当服务器,其他手机连它的热点或同一个 Wi-Fi,全程不需要互联网。
- 文件:
PrivateTalk-offline-arm64-v3.apk(约 58 MB),Android 7.0 及以上,仅 arm64 手机(近几年的手机基本都是)。 - 内置:Node.js 24 LTS 及依赖(官方 Termux 软件包,未修改)、聊天服务器和网页(隐匿对话 b40965c)。
- 基于 Termux 修改,包名
com.termux:不能和官方 Termux 同时安装。 - 安装和多人验收步骤见
离线版安装与验收说明.md。
审计与构建
- 对比 Termux 官方源码 8629e632:改动仅 6 个 Java 文件与构建配置(首次启动校验并解压内置负载、启动本地服务器、会话复用),无联网、无多余权限、无可疑代码。
- 9 个运行软件包的 SHA-256 与 Termux 官方仓库当前索引一致;bootstrap 与 Termux 源码中写死的校验值一致。
- 在本服务器上重新编译、用本项目自己的密钥签名,内置网页更新到 b40965c:含旧浏览器兼容修复,以及安卓输入法下「第一次点发送没反应」的修复。
v3 更新:修复安卓输入法(如 Gboard)下点「发送」第一次没反应的问题;versionCode 119,可直接覆盖安装 v2。
已测试(Android 11 模拟器,ARM 转译):安装、首次启动解压 bootstrap 与内置负载;Node.js 24.18 在安卓上运行,聊天服务器启动;两个浏览器经该服务器进同一房间互发消息成功。
尚未在真机上验证:模拟器的 ARM 转译无法运行启动脚本里的子 shell,所以「打开 App 自动安装并启动」这一步、热点地址发现和锁屏后台行为,需要在真实 arm64 手机上确认。遇到问题请记下机型、安卓版本和报错。
APK 签名证书 SHA-256:612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2
文件校验值见 PrivateTalk-offline-SHA256SUMS.txt。源码(GPLv3):PrivateTalk-offline-source.zip。
🤖 Generated with Claude Code
安卓离线版 v2(已被 v3 取代)
⚠️ 已被 v3 取代:v2 在安卓输入法下第一次点「发送」可能没反应,请下载 v3(可直接覆盖安装)。
「隐匿对话」安卓离线版:一部手机当服务器,其他手机连它的热点或同一个 Wi-Fi,全程不需要互联网。
- 文件:
PrivateTalk-offline-arm64-v2.apk(约 58 MB),Android 7.0 及以上,仅 arm64 手机(近几年的手机基本都是)。 - 内置:Node.js 24 LTS 及依赖(官方 Termux 软件包,未修改)、聊天服务器和网页(隐匿对话 5afbe0a)。
- 基于 Termux 修改,包名
com.termux:不能和官方 Termux 同时安装。 - 安装和多人验收步骤见
离线版安装与验收说明.md。
审计与构建
- 对比 Termux 官方源码 8629e632:改动仅 6 个 Java 文件与构建配置(首次启动校验并解压内置负载、启动本地服务器、会话复用),无联网、无多余权限、无可疑代码。
- 9 个运行软件包的 SHA-256 与 Termux 官方仓库当前索引一致;bootstrap 与 Termux 源码中写死的校验值一致。
- 在本服务器上重新编译、用本项目自己的密钥签名,内置网页更新到含旧浏览器兼容修复的版本。
已测试(Android 11 模拟器,ARM 转译):安装、首次启动解压 bootstrap 与内置负载;Node.js 24.18 在安卓上运行,聊天服务器启动;两个浏览器经该服务器进同一房间互发消息成功。
尚未在真机上验证:模拟器的 ARM 转译无法运行启动脚本里的子 shell,所以「打开 App 自动安装并启动」这一步、热点地址发现和锁屏后台行为,需要在真实 arm64 手机上确认。遇到问题请记下机型、安卓版本和报错。
APK 签名证书 SHA-256:612c430d662182613ea7faaab7ed1e8ad7a06677bd632ca9b4a7443dcb104be2
文件校验值见 PrivateTalk-offline-SHA256SUMS.txt。源码(GPLv3):PrivateTalk-offline-source.zip。
🤖 Generated with Claude Code
v2.3.0 可升级、可回退、可诊断
隐匿对话 v2.3.0:可升级、可回退、可诊断
聊天协议和界面不变(与 2.x 兼容)。这一版把部署后的维护补齐。
离线局域网包:离线更新程序
- 每个离线包新增
update:把新安装包拖到update.cmd上(或./update.sh 新包),不需要联网。 - 先核对 Ed25519 签名(安装包旁放同名
.sig,被改动一个字节就拒绝),再在备用端口试运行新版本,正常才替换。 - 证书
lan-certs和设置config.env原样保留;上一个版本留在previous/,update --rollback一键回退。 - 从 2.2 及更早版本:解压新包后运行
update --import <旧文件夹>,自动搬证书和设置(只需一次)。 - 新增
status:版本、设置、证书剩余天数、是否在运行;不含密钥。 - 局域网证书运行中自动续期,不用重启。
Docker(VPS)
- 设置存进
.env,版本固定(程序、Caddy、cloudflared、Tailscale 都写死具体版本)。 ./pt setup / status / upgrade / rollback / logs;升级后自检不通过自动回到原版本。- 恢复必要日志(只有启动、证书、错误;不记录访客 IP、网址、房间、暗号),自动轮换。
- 新增
private-talk-compose.tar.gz:只含部署文件,不用克隆源码。
通用
config.env设置文件;所有设置启动时检查,写错直接报错退出,不再悄悄用默认值。/healthz健康检查;server/smoke.mjs聊天自检(两个测试客户端互发一条加密消息)。- 停止时先通知页面“服务器重启”并等待片刻;连接数满时单独提示“服务器连接数已满”。
- Cloudflare 一键部署的副本:GitHub → Actions → upgrade → Run workflow 即可升级 / 回退。
- 发布附件全部签名,附
RELEASE-MANIFEST.txt(版本、提交、镜像 digest、校验和);镜像带构建来源证明和 SBOM;已发布附件不再覆盖。 - CI 每次实测:三系统单元测试、Cloudflare 运行时聊天、Docker + Caddy 部署与自动回退、5 个平台离线包的更新与回退。
⚠ 升级或回退都会断开当时的聊天;房间和消息只在内存里,不会恢复。
🤖 Generated with Claude Code
v2.2.1 不审查
隐匿对话 v2.2.1
- 写明「不审查」原则:没有敏感词过滤、内容审核、举报、封号,也没有后门;服务器看不懂消息,不按内容做任何判断。见 README、隐私设计和页面「隐私说明」。
🤖 Generated with Claude Code