全部文章

阅读约 8 分钟

CardanoWall Desktop:本地化的存在性证明「邮件客户端」

CardanoWall Desktop 是面向 Label 309 的开源跨平台客户端——本地身份、离线优先的记录镜像、封存收件箱、已发送记录追踪,以及由你自选的网关。下面讲讲它是怎么运作的。

CardanoWall Desktop 是 Label 309 的开源桌面客户端——它让你把存在性证明(Proof of Existence)记录、身份和封存收件箱放在自己的机器上,而不是浏览器标签页里。用起来很像一个邮件客户端:一个收纳寄给你的封存记录的「收件箱」、一个汇总你已发布内容的「已发送」视图、一套撰写新证明的发布流程、一个面向公开链上记录集的本地「Explorer」、用于管理接收地址的「联系人」,以及本地身份管理。

本文讲讲它的运作方式,方便你判断它是否契合你的工作方式。

重点不只是「一个桌面应用」,而是浏览器无法完全给到的三个特性:它是离线优先的,它是厂商中立的,而且它从设计上就保证你的私钥永远不离开设备。

桌面应用解决了什么问题?

Web 应用是最容易上手的起点。桌面应用则面向那些想要本地掌控的人。

浏览器很适合快速生成一份证明、发布一条记录,或者跑一套基于账户的工作流。但有些人和公司需要的不止于此:

  • 一个本地、加密的身份保险库
  • 对已同步记录的离线访问
  • 本地缓存的加密文件
  • 一个靠本地解密、而非服务端路由来发现的私密收件箱
  • 一份可搜索的公开记录集本地镜像
  • 以流式处理、而非把整个文件读入内存的大文件工作流
  • 指向自托管网关的能力
  • 更少绑定在某一家托管厂商身上的预设

CardanoWall Desktop 正是为这些人打造的。它把 Label 309 模型搬到你自己的机器上,并把「离线」当作一种正常状态,而非错误。

CardanoWall Desktop 是 Cardano 钱包吗?

不是。它不是钱包,而且从设计上就让你不会把两者混淆。

它不托管 ADA,不持有钱包恢复助记词,不构建也不提交 Cardano 交易,更不持有任何链上密钥或存储密钥。

发布仍然要经过 Label 309 网关,由网关掌握整条发布流水线:定价、上传、Cardano 交易的构建与提交、确认、链重组处理、索引,以及余额结算。桌面应用是一个客户端。它在本地持有你的 Label 309 身份、准备记录、在你选择签名时签名、加密封存载荷、解密收到的封存记录、验证证明,并与你配置的任意网关通信。如果你想在脚本或终端里获得同样的分工,那个开源的命令行工具能以无界面方式完成同样的工作。

桌面应用为什么开源?

因为处理身份、签名、加密文件和长期证明的软件,理应可供审视。

如果一个工具会接触你的密钥和你的证据,那么你应该能读懂它的运作方式,安全团队应该能对它做审计,开发者应该能在它之上构建,运维者也应该能把它指向自己的基础设施。证明格式是开放的,网关是开放的,桌面客户端同样开放——和 Label 309 其余代码一样采用 Apache-2.0 许可。一个标准的可用程度,取决于围绕它的工具,而这些工具不该把你变成被锁死的客户。

这里说的「离线优先」是什么意思?

离线优先,意味着网络不可用时本地应用依然好用,因为你看到的内容以一个本地数据库——而非网络——为准。

应用会保留本地状态:已同步的记录、收件箱匹配项、已发送记录、联系人、身份、缓存的密文,以及(仅在你主动选择时)缓存的已解密文件。在离线时,你仍然可以:

  • 浏览已同步的记录
  • 阅读你的收件箱
  • 解密已缓存的封存文件
  • 验证已缓存的记录
  • 搜索本地数据
  • 起草一份证明留待之后发布

离线并不意味着每个操作都能完成。发布一份新证明依然需要网关和网络连接,获取一份从未缓存过的密文依然需要存储访问。但你已经同步的数据,不会因为 Wi-Fi 断开就凭空消失。(如果离线本身就是全部意义所在——也就是气隙环境下的哈希与签名——参见离线证明。)

桌面端的收件箱如何运作?

收件箱是你的各个身份能打开的封存记录的本地视图——而服务器永远不知道哪些记录是你的。

网关会对外提供一条包含每一条 Label 309 记录的公开数据流。桌面应用把这条数据流同步进一份本地镜像。对你的每一个身份,它都会在本地用该身份的接收密钥尝试打开封存的密钥槽。只要某个密钥槽能打开,对应记录就会出现在该身份的收件箱里。

这有意采用服务端邮箱的形式。网关的数据流不暴露接收方身份:它不携带任何按接收方区分的字段,因此无从得知一条封存记录是发给谁的。是你的客户端通过试解密自行发现了这一点。这正是本地客户端为何如此契合封存式存在性证明的原因——持有你身份密钥的那台机器,正是唯一能拼装出收件箱的地方。

「已发送」视图追踪什么?

「已发送」视图追踪你发布的记录,覆盖其整个生命周期——而且它会验证结果,而非盲目信任结果。

证明并不会在你点击提交的那一刻就完成。它会经历若干阶段:已起草、已报价、上传中、发布中、已提交、确认中、已确认——或者在发布无法完成时失败并自动退款。桌面应用让这整条生命周期在本地始终可见。它能展示用了哪个网关、由哪个身份对记录签名、记录是否经过封存、选择了哪些接收方、交易何时确认,以及本地验证器是否认同链上记录与应用所准备的内容一致。

最后这一点至关重要。「已确认」不应该等同于「网关说确认了」。交易由网关构建并提交,所以它不是可以凭信任接受的东西——一个有缺陷或心怀恶意的网关,可能上报另一笔交易,或谎报确认情况。因此一旦出现交易哈希,应用就会拉取链上记录,把它与发布前那条记录逐字节比对,确认无误后才标记为已确认。这就是把独立验证应用到了你自己的发件箱上。

桌面端如何存储身份?

每个身份都存放在一个本地、加密的保险库里,而那份秘密种子永远不离开应用核心处的 Rust 内核。

每一个 Label 309 身份都植根于一份 32 字节的身份种子。应用从这份种子派生出该身份的签名密钥和接收密钥。种子本身始终留在本地内核里:它绝不会被发送给负责绘制界面的 webview,也绝不会被发送给任何网关。界面看到的永远只是公开投影——标签、指纹、公钥、接收地址和状态。保险库处于解锁状态时,种子驻留在会自动清零的内存中,并在你锁定应用或它因闲置自动锁定时被擦除。

这种切分正是整个设计的核心:种子是可携带的备份,也是真正值得保护的东西,因此被当作镇库之宝来对待。如果你想了解为什么真正的身份是一份种子——而不是一个账户或一个密码——参见你的身份就是一份种子;至于把它留在设备上的原则,参见为什么密钥永不离开设备

有一点实话实说的局限:把秘密留在本地内核,可以抵御恶意或有缺陷的界面,也能抵御被盗、但已锁定的保险库文件,却无法对付一个被彻底攻陷的操作系统。应用处于解锁状态时,同一台机器上的恶意软件原则上能读取内存中的秘密——较短的解锁窗口、自动锁定和最小化依赖能降低这种暴露,却无法将其彻底消除——任何桌面钱包都存在同样的局限。

我可以使用自己的网关吗?

可以——而这正是桌面应用存在的主要理由之一。

它能与任何兼容的 Label 309 网关协作。为了省事可以把它指向官方的 CardanoWall 网关,也可以指向你公司运行的自托管网关,或是指向别家产品背后的网关。官方网关至多只是一个一键省事的入口,绝不是一个你未曾选择就被强加的默认项。你提供网关的基础 URL 和一个账户密钥,应用会先探测该端点,在你依赖它之前确认它确实符合这套标准。

分工很清晰:网关掌握发布流水线,桌面应用掌握本地客户端体验。正是这种分离杜绝了锁定。你的本地应用、你的本地身份、你的本地缓存和你的标准记录,都不该依赖于某一个托管界面。

网关能看到什么,又永远看不到什么?

网关能看到的,是它发布内容和运行服务所需的东西——但看不到任何能让它读取你的封存文件或冒充你的东西。

它可能看到你的账户凭据、价格报价、上传内容、密文、你的余额、交易状态、公开的记录字节,以及运营元数据。它看不到你的身份种子,看不到你的接收方私钥,也无法解密你的封存文件。桌面应用在本地准备并使用每一份秘密;网关只负责发布标准记录、提供公开数据流。

这并不意味着网关绝不会出问题。它可能拖延、失败、扣留某条记录,或者误报状态。这恰恰是验证为何重要的原因:一份有效的证明,凭公开的链上记录和一个公开的 Cardano 浏览器即可核验,而不是因为某个网关的界面这么说就值得信任。

离线时我能对文件做些什么?

这取决于你同步和缓存了哪些内容——而且应用会如实说明哪些文件适合留存。

密文可以放心缓存,因为它本就已经加密;这样一来,重新打开一份收到的文件就是即时的,离线也能用。已解密的文件更敏感,因此任何已解密文件的缓存都是需主动开启、默认关闭、且自身经过加密的。默认行为是保留密文、按需在内存中解密。

一个有用的心智模型:

  • 公开的记录元数据可以在本地镜像
  • 密文可以缓存以供离线访问
  • 已解密的文件会被谨慎处理,只有在你明确保存时才写入磁盘
  • 身份种子始终在保险库里受到保护
  • 验证会针对已缓存的记录和文件在本地运行

这让你既能拿到离线工作的实际好处,又不必假装已解密文件毫无风险。况且一份已解密的文件终究只是一个文件:一旦你保存了它,任何你交付的对象都能读取它。封存证明只对持密钥者保密内容,并不能让某个接收方变得值得信任。

桌面应用适合谁?

它适合那些经常和证明打交道、以至于浏览器标签页不再是趁手工具的人和组织。

合适的场景包括:

  • 接收封存证据的法律与合规团队
  • 处理机密记录的记者及其消息来源
  • 持续发布合规证明的公司
  • 在自动化中使用 Label 309 的开发者和平台团队
  • 留存数据集与输出承诺的 AI 团队
  • 为原创作品保留已签名证明的创作者
  • 需要本地访问证据材料包的审计人员
  • 任何偏好自托管或厂商中立基础设施的人

如果你只是偶尔发布一份证明,那么 Web 应用依旧是最简单的路径,而那个开源的命令行工具如今也已经让你无需网站即可工作。桌面应用面向的是持续性的工作。

你能得到什么

它是一款以本地为先的产品,其表现更像一套严肃的证据软件,而非轻量玩具。它给你:

  • 清晰的身份备份提示,让你绝不会因疏忽丢失一个身份
  • 不会与钱包助记词混淆
  • 透明的验证状态
  • 易读的确认状态
  • 谨慎、带外的接收地址处理
  • 跨你的记录与已打开文件的本地搜索
  • 安全的内联文件预览
  • 在同一处管理多个身份
  • 指纹可核验的联系人
  • 自由选择网关
  • 如实呈现错误状态,而不是悄无声息地失败

标准给你证明模型,桌面应用给你围绕它的工作环境。你可以从开源代码处下载它。

一句话版本

CardanoWall Desktop 是 Label 309 的本地客户端。它同步公开记录集、在本地持有你的身份、通过本地试解密发现封存的收件箱条目、追踪你发出的证明(并在链上验证它们)、用你已同步的数据离线工作,并连接到任意兼容的网关。

Web 应用给你便利,桌面应用给你本地掌控。

延伸阅读

cardanowalldesktoplabel-309