亿聪哲史首页

<亿聪哲史 />

"Bitcoin is the signal. Everything else is noise."

Return to Block E28

E28·天生多签

曾汨: 听众朋友们大家好,欢迎收听《亿聪哲史》第二十八期,我是主播曾汨。

阿剑: 我是主播阿剑。

曾汨: 对于各位比特币持有者来说,如何安全地保管自己的比特币是一个永远绕不开的问题。不同的自我保管的方式以及它们背后的逻辑,也是我们这档播客一直以来非常关注的主题。今天这期节目我们想要聊的是一款很特别的比特币钱包 Frostsnap,它尝试采用一种不同于传统硬件钱包的技术路线,重新思考比特币的自我保管方式。那么它究竟特别在哪里呢?又希望解决哪些问题?这是我们今天想和大家一起来了解的。为此,我们请来了 Frostsnap 的工程师志宇,和我们一起聊聊这款产品。志宇其实是我们节目的老朋友了,他在我们的第五期节目当中曾经和大家介绍过 BDK。今天非常高兴能够再次请到志宇来和我们聊一聊他最近参与的新项目。嗨,志宇好久不见,先和大家打个招呼,重新介绍一下你自己吧。

Evan Lin: 大家好,我叫志宇,英文叫 Evan。我是比特币工程师,之前专注在 BDK,哦现在也是专注在 BDK。去年有机会跟,呃,Frostsnap 团队一起合作,当他们的工程师。

曾汨: 好的,欢迎志宇。那么首先对于第一次听说 Frostsnap 的观众,你能不能先用比较简单的方式向他们介绍一下 Frostsnap 到底是什么?

Evan Lin: 简单来说,Frostsnap 就是一个硬体钱包,它的特色是让使用者更容易建立地理上分散的多签钱包,这样子能够更保护使用者的比特币财产。

曾汨: 那它究竟是在目前主流的一些硬件钱包上增加了一点特性,还是说它跟现有的产品其实是一个完全不一样的新物种呢?

Evan Lin: 我觉得是完全不一样的新物种,因为很多 UX 跟安全上的设计我们是重新建立的。这是因为我们跟主流的硬体钱包的目标不同。主流硬体钱包它们专注在防骇客这个部分,所以它们硬体设备是安全的,重点是要把私钥存在一个安全的装置里,不让它透露出去,这样子就可以防骇客。但 Frostsnap 有另外一个目标,就是防实体的被抢跟被偷。在比特币社群常常有一个说法说要当自己的银行,但是很多人都会把银行放在家里,然后 Frostsnap 我们觉得这是不安全的行为。特别是最近,入室抢劫的媒体报导越来越多,这样子家人跟你都会有生命上的安全问题。Frostsnap 怎么解决这个问题呢?Frostsnap 它是一个多签钱包,然后重点是它是地理上分散性的多签钱包。假设你可以把一个 Frostsnap 放在家里,然后一个 Frostsnap 留给你的律师,一个 Frostsnap 放在银行的 safe 保管。也许你是用 threshold of two to three 才能签一个交易,这样子 - 如果有罪犯跑了你家时,如果他要动用你的钱,需要先跑去你律师的家,他可能不想继续进行下去,大概是这个概念。

阿剑: 那么 Frostsnap 它的设计初衷里面已经包含了它要作为多签名的装置之一来被使用,而不是我可以单独来用的签名器,是这个意思吗?

Evan Lin: 对,没错,因为普通钱包他们一开始设计就建立在要先当单一签字的钱包,然后多签的功能是加上去了,然后就导致其实如果你要用硬体钱包来建立多签钱包的话,会变成一个很复杂的过程。用其他硬体钱包建立多签钱包比较麻烦是因为有很多手动操作需要做,就是你要先在每一个钱包里建立私钥,然后输入到电脑里,然后这样子才会有一个你钱包的 descriptor。然后你有钱包的 descriptor 之后,要确认你钱包的 descriptor 是不是真的是正确的。然后备份的部分也是蛮困难的,因为其实有蛮多人就不小心丢了他们的 wallet descriptor,他们的钱就拿不回来了。如果是我来想,intuitively 我会觉得你一旦有私钥,你的钱就应该拿得回来。但是传统多签就不是这个状况,就有多了这些步骤。Frostsnap 可以解决这些,因为它让建立钱包的过程变得非常容易跟顺利。基本上使用 Frostsnap 你就可以把好几个 Frostsnap 连在一起,插进去你的手机,基本上你什么都不用做,然后你的钱包就已经建立好了,最后的步骤只是备份,然后备份只有那个 seed phrase,就每一个 Frostsnap 装置的 seed phrase 要记录下来,然后这样子就结束了。

阿剑: 我们跟听众朋友们再补充一下 Evan 刚刚描述的这个过程,那就是如果我们使用的是普通的签名器的话,那么很显然你需要先初始化你的签名器,然后让他传出一些数据到你的软件钱包,然后在软件钱包里面让他生成一个钱包,由此我们可以得到这个钱包的所谓的描述符 descriptor,然后以及它相应地从这个描述符推导出它的这个地址。在当前主流的实现上,基本上都会有一些额外的步骤来帮助用户,只要我的签名器都还在,或者说只要我的私钥都还在,那么即使我丢了这个 descriptor,我也极大概率基本上是只要你的这个 seed phrase 的数量不是太多的话,是可以找回来的。因为在软件钱包生成这个描述符的过程当中,已经对公钥做了一些排序,所以只要你的签名器都还是这些的话,那么你就能找回来。但是的的确确存在有一种情形,就是你的某一个种子词已经完完全全丢失了。在这种情况下,如果你同时又缺失了你的描述符的话,确确实实会存在这种弄丢钱的这个风险。所以 Evan,那关键就在于 Frostsnap 它本身它是签名器跟签名器之间本身能建立连接,是这样吗?

Evan Lin: 对,就可以连在一起。每一个签名器有一个 USB-C male 跟 USB-C female,就是你可以把好几个签名器连在一起,然后同时连到你的手机或电脑里,然后透过这个过程建立你的软体钱包。然后这里其实我们有做一些安全的设计,因为如果你用传统的硬体钱包的时候,可能你是从交易所把钱拿下来,然后交易所就是一个 trusted party,你是要信任它,然后其实你到你的硬体钱包,其实一部分它也是一个 trusted party,只是一个比较好的 trusted party,一部分是建立那个乱数的方式。有一些硬体钱包它建立乱数,就是用硬体钱包里的,the chip,也是用硬体钱包的软体在跑。但如果你外面观察这个过程,你无法验证这个乱数到底多乱,如果不够乱,你就会失去安全性。那 Frostsnap 是怎么解决这个问题呢?它每一个钱包都会 contribute randomness 给这个乱数,甚至你的 coordinator,coordinator 就是像你的手机或电脑,它也是会 contribute randomness。假设如果你有三个 Frostsnap 的装置,然后你有一个电脑,如果你拿到三个 Frostsnap,它三个 Frostsnap 里软体有问题,但是你电脑是好的,没有问题的话,你最后建立的钱包还是安全的。这是 Frostsnap 的安全性的特色。

曾汨: 就是它不用怕其中某一个设备被攻击了或者存在漏洞,只要其中某一个不存在漏洞,你就不会担心它的安全问题,是这样吗?然后其实你刚刚讲的就是 Frostsnap 它在随机数生成这一块,跟其他的所有钱包的不一样之处,因为其他钱包是靠钱包内部的一个程序或者某一个固件来生成这个随机数,但 Frostsnap 它的随机数生成是依靠多个硬件以及你手机或电脑里面的软件来共同作用来生成这个程序的,这样可以在很大程度上来降低这个随机数生成器它本身存在的问题,比如说它被攻击,或者它里面存在一些后门。

Evan Lin: 没错,就是这样子。当然其他钱包也是有它们自己的解决方案。像很多钱包就你可以自己 roll dice 甩骰子,但是这个就变得很复杂,然后你要甩很多次,万一那个使用者只甩了三四次,他的乱数也不会很安全。所以这也部分是 UX 的问题。就是 Frostsnap 是用最简单的 UX 达成最高的安全性。

曾汨: 那我先整理一下整个使用 Frostsnap 的一个过程。首先 Frostsnap 类似于一个 USB 的一个签名器,然后它有头有尾,有一个头可以插到比如说手机里面,另外一头它的尾部就是一个 USB-C 的接口,其他的 Frostsnap 可以接到这个 Frostsnap 上,然后它们可以连在一块,然后用户在初始化这个多签钱包的时候,把几个 Frostsnap 组合在一块,并插入到手机或电脑上,就可以共同几个硬件一起作用来创建这个钱包,包括在后面签名的时候也是一样。如果用户要签名某一笔交易,然后这个交易要求比如说是二杠三的多签,就需要两个签名器一起来参与的话,那用户就要任选两个签名器连接在一起,并连接到手机上,能完成这一笔交易。是这样的没错吧?

Evan Lin: 呃,可以这样子用,但是因为 Frostsnap 主要想解决的就是地理上分散,所以最好的用法是你不需要同时把多个 Frostsnap 连在手机里来签一个交易。最好的用处就是可能你先在家里用你家里的 Frostsnap 签一部分,然后可能再跑去你律师那里或者银行那里连接另外一个 Frost,然后在那里签第二个那个 signature share,然后这样子你的手机就可以把这两个连在一起,然后变成一个交易。

阿剑: Interesting。有意思,对吧?

曾汨: 对,其实这样更合理一点,因为它要解决的问题就是物理的分散。如果我在签名的时候要把几个签名器拿在一块的话,那这个时候我要是被攻击了的话,我不就钱就没了吗?

Evan Lin: 没错。

曾汨: 但当然同时它是可以首尾相连的,对吧?它是存在这种使用方式的。

Evan Lin: 是可以,但是不建议这样子做。

曾汨: 这里有另一个问题,因为你这个助记词或者说整个种子的生成,它是通过首尾相连在一起产生的,那么用户第一个问题是用户需要备份的是多个助记词还是一个助记词?第二是用户在恢复助记词的时候,他是具体怎么恢复?

Evan Lin: 呃,每一个 Frostsnap 装置有它自己的 seed phrase,然后每个 seed phrase 目前是二十五个字,然后 recovery 的部分也是可以一个一个跑。就假设你可能一个 Frostsnap 坏掉,但是你助记词在那,你可以买新的 Frostsnap,然后用你的手机 coordinate 把那个助记词输入回去,你的 Frostsnap recover。然后如果 Frostsnap 突然不见了,就我们公司消失,然后你所有的 Frostsnap 坏掉,其实也是可以把所有的助记词或者 threshold amount of 助记词输入到你的电脑里,用软体 recover 你的软体钱包。

阿剑: 我确认一下,所以你说如果我有某一个 Frostsnap,它本身,比如说它出故障了,那么我的复原的步骤实际上是我需要买一个新的 Frostsnap,然后让它连接我的手机,然后再把我的 seed phrase 重新输进去,是吗?

Evan Lin: 对,就这样,就这么简单。没错。

阿剑: OK,OK,然后其他事情就是由这个 Frostsnap 它本身会完成,比如说当它再次跟其他 Frostsnap 连接在一起的时候,保证还是能够为同一个钱包签名,对吧?

Evan Lin: 没错,这个过程都是非常自动。但假设如果你手机坏掉,这时候你唯一需要做的就是跑到你的不同的地区,然后 meet the threshold。假设你是软体钱包是二至三的规则,你就要跑到两个地方,然后一个一个地插进你的 Frostsnap,你的钱包就会恢复。

曾汨: 我确认一下,如果我的手机坏掉,就是我那个用于签名的这个主体坏掉的话,我只需要三个里面的两个连接在一起,就能够恢复我的整个钱包。

Evan Lin: 没错。

曾汨: OK,然后我在 Frostsnap 官网上看到一个介绍是,它可以任意替换掉其中一个 signer,一个签名者,然后不需要改动你面上所表现出来那个地址。这个很神奇,因为我们在使用多签钱包的时候,如果我要换一个多签的参与方的话,其实最常见的做法是把所有的资金转移到我新创建的一个多签钱包里面去。但是在 Frostsnap 这个设计里面的话,用户是不需要创建一个新的钱包的,而是可以直接把三个签名者里面的一个直接换成另一个。这个背后是怎么实现的呢?

Evan Lin: 我其实不确定 FROST 目前是不是有这个功能,它技术上就是 FROST。传统的多签方式就是透过 Bitcoin Script,你的比特币输出要用 Script 的方式来描述需要什么条件才能花掉这个输出,然后都写在链上。但用 FROST 签的交易在链上看起来像就是一个单签的 Taproot 交易。那后面它就是用那个 Schnorr 签名的一些数学上的特性,叫线性。简单来说,分开算或者先加总再算,结果是一模一样的。FROST threshold 它的概念是一个多项式,私钥基本上就是在这个多项式的其中一点,而那一点在 Y 坐标这边。所以换不同的点,其实也是可以是在同一条线上,就是你就可以达到同一个软体钱包。

曾汨: 最后总结一下,就是使用了 FROST 的这一项新技术,达到了这种效果。我其实觉得这种达到的效果很好啊,为什么现在其他家不用这种方式啊?

阿剑: 是是是,但是有一个很大的前提,就是你得改成用 scriptless script 啊,你得先改成用 Schnorr 签名嘛,就是你不能用原来的那个 P2WSH 这种,叫做基于 script 的多签,你得先改成这种没有脚本的这种多签,然后你才能用这种技术,不然是不太行。

Evan Lin: 对,我觉得另外,另外一个问题是因为跟传统多签的备份方式有一点差异,就是 incompatible。因为传统备份多签的方式是依靠 BIP39,然后其实 BIP39 它也不能弄那个 Shamir secret sharing,所以那个 Trezor 团队他们也建立他们的 SLIP,那 FROST 就更不能使用那个,因为 FROST 跟 Shamir secret sharing 也是有点差异,所以我们团队要建立我们自己的 standard,然后现在当然我没有写下来,但是是在代码里的一个标准这样。

曾汨: Frostsnap 其实在安全性设计上也跟主流的现在的一些硬件签名器不一样,比如说它没有 PIN 嘛,也没有安全芯片,然后它也完全不支持 Air-gapped,那其实这个背后的考量是什么样的呢?

Evan Lin: 我们可以一个一个讨论,呃,还是你们挑一个。

曾汨: 我们先一个一个来吧。比如说它没有 PIN 码,我没有见过其他没有 PIN 码的硬件签名器。

Evan Lin: 对,因为 Frostsnap 它喜欢把那个安全概念变得很简单,让用户者弄越简单越好。然后因为我们的 Frostsnap 重点就是地理上的分散,PIN 也没有用,如果你想增加你的安全性,就再加一个 Frostsnap 在上面,然后增加你的 threshold,这样子就增加你的安全性,就不需要依赖 PIN。然后另外一个比较搞笑的部分是,就是有一些传统钱包的用户者,他们会把助记词跟硬体钱包放在一起,然后硬体钱包上有一个 PIN,但这个就完全没有意义了,因为你一偷助记词,你就可以偷走所有的钱,就你不需要管那个硬体钱包了。所以对 Frostsnap 团队来说就是多一个概念了,有更好的方式来增加你的钱包的安全性。

曾汨: 我刚刚突然想通为什么不要 PIN 码了。因为 Frostsnap 是专为多签设计的,它不是一个钱包,就是你单独拿着它,它是没有办法把钱转出去的,你没有办法从里面导出信息的。跟正常我们拿到一个硬件钱包的话,如果我有 PIN 码,我是可以转走里面的钱不一样。如果任何一个人拿到一个单独的一个 Frostsnap,他做不了任何事情。所以 PIN 码对于 Frostsnap 来说不是必要的。

Evan Lin: 这是更好的解释方式。

阿剑: 添加一个背景信息哈,那曾老师刚刚说没有见过任何一个硬件签名器是没有 PIN 码的,这个描述是肯定是有瑕疵,为什么呢?因为我们都知道 SeedSigner 也是没有 PIN 码的。

曾汨: 是的是的是的。

阿剑: 至于你继续,我们下一个。

曾汨: 下一个,为什么 Frostsnap 没有安全芯片?

Evan Lin: 安全芯片的功能在大部分硬体钱包是保护你的 PIN 码的。pin 码就是可能限制你能多少次做一个功能。基本上你要有那个硬体钱包在你的手上,你才能进行这种攻击。然后 Frostsnap 怎么解决这个问题呢?就两个部分,第一个就是想就是强调 Frostsnap 是地理上分散性的钱包。然后第二个部分是因为每一个 Frostsnap 硬体钱包里,其实所有东西是被加密的,然后这个加密的私钥其实是存在你手机的 secure element 里面。电脑我就不太清楚是发生什么状况,但是如果是手机,那就是用手机的 secure element 来保管这个私钥,就是加密你硬体钱包的私钥。

曾汨: 那我换手机的话,我这个怎么迁移?

Evan Lin: 如果你拥有两个你的 Frostsnap,你可以拿回你的那个私钥。

阿剑: 这个跟最近为 descriptor 加密提出的一套新的标准有点相似,就是它也是相类似于基于已有的,就是说放在一个脚本当中的这个公钥,然后建立一个阈值的加密机制,然后来通过这个来给你的描述符做加密。那么理论上来说,只要你手上还有这些 seed phrase,那你是能够找回这个加密或者说解密的这个密钥的,然后可以把自己的描述符解密出来,呃,也是增加这个 descriptor 的这种保存和传输中的安全性,应该有类似的地方。对。

曾汨: OK,那其实前两个特性,无论是 PIN 码还是安全芯片,我可以把它的设计归因于,因为我们是分散来保管的,用户拿到其中任何一个是没办法动用我资金的。那最后一个 AirGap 其实是涉及到用户和硬件钱包交互的这个过程。然后我们通常中,我们理解为什么跟硬件钱包交互需要用到 AirGap,是因为它可以让我们验证手机或电脑跟钱包中间在传递的这个信息是什么。因为它是,你无论是用二维码还是用 SD 芯片,它中间传递的信息我们是可以通过第三方来验证的,而通过 USB 我们是没有办法验证的。那然而我看 Frostsnap 相关的文档,它是不认可背后的这个设计,那你们是怎么看待这个问题的?

Evan Lin: 其实不论你是用 QR code 或用相机来传达,或者你是用 SD 卡,先放到 SD 卡再传过去,或者你是直接用 USB 的方式来连起来,这全部都是 transport。然后其实很多相,相机的 driver、firmware,它不是开源的,然后它也自己也是有它自己的复杂性之类的。所以我的了解,我可能不能为团队讲话,但我的了解是,其实改变你的 transport 没有特别增加你的安全性,更重要的部分是你可以在硬体钱包上验证你到底在签什么东西,这个部分其实是最重要的。然后另外一点就是,因为 Frostsnap 团队里面 Nick Farrow 跟 Lloyd Fournier,他们其实有找到一个 vulnerability 叫 Dark Skippy,然后你换成 QR code scan 也根本也不能保护这个部分。因为如果你有 supply chain 的问题,然后你的硬件钱包的里面的软体有问题,他们可以用 Dark Skippy 的方式来透露你的私钥,建立出一个正确的交易里里面签名的 nonce 这个部分来慢慢地透露你的私钥。这个是更大的问题。所以 USB connection 根本不是最大的问题。

阿剑: 刚刚 Evan 讲到的这个 Dark Skippy,如果没有一些背景知识的话,很难想象这种攻击。它的大概的意思就是说改变了你的签名器的固件的这个部分,使得它在生成 nonce 的时候,或者说生成签名的时候,总是会在签名当中释放一些关于你的种子词的信息,从而当有个第三方观察者观察到你的两三个签名之后,他就有极大的概率能够恢复出你这个签名器的种子词。这种攻击方式就它非常特殊,因为它从表面上是完全看不出来的。当然,这种攻击的这个前提是它要有能力能够篡改你的硬件签名器的这个固件。所以在现行的就是许多签名器,你可以说都有一些安全机制可以缓解这种攻击。当然也会有一些硬件签名器的厂商会针对这一点,就开发出更有针对性的这种对抗措施。比如说 Blockstream 的 Jade 签名器,它是有专门去做一些工作来去对抗这种攻击的。

曾汨: 那我们跳出技术来聊聊别的吧。我在一些资料里面看到说 Frostsnap 其实是诞生于一次黑客松,你能给我们讲一讲这里面的故事吗?因为我看那个报告里面,那篇报道里面其中的人物有你。

Evan Lin: 哦,我应该知道你在说哪个报告了,那是我们的好朋友 Dan Gould 帮忙写的,在那个 Bitcoin Magazine 上面的那篇。Frostsnap 一开始其实没有 Frostsnap 这个概念,一开始单纯就是 Lloyd Fournier 就对 FROST 非常有兴趣,因为 FROST 有几个特质嘛,它能保护你的隐私这一部分,在链上就看起来像一个单签的交易,然后它因为是这样子,它也是很有效率,或者是可以让你省交易费。然后还有其他他的,那个可能就是因为他的数学特性,我们刚刚讨论就是可以做一些蛮特殊的东西。所以那时候 Lloyd 就对 FROST 非常非常有兴趣。然后 Lloyd Fournier、Nick Farrow,然后另外一位叫 Jesse Posner,他是另外一位那个加密法的工程师,我其实没有非常认识他,但是他在整个比特币领域也是算蛮出名的一位。他们就可能每个礼拜就开个会,然后一起研读跟讨论 FROST 的论文来理解 FROST,然后慢慢地,就是他们这个团队就是给 Nick Farrow 一个任务,就是把这个 FROST 实现在代码里。然后在 2022 年的 8 月,他们在一个澳洲的一个比特币会议,呃,成功地宣布第一个用 FROST 签的交易。当然他们是这样子说的,但是我们完全没有办法验证到底是不是第一个,因为如果比他们早的,在链上根本看不出来。然后八月的时候,Lloyd 想解决一个问题,就是 Fedimint 这个项目,Fedimint 就是一个开放式的 eCash 的系统,因为是 eCash,你就需要 peg in 跟 peg out 你的比特币。

就是每一次 Fedimint 联邦要 peg in 或 peg out,然后因为他们又分散式,他们当然是用传统多签钱包的方式,然后交易费就是蛮贵的。如果你这个 Fedimint 联邦里面有很多用户者,他们一直透过你们的 Fedimint 做线上交易的话,就会加起来这个费用是蛮高的。所以在 2022 年底,Lloyd 就邀请 Nick Farrow、我,还有 Dan Gould 来马来西亚,然后我们就解决这个问题,如何把 FROST 整合在 Fedimint 里。然后我们结果就在一个 BitDevs,就马来西亚的 BitDevs present,然后在 BitDevs 里有遇到一位叫 Adam,他是马来西亚人,然后 Adam 那时候在给我们看他的一些硬体的作品。然后认识 Adam 之后,Nick 就突然有一个想法,就,是不是可以把 FROST 变成一个硬体钱包?所以就是从这个时候开始。

阿剑: 这样说下来,其实 Frostsnap 的开发,它似乎早于现在我们知道的 FROST BIP 的开发,然后也是早于最近一个关于分布式密钥生成的这个叫 ChillDKG 的 BIP 的这个撰写。那我想知道的是,这些 BIP 跟 Frostsnap 它的这个相互关系是什么样的?就是说它会需要你们去更新自己的软硬件吗?当这些 BIP 它们敲定之后,Frostsnap 的实现会不会变更?

Evan Lin: 其实 BIP 里面就是有 Frostsnap 的一些贡献,特别是 ChillDKG。因为可能当初 Frostsnap 做事的方式 was incompatible with ChillDKG,然后现在透过蛮多改变,现在是有机会 compatible 的。但之后 Frostsnap 可能软体方面可能要做一些改变来让这个真的实现。但是 theoretically 现在是有可能的。细节上的这些部分我可能没办法回答,因为我没有参与这些讨论。

曾汨: 但我确实还挺期待这个标准能够具体落地实施的,因为如果有不同的硬件厂商能够接入这个标准的话,那其实用户的选择也会多很多。最好的情况是像 SeedSigner 一样,我们买一个 ESP32 的硬件,然后自己刷一套系统进去,然后就能组合进来,这样整个系统的可玩性会高很多,然后它也能方便很多地方。比如说我如果买不到 Frostsnap,这些地区的人可以来使用这个新的标准来提升自己一些自助保管的安全性。

Evan Lin: 我也不需要依赖一个厂商的产品。

曾汨: 好的,那么今天关于 Frostsnap 的内容我们就先聊到这里,也再次感谢志宇的分享,让我们对这个钱包有了更加全面的认识和了解。在节目的最后,志宇为对 Frostsnap 感兴趣的听众准备了一个专属折扣码,ONESAT。大家可以在 Frostsnap 网站上输入这个折扣码,就可以享受九折的优惠。折扣码和具体的链接我们也会放在本期节目的简介当中。感谢你的收听,我们下期节目再见,拜拜。

Evan Lin: 拜拜。

Follow us:
RSS Feed:

Vires in Numeris
// 以数字铸就力量

Libertas in Cryptographia
// 以密码学捍卫自由