襄阳都市网
您的位置:襄阳都市网首页 > 资讯 > 正文

Bitcoin问世前的三十年里密码朋克都做了什么

    Bitcoin问世前的三十年里密码朋克都做了什么


程小永   清华大学互联网产业研究院研究员

沈寓实   国家千人计划评审专家&清华大学互联网产业研究院研究员

黄京磊   清华大学金融协会会长


站在十年后的角度评述比特币的诞生,我们称赞其为一次天才的绝妙尝试,堪称货币史上的里程碑。可惜当时的人们,并不都这么想。因为在比特币被人们广为接受之前,无数密码学天才已经在数字货币的构建上进行了尝试了三十余年,但是无一得到大规模应用。

1. 电子支付与盲签——E-cash

1983年,大卫·乔姆(David Chaum,密码学奠基人之一)首先提出了电子支付手段。从他的论文可以看到,他敏锐地察觉到诸如交通、住房、娱乐等数字化消费信息对个人隐私暗含的威胁。同时他对现有银行体系无力应对政治贿金、黑市交易等灰色现金交易提出了改进方法。在其中,他指出了自动支付系统应该具有的几大特征:

1)交易的收款人、支付时间和金额完全不受第三方控制;

2)特殊情况下,交易发起人应当有能力证明支付的发生与收款人的身份;

3)在支付媒介被盗的情况下,用户有能力阻止账户进行支付。

为此,乔姆提出了盲签技术。对盲签技术的解释常采用选民身份确认的例子。当选民填写完选票后,可以将其与一张复写纸共同封装在信封内,信封外事先打印好选民证书。当这份信封被邮寄给官员(签名者)时,官员在核实选民身份后可以直接在信封上签名,从而在官员不打开信封的情况下完成对选票的签署。签署后,信封会被退还给选民。选民可以将具有官员签名的选票另外转移到新的信封中。整个过程没有向第三方透露除身份外的任何信息,但获得了第三方的信用认证。利用这种思想可以设计出很多种盲签方案,如RSA盲签或ECDSA盲签。

RSA盲签是最简单的一种盲签方式。在RSA加密模式中,私钥和公钥分别对签名者和公众开放,分别用于信息的签名和身份验证。

假设公钥为e,签名者手中的私钥为d,公有模数为N,A需要B对信息m进行签名,同时保持信息不被B所知晓。A可以选择一个与N互素的随机数r(例如gcd (r,N) =1),利用取模运算得到盲因子k。


然后A将这个盲因子寄往B。由于r选取过程和结果的随机性,通过k反推m是不现实的。因此寄往B的盲因子k不会泄露任何有关于信息m的内容。B利用私钥完成签名后,将回传给A。A通过手中掌握的随机数r得到B对信息的真实签名。


这是因为有,所以:

s实际上仍然是对信息m的签名。

事实上,一种签名方案还需要满足对一条信息的盲签最多产生一条有效签名信息的性质。上述签名方法就并不满足此种性质。不仅原信息m与真实签名s是有效的,盲因子k与盲签名也是符合条件的,甚至会有聪明的攻击者构建出其他的组合。针对这种问题的一种解决办法就是对信息的密码散列(cryptographic hash)进行盲签,而非对信息本身。

除了创造性地使用盲签技术保证信息的安全,乔姆还在自己设计的电子支付系统中融入了审计的可能。任何交易付款方都会收到一张电子收据,注明交易的标的和日期,同时生成签名的副本。在特殊情况下,银行(签名者)可以与付款人一起验证收款方的账户真实性。通过查验签名款项的真实流向,可以判断交易中是否出现了欺诈行为。如果黑市上的交易者对交易不满,他可以公布签名的副本实现款项追踪。

在对钱款流出进行控制之外,乔姆还希望这种收据能对流入进行存档。对于税收支付者,支出和支付的收据可以用于税收审计。但是机构纳税者的支出存档可能会泄露顾客的信息,所以存档不必保留。相较于之前的支付系统,乔姆意在打造一个隐私性和安全性更高、可审计、货币供给确定的不可追查支付手段。

乔姆的设想是电子货币的雏形。他第一次给出了一整套实际解决方案以实现无信息泄露的认证过程。但是对于这种加密方法是否能被攻破、钱款的输入输出记录是否暴露用户身份等困扰当今数字货币世界的问题他没有再做深入的阐述。而且此种设想并没有排除第三方对交易的干涉,银行与清算中心仍扮演着重要的角色,乔姆只是把一个支付过程数字化了。不过这并不影响乔姆在密码学和数字货币史上的重要地位。利用加密技术设计数字货币的思路,激发了无数人的想象。

尽管乔姆的电子支付设想具有划时代的意义,他直到1990年才得以将想法付诸实践。乔姆于1990年创立了DigiCash公司,以“Ecash”为商标。然而,在美国,只有一家位于密苏里州圣路易斯的马克吐温银行引进了Ecash,将其作为微支付系统进行测试。可惜效果不佳,长达三年的试验期内只有约5000名用户。在马克吐温银行被一家大型信用卡发行商系统收购之后,该系统最终于1998年被解散。失败的原因按照乔姆的话来说,就是“随着网络的发展,用户的平均素养在降低。很难再向他们解释隐私的重要性。”实际上,失败的更重要原因在于这种支付手段仍高度依赖于一个中心化的中介机构。

2. 数字货币雏形——B-money

在比特币的创造历程中,B-money占有着重要地位。不只是B-money的创造者戴维(Wei Dai)是最早在2008年中本聪开发比特币时与其进行接触的人(如果戴维自己不是中本聪的话),B-money的论文还被比特币白皮书进行了引用,也就说明B-money与比特币之间存在着很强的联系,至少他们对于“无政府加密状态”的追求都是高度一致的。

戴维对B-money的设想十分简略。在1998年的论文中,戴维设计了两种协议。第一类协议针对个人,戴维自述为不切实际的,因为要用到大量同步性和不可调的匿名广播通道,但它会推动第二类更为实际的服务器协议出现。这两类协议都假定网络不可追踪,消息发送者和接受者都仅能识别到公钥这样的假身份。每条消息由发送者签署,并由接受者解密。这类假设基于的正是乔姆设想中盲签的可实现性。

第一类协议里,每个参与者都拥有基于自己假身份(如公钥)的独立数据库,而后所有的账户共同定义拥有者的货币量。第一类协议主要解决每个账户的更新问题,其重要意义在于他开创性地设计了很多想法,并成为了工作量证明机制的重要基础。

1)货币创造

任何人都可以通过广播一个之前未解决的计算问题来创造货币。这就是之后比特币基础共识——工作量证明机制的扼要阐述。判定解决计算问题所耗费的时间和验证需要足够容易。获得的数字货币应该等同于其消耗算力所花费的金额。比如解决一个问题所需要的最少算力约为100小时,竞争市场上购买100小时算力的价格约为3个现实货币单位。那么当有人在广播中公布了解决问题的方案时,所有人都应该在自己的账本上记下解决问题者多拥有了3个数字货币。

2)货币支付

当A广播声称自己将X单位的数字货币转移给B时,所有人都应当在自己的账本上减去A账户X单位的货币,增加B账户X单位的货币。但如果A账户的余额不足以进行支付,则自动忽略。这里已经出现了分布式账本的基本雏形。

3)数字合约

戴维在这里设计了一种数字化的合约。一个有效的合约应该包含合约各方违约的最大补偿金额以及合约仲裁方的抵押。当合约各方及仲裁方向网络公布合约和他们的签名时,所有人会在自己的账本内扣除各方的最大补偿金额和抵押,并将总金额转移至一个特殊账户。

当合约被顺利履行时,所有人从特殊账户返还合约各方最大补偿金额并记录合约执行结果。

当合约执行结果出现争议时,合约各方首先申请仲裁方的仲裁。如果仲裁后仍有异议,戴维给出的指导原则是:合约各方分别广播一个合理的赔偿方案和对自己有利的证据,由每名参与者决定赔偿的金额并更改相应的账户。

在第二类协议中,每个账户的金额交由参与者的集合们(以下称之为服务器)决定。每个服务器之间通过Usenet式广播通道连接。每个在通道中广播的交易信息格式与第一类协议相同,但每个交易关联方需要确认信息已经被随机选出的一部分服务器成功接收了。

为了服务器能保持诚实,戴维设计了额外的机制。每个服务器都要存储一定数额的货币,以用于潜在的罚款或奖励。此外,每个服务器必须定期公布创造的数字货币和货币所有权的数据库,经由每名货币持有者确认并确保货币总量没有超出创造出来的总货币量。这就避免了服务器之间,甚至全部服务器之间串通,导致无成本地永久增加货币总供给。新的服务器也可以利用公开的数据库及时与其他服务器保持同步。

通过以上两种协议,戴维成功地搭建起一个更具实际应用可能和效率的货币系统和合约执行方案。戴维希望B-money能为“无政府加密状态”的实现推波助澜。实际上,他确实做到了。

不光如此,高瞻远瞩的戴维还在论文的附录中附上了一种创造货币的新方法。

他认为受计算能力快速发展的影响,一些秘密的计算技术可能对B-money创造货币的公平性和合约的安全性产生威胁。所以戴维设计了一种B-money创造的替代方案。他把每次创造分为四个步骤:

(1)计划:货币持有者商讨下一时期货币供给是否增加和计算供给增加量的支持数据;

(2)竞标:希望创造B-money的人对自己希望创造的货币量和待解决计算问题进行广播;

(3)计算:在竞标完成后,竞标者即开始计算问题并广播答案;

(4)货币创造:所有人在广播了答案并投标最高的人的账户上增加对应货币量。

这种货币创造方式虽然繁琐,但是保证了货币供给量经过了充分商讨,而不会出现计算能力突飞猛进对B-money造成严重的通胀。

B-money的设计已经把去中心化账本的想法与加密计算结合起来,并考虑到了货币创造的公平性与利用B-money实现数字合约的可能。尽管B-money缺少对去中心化账本结构、服务器间通信、货币创造所需数学运算的复杂度等问题的具体方案,但可以说B-money已经基本具有了比特币的雏形。很多人怀疑戴维就是十年之后完成整座精美的数字货币体系搭建的设计师,但戴维自己否认了比特币与自己的想法一脉相承。他认为中本聪独立想到了这一点,而把功劳加在了自己身上。

著名密码学家尼克·萨博(Nick Szabo)曾述:

“我,戴维,哈尔·芬尼,是在中本聪出现之前仅有的真心喜欢并追逐这个想法的人。”

但谁知道戴维是不是就是中本聪本人呢?

3. 比特币架构的直接前身——Bit gold

正如尼克·萨博所自述的那样,除去中本聪,在数字货币的研究上最有激情和贡献的三个人就是他、戴维和芬尼了。在戴维发明B-money的同时,萨博创造出了Bit Gold,一种听名字就知道与比特币有千丝万缕关联的数字货币。

对20世纪恶性通货膨胀的深恶痛绝和对银行深深的不信任促使萨博萌生了创设类似于贵金属,具有强保值功能和不依赖于第三方发行的数字货币的思考。贵金属由于其开采的高成本产生了稀缺性。但验证贵金属成色过程的复杂性阻碍了其大规模应用于日常流通,因此往往需要第三方机构将贵金属制成标准的硬币。此外,贵金属的运输成本高,风险大。更为重要的是,贵金属无法数字化转换为网络支付手段。因此,萨博期待能构建一种创造不可伪造的,同时尽可能减少对第三方机构依赖的货币。这种货币可以只通过建立最小化的信任即可安全地存储、转移或验证。

萨博构想出的Bit gold基于“用户谜题机制”或“工作量证明机制”。假设现在已有一个公开的字节串,那么新增加字节的用户必须基于已有字节串,通过求解特定函数得到答案以证明自己的工作量。工作量证明利用时间戳进行安全性保障,新增加的字节和工作量证明的时间戳一起被分布式账本记录下来。此后下一个字节又要在新增加的字节后进行延伸。如果用户希望查验另一名账户的余额,他可以验证字节串中记录的工作量证明和时间戳。

萨博认为整套逻辑可以利用软件自动实现,问题的关键在于如何保证账本记录和修改时间戳的过程足够地去中心化。其实,萨博最开创性的贡献在于他把B-money中通过计算独立的数学问题证明工作量发展成通过计算与之前存储数据高度相关的数学问题证明算力的付出。再加之时间戳具有的不可逆向生成的特性,数据之间就产生了形成了矢量串,而不是孤立存在。这样的特点还有一个非常显著的好处,即绝大多数用户必须就已有数据达成一致,才能进一步完成数据串的延伸。这为之后比特币的分布式账本在全网达成一致提供了良好的借鉴。B-money中的账本是很可能相互之间记录出现偏差而需要较长时间才能发现问题的。

作为一位毕业于华盛顿大学的计算机专家,萨博是一位笃定的经济自由主义者。针对数字货币面临的“双重支付”问题,一般采用的解决方案都是引入一定程度的中心化监管,但对于萨博来说这是不可接受的。

“我试图尽可能地在网络空间中模仿黄金的安全性和信任特征,其中最重要的是它不依赖于值得信赖的中央权威。”

4. 摆脱“双重支付”——RPOW

哈尔·芬尼与萨博和戴维都是好友。受他们的启发,芬尼决定进一步采用无中心化机构认证的方式解决困扰数字货币的“双重支付”问题。他认为萨博的“Bit Gold”过于繁琐,但是思路是正确的:创造一种自带稀有属性的货币,保证这种货币的可传递性和可验证性。

芬尼设计了一套“可重复使用的工作量证明机制”(RPOW)。他将体系中的货币分为POW和RPOW两种,其中POW基于的是Adam Back在1997年发明的哈希现金(Hashcash)。

1)哈希现金

哈希现金实际上是一串固定格式的字符。它具有一个独特的特性:当经过SHA-1哈希运算后,在这种字符串的前20-30位都是0。基于SHA-1的特性,找到这种字符串的几率完全随机。完全不存在一个能提高效率的寻找方式,之前的答案对寻找下一个答案也毫无帮助,唯一的方法就是不断地去试。

芬尼在它的论文中举了一个例子:

1:28:040727:halmail1@finney.org::1c6a5020f5ef5c75:63cca52

这就是一个具有28字节价值的哈希现金。因为经过SHA-1哈希计算,它得到的结果是:

0000000a86d41df172f177f4e7ec3907d4634b58

它的开头有7个0,在十六进制的表示中就意味着有28个字节为0。

由于每一字节是0的几率都是1/2,所以发现一个前N位全都是0的哈希值意味着平均要计算次。对于一个20字节价值的哈希现金,这种计算平均需要100万次;对于一个30字节价值的哈希现金,这个数字已经涨到了10亿。一般来说,每增加一字节的要求,时间就会相应增加一倍。也就意味着多一个字节价值的哈希现金,哈希现金的稀有度也就增加一倍。一个30字节价值的哈希现金应当是一个20字节价值哈希现金的足足1024倍。

哈希现金存在两个显著的好处。其一是它的产生需要消耗大量算力,所以稀有性得到保障;其二是任何人只要将哈希现金代入SHA-1函数都可以很轻易地计算出哈希值,并通过对开头的0进行计数得到哈希现金的价值。这保证了哈希现金的可验证性。现在距离萨博理想中的数字货币只差一条可流通性,而在这一点上哈希现金做的并不好。

因为哈希现金并不能被良好地重复使用,否则将存在严重的“双重支付”问题。一名哈希现金的接收者会由于无法判断其收到的哈希现金是否已支付给别人而拒绝接受。为了避免“双重支付”,哈希现金植入了“资源字符串”,用以标注每个哈希现金的用处,让接收者可以辨识哈希现金是否是创作出来用于该笔交易用途的。例如对于邮件来说,“资源字符串”可以是接收者的邮箱。当接收者确认了邮件发送者支付的哈希现金确实用于寄给自己,他才选择接收邮件。同时,哈希现金的接受者还要保存有最近创造出的全部哈希现金记录,以判断一个哈希现金是否被用于“双重支付”。为避免记录的保存无限制增加,哈希现金还植入了创造的时间和日期,过于陈旧的哈希现金会被剔除出记录。

很明显,上述的手段过于繁琐,也并不能实质上封锁“双重支付”的所有漏洞,反而增加了接受者的验证成本。在萨博的“Bit gold”中,“双重支付”的避免依赖于时间戳和分布式账本。但对于一个存在异步性的网络,账本的统一需要时间,而且存在着核对的成本。有没有可能从货币本身入手,保证其不存在“双重支付”的可能呢?

2)RPOW代币

RPOW代币类似于可以重复使用的哈希现金。当哈希现金被利用POW机制创造出来后,它可以在RPOW服务器处兑换为等值的RPOW代币。RPOW代币又可以继续兑换成其他RPOW代币,也就是说一个POW机制产生的哈希现金将作为一连串RPOW代币的基础。这些代币与哈希现金一起都可以作为数字货币使用,不过一个代币或哈希现金只能使用一次。当一名用户像其他用户支付哈希现金后,这笔哈希现金将会失效,而获得它的人可以通过将其兑换为RPOW代币重新获得货币价值。这样不依赖于账本的记录,数字货币之间的流通既具有了可传递性,又防止了“双重支付”的可能。

为了防止包括RPOW服务器在内的所有人伪造RPOW代币,芬尼希望RPOW代币的创造也需要必要的成本。不过不同于POW机制的是,这种创造的成本较低,而且创造一个新的高价值RPOW代币与低价值RPOW代币运算难度没有区别。因为POW的价值依靠所耗算力作为支撑,而RPOW的价值依赖于其所转换的POW。这也被称作零通胀原则,即在RPOW代币的创造过程中不额外产生价值。

为保证一个哈希现金或RPOW代币只被使用一次,RPOW服务器会保留所有兑换过的POW与RPOW代币记录。当收到新的兑换请求后,它首先会与自己的数据库进行比对。只有未被兑换过的哈希现金或RPOW代币才会被RPOW服务器签名,之后数据库也会将这次兑换更新进去。

除了兼顾流通性与不可复制性,RPOW代币还具有合并与分割的功能。需要储存时,任意价值的代币可以组合成一个大面值的新RPOW代币;需要分发给多个人时,大面值的RPOW代币可以再分割成小RPOW代币。由于每相差一字节,哈希现金的价值相差一倍,所以代币的兑换遵循二进制。假设一个人希望创造36字节价值的巨额RPOW代币,他完全可以创造64()个30字节价值的哈希现金,然后将他们组合起来。这种方式相较于直接创造巨额哈希现金而言,产出更加稳定。

尽管整套RPOW货币体系理论上解决了萨博对于数字货币所提出的所有要求,对于RPOW代币兑换过程中采用的数据结构、签名方式乃至硬件设施,哈尔·芬尼也都做出了规定,但这个体系却也存在着致命的缺陷:对RPOW服务器的高度依赖。诚然,RPOW服务器可以尽可能的分散以保证去中心化,但他们彼此之间又产生了对维护统一的代币创造数据库的需求。归根结底,萨博的顾虑依然未能得到解决:货币的可流通性、潜在的双重支付与去中心化记录之间究竟怎样才能找到平衡呢?


来源:

推荐阅读:叶紫网