Tinfoil Chat (TFC) 是一个 FOSS+FHD 点对点 消息系统,它依赖高保障的硬件架构来保护用户免受 被动收集、 MITM 攻击 以及最重要的 远程密钥窃取的侵害。 TFC 专为拥有最复杂威胁模型的人群设计:有组织犯罪 团伙和民族国家黑客,他们通过入侵终端来绕过传统安全 消息应用的端到端加密。
/rr 命令。TFC 使用 XChaCha20-Poly1305 端到端加密 配合 可否认认证 来保护发送给个人接收者和群组的所有消息和文件。 对称密钥要么是 预共享的, 要么通过 X448 交换,其十进制 指纹 通过带外信道进行验证。TFC 通过基于 BLAKE2b 的 哈希棘轮 为每条消息提供 前向保密。 所有持久化用户数据均在本地使用 XChaCha20-Poly1305 加密,其密钥 通过 Argon2id 从密码和盐派生,其参数会根据最佳 实践自动调整。TFC 的密钥生成依赖于 Linux 内核的 getrandom(), 这是一个用于其基于 ChaCha20 的 CSPRNG 的系统调用。
TFC 的所有通信都仅通过 Tor 匿名网络进行路由。它使用(v3)Tor Onion Services 来实现从不离开 Tor 网络的 P2P 通信。这使得用户很难意外地使自己失去匿名性。这也意味着,与(去)中心化即时通讯工具不同,不存在能够访问用户元数据(例如谁在与谁交谈、何时交谈以及交谈量多少)的第三方服务器。这种网络架构意味着 TFC 仅在用户自己的设备上运行。没有广告或跟踪,并且它完全不收集任何关于用户的数据。所有数据始终使用用户控制的密钥进行加密,并且数据库永远不会离开用户的设备。
使用 Onion Services 还意味着无需注册账户。在首次启动时,TFC 会为用户生成一个随机的 TFC 账户(一个 Onion Service 地址),例如 4sci35xrhp2d45gbm3qpta7ogfedonuw2mucmc36jxemucd7fmgzj3ad。通过知道这个 TFC 账户,任何人都可以向用户发送联系人请求并与他们交谈,而永远无法得知其真实身份、IP 地址或地理位置。受保护的地理位置使物理攻击变得非常困难,因为攻击者不知道设备位于地球上的何处。同时,这也使通信具有抗审查性:要封锁 TFC,就必须在全国范围内彻底封锁 Tor。
TFC 还具有流量伪装模式,即使用户面向网络的设备被入侵,也能隐藏通信的类型、数量和计划。为了向黑客提供更进一步的元数据保护,TFC 面向互联网的部分可以运行在 Tails 上,这是一个专注于隐私和匿名的操作系统,不包含用户的任何个人文件(这使得很难推断该端点属于谁),并且它提供了额外的保护层以确保匿名性。
TFC 旨在用于提供强大端点安全的硬件配置中。该配置为每个端点使用三台计算机:加密和解密过程彼此分离到两台隔离的计算机上,即源计算机和目标计算机。这两台设备专用于 TFC。这个拆分后的 TCB 通过用户的日常计算机(称为联网计算机)与网络交互。
在 TFC 中,数据从源计算机单向移动到联网计算机,再从联网计算机单向移动到目标计算机。数据流的单向性是被强制执行的,因为数据仅通过一个免费硬件设计的数据二极管从一台设备传递到另一台设备,该数据二极管使用每台设备一根 USB 线缆连接到三台计算机。源计算机和目标计算机不连接到互联网,也不连接到除数据二极管以外的任何设备。
数据二极管中光耦内部的光学中继器以基本物理定律强制实施数据传输方向。这种保护如此强大,经过认证的数据二极管实现通常见于关键基础设施保护和政府网络中,这些网络中不同系统之间的数据密级各不相同。例如,数据二极管可能允许访问核电站安全系统的读数[1],同时防止攻击者利用这些关键系统。另一个用例是允许从安全性较低的系统导入数据到包含必须防止外泄的机密文档的系统[2]。
在 TFC 中,硬件数据二极管确保 TCB 的任何一半都无法被双向访问。由于这种保护依赖于硬件能力的物理限制,任何恶意软件,甚至零日漏洞利用都无法绕过数据二极管提供的安全性。
硬件就位后,用户只需在每台计算机上启动设备特定的 TFC 程序。
在上图中,Alice 向她源计算机上运行的发送器程序输入消息和命令。发送器程序对明文数据进行加密和签名,并通过数据二极管将密文从源计算机中继到她的联网计算机。
Alice 联网计算机上的中继程序通过数据二极管将命令和传出消息的副本中继到她的目标计算机。Alice 目标计算机上的接收器程序对接收到的消息/命令进行认证、解密和处理。
Alice 的中继程序通过 Tor Onion 服务与 Bob 共享消息和文件。Bob 中继程序的 Web 客户端从 Alice 的 Onion 服务获取密文,并通过他的数据二极管将其转发到他的目标计算机。随后 Bob 的接收器程序对接收到的消息/文件进行认证、解密和处理。
当 Bob 回复时,他会在自己的源计算机上向发送器程序输入消息,经过镜像流程后,Alice 在她的目标计算机上从接收器程序读取该消息。这一切都无缝且自动地发生。
上述架构同时利用经典数据二极管模型和替代数据二极管模型,实现两个用户之间的双向通信,同时提供硬件强制的端点安全:
目标计算机使用经典数据二极管模型。这意味着它可以从不受信任的联网计算机接收数据,但无法将数据发送回联网计算机。接收器程序设计为在这些约束下运行。尽管接收器程序会对所有传入数据进行认证和验证,但不能排除恶意软件仍可能渗透到目标计算机。一旦发生这种情况,恶意软件将无法将敏感密钥或明文外泄回联网计算机,因为数据二极管会阻止所有出站流量。
源计算机使用替代数据二极管模型。这意味着发送器程序可以将加密数据输出到不安全的联网计算机,而无需担心被攻破。数据二极管缺少允许向源计算机传输数据的硬件,这保护源计算机免受所有远程攻击。发送器程序也被设计为在数据二极管引入的数据流约束下工作;为允许密钥交换,短的椭圆曲线公钥由用户手动输入。
联网计算机在假定其可能被远程攻击者攻破的前提下运行:通过中继程序的所有敏感数据都受到认证加密保护,无一例外。由于攻击者无法从源计算机或目标计算机窃取解密密钥,从联网计算机获取的密文对攻击者毫无价值。
对某些用户而言,现代世界的 APT 并不在威胁模型之内;而对另一些用户来说,必须自行构建数据二极管这一要求则是无法接受的障碍。然而,对所有这些用户而言,将私钥存储在联网设备上仍然是一种安全风险。
为满足这些用户的需求,TFC 也可以在三个专用的 Qubes 虚拟机中运行。在 Qubes 配置下,隔离由 Xen 虚拟机监控程序提供, 而虚拟机之间数据流的单向性则由 Qubes 的 qrexec 框架强制执行。 这种中间隔离机制在单台计算机上运行,这意味着不需要硬件数据二极管。