通俗讲解

通俗讲解 · 第 5 部分,共 7 部分

谁能读到它,又有哪些始终保密

有时候,你并不想向全世界证明某件事,只想向少数几个人证明。比如一项你还没准备好对外宣布的发现,要先给几位合著者看;比如一份保密合同的各方当事人;比如一位你信任、想把秘密食谱托付给他的朋友。你仍然想要区块链给你的那个永久、防篡改的时间戳,只是不希望陌生人也跟着看。

Label 309 的密封证明解决了这个问题。你把内容锁起来,让只有你选定的人才能打开它,与此同时照样在公开账本上锚定一份带时间戳的记录。一个很自然的担心是:这毕竟是一本公开的账本,谁都能看。那他们究竟看得到什么呢?

坦白说,看得到的少得出乎意料。但也不是什么都看不到,而 Label 309 在这两者的界限上力求说得精确。

设想一排上锁的箱子

设想你把密封的消息放进一面人人都能从旁走过的保险柜墙里。墙上嵌着一排小小的、外观一模一样、上了锁的箱子,你要发给的每个人各对应一个。每只箱子里装着一把能打开同一条消息的钥匙,但每只箱子都只能由某个特定的人用私钥来打开。

一个路人能看见这面墙,能看见有一排箱子,甚至能数出有多少个。可他做不到的是:打开其中任何一只箱子,看出谁的钥匙配哪一只,或者读到里面哪怕一个字。

这几乎就是 Label 309 密封机制运作的方式。

一个陌生人能看到什么

  • 有样东西被密封了。 记录会公开标明它携带的是加锁的内容,而非明文。(旁观者甚至能看出你用的是普通加密还是后量子安全的加密,但也仅此而已。)
  • 时间戳,也就是网络认定这份记录存在的那一刻,精确到秒。这正是它的意义所在,本来就是要公开的。
  • 内容的指纹,和一份普通存在性证明用的是同一种单向编码。它不透露任何关于内容本身的信息,也无法被还原回内容。
  • 大致有多少位接收方,也就是上锁箱子的数量。这是唯一会泄露的信息,下文还会回到这一点。

哪些始终隐藏

  • 真正的内容。 它从不上账本,账本上只有它的指纹和那些上锁的箱子,打乱过的文件本身存在链下。没有配对的私钥,内容就只是一堆杂音。
  • 接收方是谁。 Label 309 在记录的任何地方都不写接收方的姓名或公钥,没有可供读取的「收件人」字段。接收方只能静静地用自己的密钥去逐一试开每只箱子,直到有一只打开,才发现这条消息是给自己的。(这里要老实补一句细则:如果一个旁观者手里已经握着他所怀疑的某个人那一模一样的公开地址,经典 X25519 锁依然不会替他确认这一点,但默认的后量子锁并不许下这条特定的承诺。详见下文的提醒。)
  • 是谁发的,前提是你选择不签名。在 Label 309 中,给作者身份签名向来是可选的。不签名,记录里就不会带有任何能追溯到你的东西:每只箱子里只装着全新的、一次性的密钥材料,谁都指不向。

另外还有两项更不易察觉的保护,同样要紧:

  • 接收方彼此看不见。 打开你自己的箱子,丝毫不会告诉你别人的任何信息。你无从得知还有谁被包含进来,他们也无从得知你。
  • 顺序被打乱了。 在发布之前,这些箱子会被随机打乱顺序。于是连一只箱子的位置(排在最前、还是排在最后)都不会透露谁是「主要」接收方,或这组人是怎么排列的。

唯一要坦白的一点

数量是看得见的。陌生人看不出你的接收方是谁,但能数出箱子的数量,从而知道有多少位。对大多数用途来说,这无伤大雅,比如三位合著者、合同的两方当事人。可万一连数量本身都很敏感,你也能把它冲淡:多塞几只箱子充作填充,或者把发送拆成几份独立的记录。Label 309 不会替你隐藏这个数量,所以一旦它要紧,这一步得你自己来走。

关于隐藏一只箱子发给谁,还有一点要老实说明。经典 X25519 锁是可证明「密钥私密」的:哪怕一个旁观者手里攥着一份疑似接收方的公开地址清单,也无法检验出哪只箱子(如果有的话)是发给其中某人的。默认的后量子锁(X-Wing)对一个普通陌生人隐藏的东西完全一样,但 Label 309 并不为它声称那条更强的保证:面对一个已经握有你疑似接收方那一模一样公钥的对手,只有经典锁才承诺能挫败这种检验。如果你面对的恰好是这种特定威胁,就为密封选用经典的 age1… 密钥;否则,后量子默认值才是正确的选择。

既然要把话说精确,还有两点小小的坦白。时间戳精确到秒,所以对那种单凭时机本身就很敏感的泄露场景,时间戳本身就是一处实实在在的暴露。另外,记录无法隐藏是哪个钱包付费完成了这笔 Cardano 交易,这条信息存在交易本身里,落在密封记录之外,因此谁要是需要把它藏起来,就得在钱包这一层自己处理。

还有一点值得记住:任何你确实给了密钥的人,只要存储的内容还在,就能一直读到这条消息。密封挡得住外面的世界,却挡不住你亲自选择去信任的那些人。

强隐私,一点小泄露,把话说明白

Label 309 的密封机制把内容、接收方是谁、乃至(如果你不签名)你自己都藏了起来。一个盯着链看的旁观者能稳稳获知的唯一一件事,就是你大致把它密封给了多少个人。唯一的细则是:面对一个手里已经握着某位疑似接收方那一模一样公钥的对手,那条最强的「连是不是他都无法确认」保证,只为经典 X25519 锁声称,后量子默认值并不具备。完整的论述,参见安全模型