基本原则
Solo2在两个人之间创建一条私密隧道。直接连接。没有中间人。
我们的服务器只做一件事:介绍隧道的两端相互认识,让它们能找到彼此。为此它只需要最基本的东西——两个配对的标识符——它在RAM内存中只保留介绍过程的几毫秒。两台设备找到彼此的那一刻,这些数据就从内存中擦除了。永远不会、在任何时刻被写入磁盘。
一旦连接建立,服务器就消失了。它不参与对话。看不到对话内容。不存储对话。不知道对话持续多久、你们多常联系、或者聊了什么。
我们不要求你相信我们。我们请你自己验证:
测试1——服务器是多余的。
一旦直接隧道建立,我们的服务器就不再参与了。如果它在那一刻崩溃,你们的对话会毫无中断地继续。只要你们的设备开着并连接到互联网,隧道就是你们的。我们已经不在那里了。
测试2——发送10GB的文件。
不仅会很快——我们的服务器根本不在乎。试试连续24小时不间断发送10GB或更大的文件。我们的服务器甚至不会注意到,因为它没有参与。用任何其他即时通讯服务试试看。
测试3——聊聊望远镜。
花一个下午和某人聊望远镜、钓鱼竿,或者任何你从未在网上搜索过的东西。等几天。望远镜的广告不会出现在任何地方。你的话语从未离开过你的隧道。
你的数据,你的责任。
这是我们最大的优势,说实话,也是你最需要时间适应的地方。你的消息、文件和联系人保存在你设备内部的加密保险库中。任何服务器上都没有副本。它们由24个词保护——与Bitcoin相同的安全级别。但它们只在一个地方,除非你在第二台设备上安装Solo2——两个保险库会在同时连接时自动同步。你也可以导出加密备份——或者以标准格式导出可读副本,把你的数据带到任何你想要的地方。这里没有云端会在你丢失唯一设备时拯救你。你的数据是你的,包括所有后果。
详细说明
Solo2 的服务器是完全盲目的。 它不知道你在和谁说话、说了什么、也不知道你分享了什么文件。甚至建立设备间连接的技术信号也无法被服务器读取——它们以端到端加密的方式传输。
你的消息在设备之间直接传输,端到端加密。你的聊天记录加密存储在浏览器中,从不存储在我们的服务器上。
加密密钥随每条消息自动轮换。每条消息都用一个唯一的密钥加密,该密钥在使用后立即丢弃。这在技术上被称为 Double Ratchet,这意味着即使有人获得了一个密钥,也只能读取一条消息——而不是整个对话。此外,每轮通信后安全性会自动恢复:一个被泄露的密钥在下一条消息交换时就变得毫无用处。
当设备之间的直连不可能时(例如,由于网络限制),会使用镜像服务器(技术上称为 TURN):数据从一个设备反射到另一个设备,但镜子不知道它反射的是什么——所有数据都经过端到端加密,服务器无法读取。此外,所有数据包都被填充到统一大小,以防止观察者通过分析流量大小或频率来推断信息。
你始终可以在应用中看到你正在使用哪种连接类型——直接连接或通过镜像服务器——并据此采取行动。
你的主密钥使用 256 位真实熵随机生成——与比特币相同的安全级别。 创建账户时,Solo2 会生成一个以 24 个单词表示的唯一密钥。你的密码保护对服务的访问。你的 24 个单词是你数据的钥匙。它们是两把不同的钥匙,用于两扇不同的门。
即使我们的服务器消失,你的数据也会保留。用你的 24 个助记词,你可以在不连接服务器的情况下访问本地保险库。你的数据是你的——真正属于你。
1. 服务器上我们确实拥有的数据
1.1 你的用户账户
以下是你记录中存在的所有字段。没有其他字段。
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 用户名 | 用于登录 | 纯文本(设计上是公开的) | 直到你删除账户 |
| 密码 | 身份验证 | 使用 Argon2id 保护(OWASP 推荐,抵抗专用硬件攻击)。我们从不存储你的真实密码 | 直到你删除账户 |
| 包装后的主密钥 | 让你只需用密码登录即可打开你的保险库,而不必每次都输入 24 个助记词。如果你丢失了助记词,这层包装就是你的恢复手段 | 用从你密码派生的密钥加密的不透明数据块(80 字节)——服务器无法打开它 | 直到你删除账户 |
| 恢复指纹 | 用于在你恢复账户访问时验证你的 24 个助记词是否正确——而服务器永远看不到它们 | 不可逆指纹(SHA-256,64 个字符)。不透露你的助记词或密钥的任何信息 | 直到你删除账户 |
| 公开显示名 | 让你的联系人认出你 | 纯文本(由你选择) | 直到你更改或删除账户 |
| 关联码 | 你在 Solo2 内的地址——类似于电话号码。你将它分享给某人,对方就能找到你并发送连接请求 | 纯文本,唯一(约 10 个字符) | 直到你删除账户 |
| 经济余额 | 你充入账户的资金 | 数字(以分计) | 直到你删除账户 |
| 奖励余额 | 收到的奖励(促销)。在货币余额之前消耗 | 数字(以分计) | 直到你删除账户 |
| 账户类型 | 你的计划:普通、创始人或白金(管理员仅用于管理账户) | 1 字节(整数) | 直到变更或删除账户 |
| 账户状态 | 你账户的情况:活跃、试用期、由你暂停,或处于宽限期。如果你暂停账户,正是这个字段记住了它 | 1 字节(整数) | 直到变更或删除账户 |
| 服务中断标记 | 记录服务何时中断:由管理员在暂停账户时设置,或在你的余额降至零时由系统设置(这是宽限期的开始)。在正常账户中其值为 0 | 数字时间戳(0 = 未中断) | 直到账户重新激活——充值或解除——或被删除 |
| 注册日期和时间 | 你创建账户的时间 | 完整日期和时间(时间戳) | 永久 |
| 内部标识符 | 系统需要两个内部代码来引用您,而无需使用您的用户名。一个是您的主要ID,另一个是参考代码。两者都是不透明的——在系统外没有任何意义 | 两个各24个字符的随机代码(例如:u_7kX9mP2...)。不包含您的姓名、日期或任何个人数据——它们是纯随机的 | 直到你删除账户 |
| 安全版本 | 使用了哪个版本的密码保护算法 | 内部编号 | 直到你删除账户 |
| 状态标志 | 技术标志(你的余额是否变化、是否启用了最高安全模式) | 1 字节——相当于一个字母。不可能包含更多内容 | 直到你删除账户 |
数据量参考:你的完整记录约占 400 字节 — 比这段话还短。包括你的名字(可以是虚构的)、密码指纹(固定大小,128 个字符)、加密的主密钥(一个我们无法读取的 80 字节不透明数据块)、恢复指纹(64 个字符,不透露任何信息)、两个余额数字、一些日期和四个字节的配置。这就是你在我们服务器上存在的全部。
1.2 活跃会话
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 会话令牌哈希 | 保持你的登录状态 | 不可逆指纹(SHA-256)。原始令牌从不存储在服务器上 | 24小时 — 之后完全删除 |
| 创建日期 | 让系统知道何时创建——有助于自动清理 | 数字时间戳(unix秒) | 随会话一起删除 |
| 到期日期 | 会话在创建24小时后过期。不会因使用而续期——它有固定的到期日期 | 数字时间戳(创建 + 24小时) | 24小时 — 之后完全删除 |
注销或过期时,该行将从数据库中完全删除。不会留下会话存在过的任何痕迹。
1.3 关联请求
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 请求者 ID | 知道谁发送了请求 | 24个随机字符的内部代码 | 3天 — 之后自动删除 |
| 接收者 ID | 知道发给谁 | 24个随机字符的内部代码 | 3天 — 之后自动删除 |
| 状态 | 待处理 / 已接受 / 已拒绝 | 1字节(整数:0=待处理,1=已接受,2=已拒绝) | 解决时或过期时删除(3天) |
| 创建日期 | 知道请求何时创建,以便自动删除 | 数字时间戳(unix秒)— 4至8字节 | 3天 — 之后自动删除 |
重要说明: 在请求等待处理期间(最长 3 天),服务器确实知道用户 A 请求与用户 B 建立连接。3 天后,请求会自动删除。一旦连接被接受,服务器不会保存这层关系。你的联系人列表只存在于你的浏览器中,经过加密。
1.4 连接码
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 连接码(别名) | 短标识符,便于其他用户找到您并请求创建隧道 | 由您的内部ID派生的8个字符的随机代码 | 永久性(这是您的公开连接标识符) |
1.5 推送订阅(通知)
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 通知地址 | 向你的浏览器发送通知 | 浏览器提供商的 URL(Google、Mozilla 或 Apple) | 直到你关闭通知或删除账户 |
| 推送加密密钥 | 加密通知,使只有你的浏览器能读取 | Web Push 标准 | 与通知地址相同 |
1.6 反馈(支持)
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 你的消息 | 以便我们能帮助你 | 纯文本 | 直到我们处理它 |
| 你的用户 ID | 知道谁需要帮助 | 内部 ID | 与消息相同 |
1.7 连接信令(临时)
为了让两台设备能够直接连接,它们需要交换一些技术性的连接建立信号(WebRTC 协议)。服务器在内存中保留你的用户代码和对方用户代码的唯一时刻,是处理这个连接请求的毫秒瞬间。转瞬即逝,仅存于 RAM 中,从不写入磁盘。信号本身是端到端加密的
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 连接信号 | 建立设备之间的直接连接 | 使用接收者的公钥进行端到端加密。服务器无法读取或修改它们 | 60 秒 |
1.8 镜像服务器(TURN 中继)
如果直连不可能,则使用镜像服务器:数据通过它传递,就像光通过镜子一样——从一侧反射到另一侧,但镜子不知道它反射的是什么。所有数据包都被填充到统一大小,使观察者无法区分一条消息和一次简单的连接心跳。
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 访问凭证 | 在镜像服务器上验证你的身份 | 你的身份被转换为不可逆指纹——镜像服务器不知道你是谁 | 24 小时 |
1.9 已处理的付款
支付是匿名性唯一存在真正摩擦的地方。让我们坦诚地谈论这一点。
当你注册 Solo2 时,你选择一个用户名(可以是虚构的)、一个密码和一个公开显示名(也可以是虚构的)。没有任何数据将你与一个真实的人联系起来。但如果你用银行卡付款,你的金融机构确实知道你是谁。
我们从支付网关收到的仅仅是一个确认和一个金额。我们不接收也不存储持卡人姓名、卡号、身份证号或付款人的任何个人数据。这些是小额——在法律上等同于现金小票,就像在小卖部买棒棒糖一样:店主不会记录付款人的身份证。
此外,付款记录 故意取消了 与您的用户帐户的链接。我们的数据库中没有任何字段可以将托收单与特定帐户相匹配。
| 数据 | 原因 | 保护方式 | 保留时长 |
|---|---|---|---|
| 付款记录 | 会计和税务义务 | 确认 + 金额。无付款人个人数据。不与任何用户账户关联 | 永久(法律义务) |
关于最坏的可能情况: 即使有法院命令,跟踪链也将是:您的卡→您的银行→支付网关→我们的收款票。但我们的票证不包含任何用户标识符。这不是一个疏忽:这是一个设计决策。我们的数据库中没有将付款与帐户相关联的字段或索引。唯一的理论上的方法是时间相关性——如果你是给定时期内唯一的付款人——但即使在这种极端情况下,该帐户也不包含识别真实人物的信息:用户名和公共名称可以完全被发明。
我们所有的收入都是合法的,通过支付网关入账。我们缴纳相应的税款。但从我们这边来说,客户的匿名性是完全的。
2. 服务器上我们没有的数据
这就是我们的定义。 Solo2 服务器不存储或访问 :
- 您的消息 — 在设备之间直接传输,端到端加密。服务器永远不会看到它们。
- 您的文件 — 与消息相同:直接且加密。
- 您的联系人列表 — 仅存在于您的浏览器中,在 Bóveda 处加密。
- 您的聊天记录 — 仅在您的浏览器中,已加密。
- 您的位置 — GeoStamps 在您的设备上计算并直接发送给收件人。服务器从不处理它们。
- 使用分析 — Solo2 应用程序没有任何分析系统、跟踪 cookie 或第三方脚本。
- 设备数据 — 我们不会收集您设备的型号、分辨率、操作系统或任何特征。
- 通信元数据 — 我们不知道您与谁交谈、何时、多久一次或多久。
关于你的 IP 地址
你的 IP 地址不会存储在任何数据库中。在服务器的技术日志中,IP 地址会被转换为不可逆的哈希 — 可用于检测滥用模式,但无法还原为原始 IP。这些日志每 7 天自动删除。连接信号可能包含你的 IP,但它们经过端到端加密 — 服务器无法读取。
3. 你浏览器中的数据(保险库)
以下所有内容均仅存在于您的浏览器中,并使用 AES-256-GCM(政府和金融机构使用的军用级加密标准)进行加密。密钥是使用 Argon2id(针对专用硬件攻击的最强大算法)根据您的密码生成的,此过程完全在您的浏览器中进行。您的密码永远不会发送到服务器。
你的数据在静态时是加密的——即使有人访问了你浏览器的存储,没有你的密码,他们只会找到无法读取的加密数据块。
当你导出备份时,它使用相同的保护进行加密(Argon2id + AES-256-GCM)。只有知道你密码的人才能解密。唯一的例外是有意为之:可读副本——一个旨在让你无需应用即可读取数据的标准 ZIP——在创建时不加密;应用会就此提醒你,并在生成前要求你输入密码。
| 数据 | 加密 | 控制 |
|---|---|---|
| 消息 | AES-256-GCM | 你决定何时删除 |
| 文件 | AES-256-GCM | 你决定何时删除 |
| 联系人(配对) | AES-256-GCM | 你决定关联谁 |
| 验证状态 | AES-256-GCM | 你验证每个联系人的身份 |
| 搜索索引 | 使用不可逆令牌加密 (HMAC) | 从你的消息中重建 |
| 送达状态 | AES-256-GCM | 哪些消息已送达 |
| 待发消息 | AES-256-GCM | 离线时的发送队列 |
浏览器临时存储
| 数据 | 类型 | 保留时长 | 原因 |
|---|---|---|---|
| 用户会话 | 浏览器本地存储 (localStorage) | 直到你退出登录 | 保持你的登录状态 |
| 应用版本 | 浏览器本地存储 (localStorage) | 永久 | 检测更新 |
| 主题偏好 | 浏览器本地存储 (localStorage) | 永久 | 记住你的视觉主题 |
| 语言偏好 | 浏览器本地存储 (localStorage) | 永久 | 记住你的语言 |
| 密码(最高安全模式) | 标签页内存 (sessionStorage) | 关闭标签页时消失 | 重新加载页面时重新初始化加密 |
关于浏览器安全性的说明
Solo2 在你的网络浏览器中运行。你的加密数据在静态时受到保护,但当应用打开并在屏幕上显示解密后的消息时,安全性也取决于你的使用环境:
- 浏览器扩展: 理论上,能够访问您访问的页面的恶意扩展可以读取屏幕上显示的内容。我们建议尽可能少地使用扩展程序,并且仅使用来自可信来源的扩展程序。
- 干净的浏览器: 更新的浏览器没有不必要的扩展是您最好的盟友。
- 本机应用程序: 将来,我们将提供桌面应用程序(Windows、Mac、Linux),该应用程序将通过不依赖浏览器环境来提供额外的隔离级别。
4. 网络连接
Solo2 应用
| 域名 | 原因 | 发送的数据 |
|---|---|---|
| solo2.net | 应用 API | 身份验证、信令、在线状态 |
| pay.menzuri.com | 支付网关 | 仅在你进行付款时 |
没有其他域。 无外部脚本。没有跟踪 CDN。服务器的内容安全策略 (CSP) 从技术上强制执行此操作:任何从其他域加载资源的尝试都会被浏览器 阻止 。
即使是发现你设备的公共 IP 地址(建立用户之间直连所需),我们也使用自己的服务器(技术上称为 STUN)。我们不依赖外部服务。由我们自己管理。
展示页面
展示页面(solo2.net)——独立于应用——使用托管在我们德国自有服务器上的匿名测量系统:
| 域名 | 原因 | 发送的数据 |
|---|---|---|
| stats.menzuri.com | 匿名访问测量 | 访问的页面(无 Cookie,无 IP,无身份识别) |
该系统不安装 Cookie,不记录你的 IP 地址,不识别你的身份,不在访问之间追踪你,也不与第三方共享数据。Solo2 应用没有此系统,也没有任何其他类型的分析功能。
5. 删除你的数据
存在两种不同的操作,了解它们的区别很重要:
删除本地数据
在应用设置中,你有两个本地删除选项:
- 清除我的数据 — 仅删除您的数据(身份、保管库、会话),而不影响使用同一浏览器的其他用户。
- 紧急重置 — 彻底擦除所有内容:所有用户的数据、Service Worker、缓存和加密密钥。需要双重确认。
在这两种情况下,您在服务器上的帐户仍然存在。 您可以重新登录,但您的本地数据将不可逆转地丢失。这样做会创建一个全新的加密身份:无论谁拥有您以前的公钥,都无法再为您加密任何内容。如果以前的联系人想要重新连接,他们将不得不要求您再次链接,然后您决定是否接受。
设备间自动恢复
如果你在一台设备上丢失了数据而另一台设备仍然连接,Solo2 会检测到这种情况并自动提供恢复你的身份和保险库。恢复通过设备之间的直接连接加密传输(Argon2id)——不经过服务器。
从服务器删除你的账户
- 数据库中与您的 ID 关联的所有 行都将被删除:帐户、会话、请求、邀请、推送订阅、反馈。
- 删除是 原子 (全部或全无):要么全部删除,要么什么都不删除。
- 如果您删除您的账户,我们这边将无人能够访问您的旧消息,因为我们不保留任何副本。
- 服务器日志中的标识符是不可逆指纹:一旦删除账户,就无法将日志与你的账户关联。
- 浏览器中的保险库不会随此操作自动删除(我们无法访问你的浏览器)。要删除它,请先执行核销毁操作或在浏览器中清除站点数据。
5b. 你的主密钥和 24 个助记词
创建 Solo2 账户时,会生成一个具有 256 位真实熵的主密钥(与比特币使用的相同)。这个密钥表示为只有你知道的 24 个助记词。你的密码包装这个密钥,以加密形式存储在服务器上——服务器无法读取它。
这意味着你拥有两把独立的钥匙
精确算法(可验证)
生成:来自操作系统的 CSPRNG (crypto.getRandomValues,256 位)。主密钥加密: Argon2id (OWASP) 派生包装密钥 + AES-256-GCM (经过身份验证的加密)来保护它。身份: Ed25519 (签名)+ X25519 (交换)。消息: Double Ratchet 与 ChaCha20-Poly1305 。当您关闭浏览器选项卡时,所有敏感数据都会从内存中消失。
你的主密钥如何受到保护
| 层级 | 是什么 | 存储位置 |
|---|---|---|
| 密码 | 访问服务器。包装你的主密钥 | 在你的记忆中 + 哈希在服务器上 |
| 设备密钥 | 不可见的第二因素,安装时自动生成 | 在你的设备上(不可提取) |
| 主密钥(24 个助记词) | 256 位真实熵,随机生成。比特币级别 (BIP39) | 在你保存的纸上 + 包装后存储在服务器上 |
| 密钥轮换 | 每条消息使用一个用后即毁的唯一密钥 (Double Ratchet) | 自动、透明 |
如果你更改密码
更改密码是即时的。只需用新密码重新包装你的主密钥——你的身份不变,保险库不重新加密,联系人不受影响,你的 24 个助记词保持不变。这是毫秒级的操作。
恢复
如果你丢失了密码,可以用 24 个助记词访问你的保险库——无需服务器。如果你丢失了 24 个助记词,可以用密码登录,服务器会返回你的包装密钥。如果两者都丢失了,你的数据将不可恢复。与比特币一样,这是设计上的安全性。
6. 如果有人未经授权访问服务器会怎样
如果攻击者获得了 Solo2 服务器的完全访问权限,他们会获得:
- 用户名和公开显示名
- 关联码
- 公钥(没有私钥就无用,私钥在你的浏览器中)
- 密码指纹(由于 Argon2id,暴力破解成本极高,因此无用)
- 会话令牌指纹(没有原始令牌就无用)
- 待处理的关联请求(内部 ID,3 天过期)
- 账户类型、余额和注册日期
- 付款记录(无法将其关联到具体用户)
他们无法获得的:
- 没有任何消息(它们从未在服务器上)
- 没有任何文件(它们从未在服务器上)
- 没有任何联系人列表(它从未在服务器上)
- 没有任何聊天记录(它从未在服务器上)
- 没有任何加密私钥(它们在你的浏览器中)
- 没有任何 IP 地址(不记录)
7. 我们的承诺
每当数据管理发生相关变更时,本宣言将进行更新。如果我们在数据库中添加新字段,会显示在这里。如果我们删除了某些内容,也会显示。
当前生效的版本始终是本页面。