全部文章

阅读约 7 分钟

你的身份就是一颗种子

一个 CardanoWall 身份就是一颗 32 字节的身份种子。保存好这颗种子,你就能在任意 Label 309 工具中恢复你的签名密钥和接收密钥;丢失它,就会失去该身份未来的使用能力。

一个 CardanoWall 身份就是一份秘密:一颗 32 字节的身份种子。保存好它,你就能在任何地方重建整个身份;丢失它,你就会失去未来以该身份行事的能力。

兼容的软件会从这 32 字节派生出你用来签名记录、接收封存文件的密钥。只要你备份了这颗种子,就能在 CardanoWall、在 cardanowall 命令行工具、在 CardanoWall 桌面应用,或任何遵循 Label 309 密钥模型的其他软件中,恢复同一个身份。

它不是 Cardano 钱包助记词。它不持有 ADA,也不支付交易费用。它只是你存在性证明(Proof of Existence)身份的那个可携带之根,仅此而已。

什么是身份种子?

身份种子是一个 Label 309 身份的秘密根。它是单一的 32 字节值。

可以把它理解为:你日后要恢复该身份,唯一必须留住的东西。标准用来描述你的每一项公钥事实——为某条记录背书的密钥、接收封存文件的密钥——都是这 32 字节的确定性函数。

从种子出发,符合标准的软件可以重新生成:

  • 用于签名记录的签名密钥;
  • 用于接收封存记录的经典接收密钥;
  • 可选的、用于接收封存记录的后量子接收密钥。

派生过程是确定性的:同一颗种子,在每一个遵循标准的实现中,每次都生成相同的密钥。这正是备份得以保持简单的原因。你不必保存三把私钥,你只需保存一颗种子。

为什么它不是钱包助记词?

因为一个 CardanoWall 身份并不是一个 Cardano 钱包。

钱包助记词控制的是资金。身份种子控制的是一个证明身份。它让你能签名 Label 309 记录,并解密寄给该身份的封存记录。它不托管 ADA,不支付 Cardano 交易费用,也不替代你的钱包。

这种分离是有意为之的。一个证明工具绝不应该训练人们把钱包助记词粘贴到不该粘贴的地方。身份种子有自己的格式和自己的用途,并且在设计上就让它看起来明显不同于钱包助记词,也不同于公开的接收地址。

所以反过来的情形同样是一个警示信号:如果某个工具要求你提供钱包助记词来创建一个 Label 309 身份,请立刻停下来。

种子长什么样?

默认的备份形态是一个带校验和的字符串,开头是这样的:

L309-SEED-1...

大写样式是刻意的。秘密就该显得醒目、与公开地址截然不同——正如私钥用大写书写,而接收地址保持小写。

工具也接受以十六进制表示的原始 32 字节值,但供人识别和安全复制的,是这份人类可读的备份格式。它的校验和能在打错字、被截断或意外损坏酿成一份失效备份之前就发现问题。不过,视觉形态并不是重点——真正重要的是这个字符串所代表的东西:那能重建身份的 32 字节。

种子会派生出哪些密钥?

从种子派生出三把密钥,各司其职。标准会把种子独立地扩展成每一把,因此任何单一算法的弱点都无法泄露其余密钥。

第一把是 Ed25519 签名密钥。它为 Label 309 记录签名。当验证方验证某个签名有效时,它便可以断定:这把密钥为该记录主体背书。签名始终是可选的——Label 309 与签发者无关,一条记录无论是否有人签名,都凭其内容哈希和链上时间戳完成验证。

第二把是 X25519 接收密钥。这是用于接收封存记录的经典加密密钥。

第三把是可选的混合后量子接收密钥,它把 X25519 与一种基于格的密钥封装机制结合在一起。它为封存载荷提供了一个更强的长期加密选项,同时仍维持同样的「一颗种子」备份。

你很少需要看到这些私钥中的任何一把。软件会在需要时派生它们;你手中握住的,是种子。

别人拿到我的种子能做什么?

任何持有你身份种子的人,都能以该身份行事。

他们能派生出你的签名密钥,冒充你签名记录;也能派生出你的接收密钥,解密寄给你的封存记录。这正是种子之所以敏感的全部缘由——它就是身份本身,而不是保护身份的一个密码。

所以请像对待高价值秘密那样对待它。不要把它粘贴进陌生的网站。不要通过聊天工具发送。不要把它留在共用电脑上的明文文件里。也不要把它和公开接收地址混为一谈——接收地址可以放心分享。接收地址是公开的,身份种子不是。

如果我丢了它会怎样?

如果你既丢了种子,又丢了解锁因子,你就会失去日后使用该身份的能力。你还能保留什么,取决于你手里还握着什么:

  • 你已经发布的证明会留在链上。它们的时间戳并不依赖于你。
  • 任何人仍然可以验证那些已有的记录,包括已签名的记录。
  • 但你或许无法再以该身份签名新的记录。
  • 你或许无法再解密已经寄给该身份的封存记录。
  • 你或许无法再解密日后寄给该身份的封存记录。

这是端到端加密诚实的代价。如果没有别人持有你的秘密,那么没有人——包括 CardanoWall——能替你恢复它。正是这一特性,让服务方无从读取你的封存文件;这也正是备份之所以重要的原因。(关于一个相关问题——为什么即便通行密钥让日常解锁变得轻松,这颗唯一的种子依然是核心——请参阅为什么身份种子依然重要。)

关于更糟的情形一句话:种子被窃取意味着身份被完全攻陷,而且没有重置可言。应对之法是创建一个新身份并停用旧的——而不是轮换一个密码。在你真正需要之前,值得先弄清楚活跃身份、已停用身份和已删除身份三者之间的区别。

我该如何备份它?

把它当作任何无法重新签发的秘密那样备份。

对大多数人来说,密码管理器是个合理的归宿。有些人会在安全的地方保留一份离线副本。机构可以把种子纳入其既有的密钥管理流程、访问控制和恢复策略之中。正确的做法会随记录的敏感程度而伸缩——但原则不变:种子才是那份可携带的产物,而备份就是这 32 字节的一份副本。

CardanoWall 自身的种种便利,是叠加在这一原则之上,而非取而代之。在 Web 端,你的账户可以把每个身份存放在一个只有你的通行密钥才能打开的加密保险库里,于是日常解锁只需轻点一下——参见 CardanoWall 如何存储你的身份。保险库提供的是便利与漫游,而非托管:服务方存储的是它无法解密的密文,种子始终是最终的备份。

我能在另一个应用里使用同一颗种子吗?

可以——只要那个应用遵循 Label 309 密钥模型。

这正是把种子标准化的全部意义所在。一个证明身份不该被困在某一个界面之内。同一颗种子,应当能在一个 Web 应用、命令行工具、桌面应用、某个 SDK 集成,或某个实现了相同派生规则的未来第三方产品中,恢复出同一个身份。

这就是供应商独立在实践中的含义。如果 CardanoWall 帮你创建了一份证明,那份证明在 CardanoWall 之外依然可验证——验证方只需要交易元数据、可选的文件字节,以及一个公开的 Cardano 浏览器。如果 CardanoWall 帮你创建了一个身份,那颗种子在任何兼容软件中都依然可用。标准、参考 SDK 和 CLI 全都在 github.com/cardanowall 上以开源形式发布。

我可以拥有不止一个身份吗?

可以,而且很多人都应该这么做。

你或许会为个人记录留一个身份,为工作留一个,为某个公司流程留一个,再为某个特定的高风险工作流留一个。每个身份都有自己独立的种子,而每颗种子都生成属于自己的签名密钥和接收密钥。把它们彼此分开,能让隐私、访问控制和运营都更容易梳理清楚。

举几个具体例子:

  • 一名记者也许不希望公众线报和编辑部内部记录共用同一个接收地址。
  • 一家公司也许不希望 CI/CD 发布证明和法律证据材料包共用同一把签名密钥。
  • 一名研究人员也许会把公开主张与私有数据集证明分开。

种子模型直接支持这一点。每个身份都独立存在,没有任何共享的根把它们串联起来。

这和接收地址有什么关系?

接收地址是别人用来向你寄送封存记录的公开字符串。它由你身份的接收密钥派生而来,可以放心分享,而且它既不能让任何人读你的消息,也不能让任何人冒充你签名。

它有两种形态。经典接收地址以 age1… 开头。可选的混合后量子接收地址以 age1pqc1… 开头。两者都是公开的。

所以无论在产品里还是在你自己的习惯中,要厘清的规则都很简单:接收地址是公开的,身份种子是私密的。二者绝不应被相互混淆。

这在桌面应用里是怎么运作的?

CardanoWall 桌面应用——一个构建在开源 Rust SDK 之上、跨平台的 Rust 与 Tauri 应用——在 github.com/cardanowall 上开源。它围绕「身份的本地拥有权」来构建,这套机制值得了解一下。

身份存放在你机器上的一个加密本地保险库里。Rust 核心负责解锁、签名、验证、对收到的封存记录进行试解密,以及封存记录的解密——全部在本地完成。私钥从不离开设备,也从不发送给网关。由于这个应用是离线优先的,你已经同步过的记录和已解密的文件,在没有网络连接时依然可用,而「离线」被当作一种正常状态来对待,而非一种错误。

不过,桌面应用终究只是众多客户端中的一个。你的身份在它们之间是可携带的——同一颗种子在这里恢复出的身份,与在别处恢复出的完全相同。

CardanoWall 实际上知道些什么?

作为一项托管服务,CardanoWall 能看到账户信息、计费状态、网关活动、公开记录数据,以及运营产品所需的各种元数据。而它在设计上不需要看到的东西,同样重要:

  • 发布一份证明,它不需要你的身份种子。
  • 投递封存记录,它不需要接收方的私钥。
  • 它无法解密你的封存文件。

当私钥留在你手中、验证又可以独立于服务运行时,证明模型最为稳固。这并不能抹去一切风险:一个恶意的浏览器扩展、一个钓鱼站点、一台被攻陷的设备,或者仅仅一个失误,都仍可能暴露秘密;而一段在已解锁会话中运行的脚本,也能读取内存中持有的密钥。正确的心智模型不是「什么都不会出错」,而是「协议并不要求 CardanoWall 持有那些解密你封存记录的密钥」。

一句话总结

你的身份种子是你 Label 309 身份的根。它是 32 字节,也是那份真正的备份。

保存它。保护它。不要把它和钱包助记词搞混,也不要像分享接收地址那样去分享它。

有了种子,兼容的软件就能恢复你的签名密钥和你的接收密钥。没有它,你已发布的证明仍能在链上得到验证——但你以该身份签名、或解密封存记录的能力,可能就此消失。CardanoWall 只是众多界面中的一个。身份就是种子。

延伸阅读

identitylabel-309security