阅读约 5 分钟
在 CardanoWall 中移除一把通行密钥会发生什么?
移除通行密钥后,CardanoWall 会用你剩余的因子重新加密当前的身份保险库,并彻底删除旧密文——这是面向未来的真正吊销,但它无法撤回已经发生过的访问。

移除一把通行密钥后,CardanoWall 会用你仍然持有的因子重新加密当前的身份保险库,然后彻底删除旧密文。被移除的那把通行密钥再也无法打开此后存在的保险库。对未来的解锁而言,这是货真价实的吊销。
但它不是追溯性的。如果那把通行密钥在仍然有效时已经被用来打开过保险库,移除操作无法回溯过去、撤销那次访问。这种情况下,你要把这个身份当作已泄露处理,而不仅仅是「少了一个因子」。
本文会准确说明哪些东西变了、哪些保持不变,以及什么时候移除就够了、什么时候你需要换一个新身份。
通行密钥实际保护的是什么?
它保护的是对你托管身份保险库的访问权——不多,也不少。
保险库是一个加密的捆绑包,里面装着你账户拥有的身份种子,以及你给每个种子起的私有标签。你注册的每一把通行密钥,都是打开这个捆绑包的一个解锁因子。服务器只存放它读不懂的密文;唯一能打开它的只有你的通行密钥。(关于这个保险库是如何构建的完整说明,参见 CardanoWall 如何存储你的身份以及通行密钥如何保护你的身份保险库。)
这里关键的区别是:你的身份是种子,而不是通行密钥。 通行密钥只是打开种子加密副本的一种便捷方式。移除它改变的是谁能打开那份副本——而不是身份本身。
移除过程中发生了什么?
保险库会被重新加密给剩余的因子。步骤如下:
- 你用一个有效因子解锁保险库。
- CardanoWall 把选中的通行密钥从接收方集合中剔除。
- 你的浏览器为剩余的因子重新构建保险库密文。
- 当前的保险库行被替换为新密文,版本号随之提高。
- 旧密文被彻底删除。
- 被移除的凭据记录被删除。
这个顺序由服务器强制执行:仍出现在保险库接收方集合中的凭据,是无法被删除的。吊销必须是真实的——任何被移除的通行密钥还能打开的密文都不允许留存——绝不能只是做做样子。调用一旦返回,被移除的通行密钥就再也打不开任何仍然存在的东西。
为什么删除旧密文如此重要?
因为旧密文仍然可以被旧因子打开。
如果保险库的每一份历史副本都被永久保留,移除通行密钥就成了一场表演。被移除的因子仍然能解密某个较旧的保险库版本,而那个旧版本装着完全相同的种子。你「移除」了一把钥匙,可它对存储里近在眼前的一份副本依然管用。
这正是为什么托管保险库是一个会被替换的单一当前行,而不是只增不删的历史记录。彻底删除才让因子移除真正有了分量。真实的基础设施里可以存在常规的备份轮换窗口,但这个产品在设计上从不会把历史保险库密文当作一项功能来保留。
如果那是我最后一把通行密钥呢?
那么保险库本身会被删除。
如果一个因子都不剩,CardanoWall 不会保留任何已注册因子都打不开的密文。账户会回退到种子录入路径:你通过粘贴自己的身份种子重新取得访问权。
前提是你保存了种子,那就没问题。如果没保存,就很危险了。在没有保存种子的情况下移除最后一个因子,可能会把你锁在这个身份的未来用途之外——不是因为出了什么故障,而是因为你已经把所有回来的路都移除了。种子才是真正的备份;保险库只是叠在它之上的一层便利。(为什么身份种子依然重要对此有深入讲解。)
移除通行密钥会影响我已发布的证明吗?
不会。已发布的 Label 309 记录留在链上,并保持可验证。
一份证明是否有效,并不取决于你当前的通行密钥、当前的账户或当前的保险库状态。任何拿到交易引用的人,只用链上元数据、必要时加上内容字节,再配合一个公开的 Cardano 浏览器,就能完成验证——无需登录 CardanoWall。如果一份证明在你移除通行密钥之前能通过验证,那么之后它也以同样的方式通过验证。
移除通行密钥管的是对你身份保险库的未来访问。它不会改写链上已经存在的任何东西。
我刚刚丢了一把通行密钥,该怎么办?
尽快把它移除。
如果你丢了一部手机、一台笔记本电脑或一把硬件安全密钥,移除对应的通行密钥是正确的第一步。在保险库重新加密、不再包含那个因子之后,丢失的设备就再也打不开当前的保险库了。
如果你确信丢失的因子从未被别人用过——一把掉到桌子后面的密钥,一部转售前已被抹除的手机——那么仅仅移除它可能就够了,无需轮换身份。
如果你无法排除有人用过它的可能,请继续往下读。
如果通行密钥可能已被盗用呢?
认真对待风险,同时也要准确分辨:单凭一把被盗的通行密钥,能做什么、不能做什么。
单凭一把被盗的通行密钥,并不等同于一份被盗的种子。要打开你的保险库,攻击者还需要保险库密文(它只在已认证的会话内部传输),以及认证器所要求的用户验证——一项生物特征或设备 PIN。通行密钥本身握有的是一把钥匙,而不是它所解锁的密文。
但如果攻击者可能在你移除通行密钥之前就用过它——在一个被劫持的会话里,针对活跃的保险库——那么他们可能已经打开过保险库,读到了你的身份种子。一旦种子暴露,这个身份就完全泄露了:持有种子的人可以派生出每一把私钥,解密寻址到该身份的封存记录,并以该身份签署新记录。
在这种情形下,移除通行密钥还不够。吊销保护的是保险库的未来;它无法让一份已经流出的种子变回未暴露的状态。
在种子可能暴露之后,我该做什么?
迁移到一个新身份。应对泄露的方式是建立一个全新身份,而不是对旧身份做原地重置——因为种子和身份被永久绑定在一起,并不存在「更换种子」这样的操作。
如果你无法排除种子暴露:
- 创建一个全新身份,并保存它的新身份种子;
- 在它上面注册新的通行密钥因子;
- 在 CardanoWall 中停用已泄露的身份(这会阻止新的签名和发布,同时仍允许你解密任何封存给它的内容);
- 停止分享旧的接收地址;
- 在你过去发布过旧公钥的所有地方重新发布你的新公钥——公开个人资料、你自己的网站、DNS 记录、
.well-known,以及你的联系人; - 在对下游读者有帮助的地方,发布一条替代记录。
一个种子就是一个身份。(活跃、停用、删除逐一讲解每种生命周期状态。)请注意这个诚实的局限:任何已经封存给被泄露密钥的内容,对持有这些密钥的人来说仍然可解密——对已发布的内容,Cardano 和 Arweave 都不保留任何吊销原语。停用和一个替代指针,是给依赖方的信号,而不是对过往数据的召回。
什么是版本锁定,它为什么存在?
它是一道防线,用来抵御服务器重放陈旧的保险库。
保险库行带有一个只增不减的版本号。你的浏览器会记住它见过的最高版本。如果一个被入侵的服务器试图回传一份较旧的保险库密文——一份某把已被移除的通行密钥仍能打开的密文——客户端可以察觉返回的版本低于预期,并拒绝它。
这是纵深防御,而不是种子保管的替代品。它堵住了一个具体的缺口:针对已移除因子的陈旧保险库重放。如果你同时丢失了种子和每一个解锁因子,它对你毫无帮助。
简短版
移除一把通行密钥后,CardanoWall 会用剩余的因子重新加密你当前的身份保险库,并彻底删除旧密文。被移除的通行密钥再也无法打开移除后存在的保险库。
唯一需要注意的是:如果那个因子在有效期内可能已经被用过,就要假定种子可能已暴露,并迁移到一个新身份。吊销保护的是未来。它无法改变过去。
延伸阅读
- 你的身份就是一颗种子以及为什么身份种子依然重要——每一把通行密钥背后那个持久的产物。
- CardanoWall 如何存储你的身份以及通行密钥如何保护你的身份保险库——保险库构建的细节。
- 同步通行密钥与硬件密钥的对比——如何选择因子,以及理解它们各自的恢复模型。
- 活跃、停用、删除——你在应对泄露时会用到的身份生命周期。
- Label 309 标准及其开源实现位于 github.com/cardanowall;该标准已提交至 Cardano CIP 流程,正由 CIP 编辑审阅中。