Skip to content

Releases: Freecode100Year/private-talk

v2.4.0 前向保密,网页可核验

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:45

隐匿对话 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 或离线包(网页随安装包签名发布)。

安卓

测试

单元测试 57 项(三系统);浏览器端到端测试 101 项,加上 v3 专项测试(三人房间、离开换钥、模拟旧版客户端加入和离开),在本地、Cloudflare 运行时和线上都已通过;安卓 WebView 83 实测通过。

⚠ 自己部署的 Docker / 离线包升级后,旧版网页的标签页需要刷新才会用上 v3。升级会断开当时的聊天。

🤖 Generated with Claude Code

安卓客户端 2.3.0(联网版,前向保密)

Choose a tag to compare

安卓客户端 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 取代)

Choose a tag to compare

⚠ 已被 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(联网版,新增西班牙语)

Choose a tag to compare

⚠️ 已被 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 取代)

Choose a tag to compare

⚠️ 已被 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 取代)

Choose a tag to compare

⚠️ 已被 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,免互联网)

Choose a tag to compare

「隐匿对话」安卓离线版:一部手机当服务器,其他手机连它的热点或同一个 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 取代)

Choose a tag to compare

⚠️ 已被 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 可升级、可回退、可诊断

Choose a tag to compare

@github-actions github-actions released this 13 Oct 04:30

隐匿对话 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 不审查

Choose a tag to compare

@github-actions github-actions released this 12 Oct 22:28

隐匿对话 v2.2.1

  • 写明「不审查」原则:没有敏感词过滤、内容审核、举报、封号,也没有后门;服务器看不懂消息,不按内容做任何判断。见 README、隐私设计和页面「隐私说明」。

🤖 Generated with Claude Code