联网与安全
本页逐项说明 Campfire 的联网行为:连接的对象、发生的时机、传输的内容、能否关闭,以及每一项为何不会危及你的电脑与账号。文中的每一条陈述均可在源代码中核对,对应位置见自行核对。
设计原则
以下原则由代码保证,并作为长期不变的设计约束:
- 远程内容无法控制本机。 Campfire 自服务器接收的仅为文字、版本号与列表数据,例如公告、更新说明与联机大厅的房间列表。这些内容无法更改任何设置,无法执行命令,无法指定本机路径,亦无法启动任何程序。
- 仅有两类程序会被下载并运行,且均经校验。
- Campfire 自身的更新:须带有 Campfire 发布密钥的数字签名,且文件的实际版本须与声明一致,否则不予安装。
- 联机组件:每个文件的 SHA-256 均固定于程序之中,任何一个字节的差异都会导致其被丢弃。
- 无需管理员权限。 Campfire 以普通权限运行,不安装驱动,不创建虚拟网卡,不写入系统目录。
- 不触及账号。 Campfire 不读取、不保存、不上传任何登录凭据。
- 启动器修复完全离线。 修复仅在本机修改文件,不联网,也不为启动器添加任何联网行为。
- 源码构建不连接 Campfire 服务。 服务地址仅在正式版构建时写入。自行构建的版本不具备更新检查、公告、使用统计、联机大厅与在线地图,邀请码联机不受影响。
联网清单
| 功能 | 连接对象 | 时机 | 能否关闭 |
|---|---|---|---|
| 检查更新与公告 | Campfire 服务 | 启动时,此后每隔数小时 | 可在 设置 › 常规 中关闭 |
| 下载更新 | Campfire 服务提供的 HTTPS 地址 | 发现新版本时 | 随更新检查一并关闭 |
| 使用统计 | Campfire 服务 | 授权后每日至多一次 | 默认不发送,授权后亦可随时关闭 |
| 联机大厅 | Campfire 服务 | 浏览大厅或公开房间时 | 不使用即不连接 |
| 在线地图 | Campfire 服务、CurseForge 文件服务器 | 浏览地图或下载地图时 | 不使用即不连接 |
| 下载联机组件 | Gitee、GitHub 及两个 GitHub 下载加速服务 | 首次联机时 | 不使用多人联机即不下载 |
| 多人联机 | 联机节点与房间内的其他玩家 | 房间开启期间 | 节点、中转与隐藏 IP 均可配置 |
| 皮肤头像 | Mojang 官方服务 | 房间内有正版玩家时 | 可在 联机设置 › 隐私 中关闭 |
| 游戏内组件的名称映射表 | Mojang 官方服务及其国内镜像 | 房主运行需要映射表的游戏版本时 | 不使用多人联机即不下载 |
| 打开网页 | 系统浏览器 | 仅在点击链接或按钮时 | — |
除上表所列之外,Campfire 不存在其他联网行为。
Campfire 服务
正式版连接 https://api.mccampfire.top,该服务由 Cloudflare 提供服务与安全防护。所有请求均经 HTTPS 加密,并以 Campfire/版本号 作为客户端标识。
更新与公告
- 发送:不发送任何内容,也不携带任何设备标识,所有用户获得的内容完全相同。
- 接收:最新版本号、更新说明、下载地址与签名地址、公告文字,以及检查间隔。
- 约束:
- 公告仅能呈现文字。公告按钮只能打开
https://网页,且仅在用户点击时打开,不能启动程序。 - 检查间隔被限定在 1 小时至 7 天之间。
- 服务器无法借此更改任何设置。
- 公告仅能呈现文字。公告按钮只能打开
更新
- 下载新版本及其签名后,Campfire 以程序内置的公钥校验签名,并核对文件的实际版本号,以防旧版本被冒充为新版本。
- 校验通过后,Campfire 征得同意,再替换程序文件并重新启动。
- 未通过校验的文件将被直接丢弃。
因此,即便服务器或下载镜像为他人所控制,也无法令 Campfire 安装经过篡改的程序。
关于必须更新
当旧版本存在严重问题时,服务器可将新版本标记为必须更新。只有在签名正确的新版本确已下载并通过校验后,Campfire 才会要求更新后再继续使用。若下载或校验失败,Campfire 照常可用,任何服务器消息都无法阻止它启动。
使用统计
仅在授权后发送,每日至多一次,内容仅限:
- 随机生成的统计标识,与联机所用的设备标识无关,可随时重置;
- 软件版本、Windows 版本与系统位数、.NET Framework 版本及界面语言;
- 各项功能的使用次数,例如创建房间与加入房间。
统计不包含 IP 地址、游戏账号与 UUID、玩家名称、房间与邀请码、文件路径、硬件序列号及网卡地址。服务器依据网络来源推断大致的国家与省份,不保存 IP 地址。详见更新与隐私。
联机大厅
- 浏览:仅获取房间列表,不发送任何内容。
- 公开房间:发送房间名称、标签、房主名称、游戏版本、世界名称、人数、邀请码、可选的房间密码与图标,以及一个大厅专用的随机编号。该编号与设备标识、统计标识均无关联。房间开启期间每隔数分钟更新一次人数,房间关闭时随即撤下。
- 加入:向服务器领取该房间的邀请码;设有密码的房间会一并提交所输入的密码。
- 举报:仅发送房间编号与举报原因。
服务器仅保存房间密码的摘要,不保存原文;IP 地址仅以加盐摘要的形式保存,用于限制发布频率与处理违规。大致省份可选择不予显示。取消公开或关闭房间后,房间即刻自大厅移除,相关记录于一天内删除。
大厅中的房间由其他玩家公开。加入陌生玩家的房间,与加入任何陌生的 Minecraft 服务器无异。
在线地图
- 浏览与搜索时,Campfire 服务代为查询 CurseForge 的地图目录,仅传送搜索词与筛选条件。
- 地图文件与预览图仅从 CurseForge 的文件服务器
forgecdn.net下载,其余地址一概拒绝,下载完成后以 SHA-1 校验。 - 地图属于存档数据而非程序。导入时仅解压至所选的存档文件夹,任何试图写入该文件夹之外的文件都会被拒绝。
多人联机
联机组件
多人联机以开源网络组件 EasyTier 2.6.4 为基础。首次联机时,Campfire 依次探测以下地址,并选择最快者下载:
gitee.com、github.com:官方发布页;ghfast.top、gh-proxy.com:GitHub 下载加速服务。
三个文件的 SHA-256 均写定于 Campfire 的代码之中,与官方发布完全一致。无论来自哪一地址,内容不符的文件既不会被保存,也不会被运行。加速服务仅能获知你的 IP 地址以及你正在下载该组件。
联机组件以普通权限运行,不安装虚拟网卡,也不为其他网络转发流量。房主仅向房间开放游戏与房间服务所需的端口,加入者不开放任何端口,房间内的玩家无法借此访问你电脑上的其他服务。
节点与连接
- 联机节点用于帮助同一房间的玩家互相发现。内置公共节点为
public.easytier.top、public2.easytier.cn与etnode.zkitefly.eu.org,亦可仅使用自行填写的节点。 - Campfire 优先在玩家之间建立直连。为此,联机组件可能向公共 STUN 服务探测网络类型,并可能通过 UPnP 在路由器上建立临时的端口映射。
- 仅在允许中转且直连失败时,游戏数据才会经中转节点传输。
- 游戏数据在玩家之间加密传输,节点无法读取。节点运营方可获知你的 IP 地址与连接时间。
- 开启 隐藏我的 IP 地址 后,全部数据均经中转节点传输,其他玩家无从得知你的 IP 地址,但中转节点的运营方仍可获知。
相关选项见网络与隐私。
房间内共享的信息
房间内的其他玩家可以看到你的玩家名称、设备标识,以及你是否使用正版账号;在开启相应选项时,还可看到你的正版 UUID 与 Campfire 版本。设备标识为随机生成,可随时重置。
皮肤头像
开启 显示正版玩家的皮肤头像 后,Campfire 以玩家的 UUID 向 sessionserver.mojang.com 查询皮肤,并从 textures.minecraft.net 下载皮肤图片。关闭后不再查询。
游戏内组件
Campfire 会将一个小型 Java 组件附加到房主本机正在运行的游戏,用于自动对局域网开放、呈现欢迎消息与 Tab 信息。该组件不联网,不启动程序,也不加载任何外部代码。
1.14.4 至 1.21.11 的游戏需要 Mojang 官方的名称映射表。映射表自 piston-data.mojang.com 下载,无法连接时改由国内镜像 bmclapi2.bangbang93.com 提供,并以游戏自带版本文件中的 SHA-1 校验。映射表仅为名称对照文本,并非程序。
风险边界
即便某一方为他人所控制,其影响亦有明确的边界:
| 受控的一方 | 影响范围 | 无法做到 |
|---|---|---|
| Campfire 服务 | 显示不实的公告文字与网页链接;篡改大厅列表与地图目录;提示一个无法安装的“更新” | 安装或运行任何程序;更改你的设置;读取你的文件 |
| 下载镜像或加速服务 | 致使下载失败 | 替换更新或联机组件,签名与哈希校验会将其拒绝 |
| 联机节点或中转节点 | 获知你的 IP 地址与连接时间;致使连接失败 | 读取游戏数据;访问房主游戏以外的端口 |
| 房间内的其他玩家 | 与常规 Minecraft 联机相同的游戏内互动 | 访问你电脑上的其他服务与文件 |
隐私选项
- 仅使用启动器修复:修复功能本身不联网;亦可在 设置 › 常规 中关闭 启动时检查更新与公告。
- 不发送使用统计:在首次询问时拒绝,或在 设置 › 常规 中关闭 发送匿名使用统计。
- 联机时保护隐私:在联机设置中开启 隐藏我的 IP 地址,关闭 显示正版玩家的皮肤头像 与 向其他玩家显示软件版本,或仅使用自建节点。
- 完全不连接 Campfire 服务:从源代码构建。
自行核对
| 内容 | 源代码 |
|---|---|
| 服务地址仅在正式版构建时写入 | OnlineService.cs 中的 ReadServiceUrl |
| 服务器下发内容的全部字段 | OnlineService.cs 中的 Parse |
| 更新的签名与版本校验 | Updater.cs 中的 Verify |
| 必须更新仅在签名正确时生效 | OnlineFlow.cs 中的 OfferUpdateAsync |
| 使用统计的内容与授权检查 | Telemetry.cs |
| 联机组件的固定哈希与下载地址 | EasyTierPackage.cs |
| 联机组件的配置 | EasyTierConfig.cs |
| 内置公共节点 | LinkSettings.cs |
| 联机大厅发送的字段 | LobbyClient.cs |
| 地图下载地址限制与解压保护 | Worlds 中的 MapImages.cs、MapDownloader.cs、WorldImporter.cs |
| 游戏内 Java 组件 | java-agent |
如发现与本页不符的行为,或任何安全问题,请提交至 Issues。
