Nov 2, 2023
澳大利亚墨尔本大学

墨尔本大学(The Uni­ver­si­ty of Melbourne,UofMELB),简称墨大,始建于1853年,是澳大利亚历史第二悠久的大学(晚于悉尼大学三年),维多利亚州最古老的大学,也是澳大利亚六所砂岩学府之一。墨尔本大学坐落于澳大利亚墨尔本市,是整个亚太的学术重镇。墨尔本大学是澳大利亚唯一一个所有学科都在全球排名前30的大学,大量的澳洲私人捐款与联邦政府教育拨款更为墨大奠定了这一基础。

作为澳洲八大名校的核心盟校成员,墨尔本大学同时也是国际研究型大学联盟组织环太平洋大学联盟(APRU)的成员、亚太国际贸易教育暨研究联盟(PACIBER)的成员和Universitas 21的创始会员和秘书处所在地。建校已来,墨尔本大学已经培养出6名诺贝尔奖得主,其学术能力可见一斑。目前在校学生数为48719人,其中20%为国际学生,中国学生占国际生总数的7%。截止目前,墨尔本大学是澳洲唯一一所不承认来自中国高考成绩的八大名校。

墨尔本大学继承了欧洲学院制学府的传统,在校园内设置了十三所住宿学院(residential college,一种传统的大学住宿模式,学生在教学区上课但是生活在各自的学院区内,各学院拥有自己的院徽、传统以及社团活动)、奥蒙德学院〔Ormond College〕、圣三一学院〔Trinity College〕、大学学院〔University College〕、珍妮特·克拉克学院〔Janet Clarke Hall〕、女王学院(Queen’s College)等十余家附属学院。各院散落校园北部,多为维多利亚时期的新哥特建筑风格。

墨尔本大学是一所全球顶尖的综合型和研究型大学,拥有100多个世界高水准科研中心和研究机构,开设140个本科、超过400个硕士及博士专业,吸引着来自150多个国家和地区的学子们,远赴重洋求学深造!
墨尔本大学还是澳大利亚唯一一所全部在“THE、ARWU、U.S News、QS”排名世界前40位以内的高等学府。

1 QS World Uni­ver­si­ty Rank­ings 2024
2 US News Best Glob­al Uni­ver­si­ties 2023
3 Times High­er Edu­ca­tion World Uni­ver­si­ty Rank­ings 2023
4 Aca­d­e­m­ic Rank­ing of World Uni­ver­si­ties 2023

更多信息请参考墨大官网:https://www.unimelb.edu.au/

墨尔本大学地图信息请参考视频:https://d3c1xdykvg3r8z.cloudfront.net/

另外,有关墨大的住宿信息请参考墨大官微文章:《全面解锁 | 墨尔本大学住宿选择》。

“对话墨尔本大学招生官” 墨大中国办公室招生咨询平台持续开放预约

有用的链接

More Details
Nov 2, 2023
墨尔本大学预科留学TCFS

圣三一学院预科课程 Trin­i­ty Col­lege Foun­da­tion Studies(TCFS) 位于墨大学校园内,成立于1870年,是墨大唯一一个预科学院,旨在帮助国际学生建立良好的学习基础,学生达到既定成绩能保证进入墨大。

更多信息,请浏览圣三一学院网址:https://www.trinity.unimelb.edu.au/

中国普通高中录取要求:

标准课程综合/综合加强快捷课程
高三完成80%或高二完成85%高三完成75%高三完成90%
取任意最好的5门课,计算平均分。

所有预科课程的英语入学要求:

根据学生的原籍国,语言能力的证明可以来自于以下考试结果:

  • the Trin­i­ty Col­lege Eng­lish test
  • Inter­na­tion­al Eng­lish Lan­guage Test­ing Sys­tem (IELTS)
  • Test of Eng­lish as a For­eign Lan­guage (TOEFL)*
  • Pear­son 
测试 标准课程 / 综合课程综合加强课程快速课程
雅思6.0(单项不低于5.5)5.5(单项不低于5.0)6.0(单项不低于6.0)
托福网考*70(写作最低18分)59(写作最低14分)70(写作最低21分)
PTE50(写作最低42分)46(写作最低38分)50(写作最低50分)
*请注意:澳大利亚政府目前不接受托福考试成绩用于签证申请。

要了解更多关于入学要求的详细列表,请浏览

https://www.trinity.unimelb.edu.au/pathways-school/apply/entry-requirements

以下图片来源于在广州召开的遇见墨尔本大学·中国系列招生见面会(Meet Mel­bourne in Chi­na)。

More Details
Nov 2, 2023
探索澳大利亚墨尔本

墨尔本(英语:Melbourne,缩写作 MEL),简称墨城,华人名之曰新金山,位于澳洲东岸,是澳大利亚的最大城市,也是维多利亚州的首府。坐落于大分水岭余脉雅拉山脉西南、菲利普港湾东北两面的沿岸平原。墨尔本的城市座右铭是“随行聚力”。

墨尔本被公认为是澳洲文化的灵魂城市,市民以极高的文化涵养而著称于世。城市无论在建筑、多元文化、饮食、文学、体育、艺术及时尚方面都处于澳洲乃至世界的最前沿。此外多项闻名的文化及艺术活动亦会每年于墨尔本举行。

要了解更多相关信息,请浏览以下网址:

https://www.visitmelbourne.com/

https://liveinmelbourne.vic.gov.au/zh-cn

资料来源于:澳大利亚统计局,https://liveinmelbourne.vic.gov.au/zh-cn/discover/melbourne-and-victoria/about-melbourne

来墨尔本之前寻找工作

在墨尔本工作,您可以将您的职业生涯提升到一个新的水平。由于有如此多的多元化企业可供工作,许多移民在世界上最宜居的城市之一的工作和生活中蓬勃发展。

  • 网络:维多利亚州的许多工作岗位都不是通过广告发布的,而是通过个人和专业网络找到的。在离开祖国之前加入行业协会,并开始建立自己的人脉网络,以帮助您与这个隐藏的就业市场建立联系。研究您计划居住的地区可用的网络类型。这可以是志愿者团体、体育俱乐部、专业团体和社区团体。
  • 专业协会和团体:主要贸易和专业行业组织也许能够帮助您寻找工作。您还可以在维多利亚行业部分找到有关特定行业支持组织的更多信息。
  • 求职网站:使用澳大利亚求职网站在线研究机会并熟悉澳大利亚就业市场。这将帮助您了解根据您的技能、资格和经验可以期待的薪水和工作条件。
  • 招聘公司:列出维多利亚州专门从事您所在领域的招聘公司的名单并与他们联系。寻找招聘机构的最佳方法是在互联网上搜索。首先搜索澳大利亚求职网站,看看哪些招聘人员正在为您的工作领域发布职位广告。
  • 领英:领英是一个重要的在线社交工具,它不仅可以帮助您与相关行业社交团体建立联系,还可以将您的个人资料与该领域的相关工作相匹配。LinkedIn 被澳大利亚雇主广泛使用。
  • 其他:联系您所在国家/地区在澳大利亚设有办事处的公司和出口商。另一种选择是直接联系澳大利亚的相关公司和组织。

快速提示 – 抵达墨尔本之前要做的事情

1.整理重要文件

在您前往墨尔本之前,您应该准备好求职时可能需要的重要文件的副本。这些包括:

  • 学校记录、文凭或学位
  • 贸易或专业证书和执照(学校级别以上的任何证书)
  • 驾驶执照,包括国际驾驶许可证
  • 与前雇主相关的所有文件,包括推荐、书面推荐、工作记录等。

2. 整理你的工作经历

准备好你之前工作的工作描述和概述的副本——它们是你的职责、显着成就和表现的良好记录。快速了解公司概况也很有帮助。还要准备一份职业或能力倾向测试的副本。

3. 索取推荐和参考资料

提前准备好您的推荐和推荐人。如果可能,从雇主、客户和供应商处获取书面推荐,并在必要时将其翻译成英文。澳大利亚雇主重视裁判员审查,通常在缩小最终候选人名单后进行审查。

让您的推荐人了解您所申请的职位的详细信息以及电话推荐时可能会被问到的问题类型。如果可能,请安排澳大利亚裁判。

潜在员工可能会在在线社交平台Linked­In上搜索您外部链接确保您的个人资料包含过去同事和经理的书面推荐。

4. 选择合适的电子邮件地址

确保您有一个可以轻松识别为您的电子邮件地址。在您的电子邮件地址中包含您的常用名 — 坚持使用人们通常用来指代您的名字,避免使用昵称,以确保您听起来尽可能专业。使用您的姓名作为电子邮件地址而不是别名是大多数澳大利亚组织的专业期望。

5. 完成您的技能和资格评估

如果您计划作为技术移民移民到澳大利亚,作为提名和签证申请的一部分,您需要由指定的澳大利亚职业评估机构对您的资格和技能进行评估。

有关资格评估的更多信息,请访问签证提名和评估页面

抵达澳大利亚后,您可能需要对您的技能和资格进行就业审查,并接受进一步的培训或衔接课程。兽医评估外部链接是一项可以帮助您做到这一点的服务。

有用的网站

Jobs Vic­to­ria:维多利亚州就业局提供量身定制的服务来支持和联系求职者和雇主。通过遍布维多利亚州的合作伙伴网络,他们通过指导、培训和发展帮助求职者做好工作准备。

Over­seas Qual­i­fi­ca­tions Unit:维多利亚州海外资格单位 (OQU) 为永久居住在维多利亚州的合格专业人士提供资格评估(由海外教育机构颁发),以协助他们在维多利亚州开展工作。

More Details
Aug 6, 2023
EasyChain:物联网友好型区块链,可实现稳健且节能的身份验证

Bap­at­la A K, Puthal D, Mohan­ty S P, et al. Easy­Chain: An IoT-Friend­ly Blockchain for Robust and Ener­gy-Effi­cient Authentication[J]. Fron­tiers in Blockchain, 6: 1194883. https://doi.org/10.3389/fbloc.2023.1194883

万物互联(IoE)是一个更大的图景,试图适应广泛部署在智能应用中的物联网(IoT)。 万物互联将人员、数据、流程和事物聚集在一起,形成一个连接更加紧密并提高整体系统智能的网络。 对万物互联的进一步研究实际上意味着创建一个专注于边缘计算而不是依赖云的分布式网络。 区块链是最近出现的分布式网络技术之一,它通过结构和操作在无需信任的 P2P 网络(例如 IoE)中提供数据完整性和安全性。 区块链还可以消除对中央实体的需求,这是在大型网络中广泛采用物联网的主要障碍。 物联网“事物”在功率和计算方面都受到资源限制,无法采用传统的区块链共识算法,而这些算法需要消耗功率和计算量。 为了解决这个问题,本文提出了 EasyChain,这是一种健壮的区块链,并且运行在基于身份验证的轻量级共识协议(称为身份验证证明(PoAh))上。 这种基于轻量级共识协议的区块链取代了耗电的交易,阻止了验证步骤,并在资源有限的环境(例如万物联网)中提供了易用性。 拟议的区块链是使用 Python 语言设计的,以便于理解其功能并更容易集成到 IoE 应用程序中。 设计的区块链系统也部署在单板计算机上,分析其可行性和可扩展性。 在模拟和实验评估中观察到的延迟为 148.89 ms,与现有算法相比非常快。

More Details
Jul 19, 2023
比特币和加密货币技术 第 1 章:密码学和加密货币简介

所有货币都需要某种方式来控制供应,并执行各种安全特性以防止作弊。在法定货币中,中央银行等组织控制货币供应,并为实物货币添加防伪功能。这些安全特性提高了攻击者的门槛,但并不能使货币无法伪造。最终,执法对于阻止人们破坏系统规则是必要的。

加密货币也必须有安全措施,防止人们篡改系统状态,防止人们含糊其辞,即对不同的人做出相互矛盾的陈述。例如,如果爱丽丝让鲍勃相信她向他支付了一枚数字硬币,那么她就不应该让卡罗尔相信她向他支付了同样的硬币。但与法定货币不同的是,加密货币的安全规则需要纯粹通过技术手段来执行,而无需依赖中央机构。

顾名思义,加密货币大量使用加密技术。加密技术提供了一种将加密货币系统的规则安全地编码到系统本身的机制。我们可以用它来防止篡改和等价交换,以及将创建新货币单位的规则编码成数学协议。因此,在正确理解加密货币之前,我们需要深入研究其所依赖的加密基础。

密码学是一个深奥的学术研究领域,它运用了许多先进的数学技术,而这些技术又是出了名的微妙和复杂难懂。幸运的是,比特币只依赖于少数相对简单和众所周知的加密结构。在本章中,我们将专门研究加密哈希值和数字签名,这两种原语对构建加密货币非常有用。以后的章节将介绍更复杂的加密方案,如零知识证明,这些方案将用于比特币的扩展和修改。

在学习了必要的加密原语后,我们将讨论如何使用这些原语来构建加密货币。本章最后,我们将以一些简单的加密货币为例,说明我们需要应对的一些设计挑战。

1.1 密码哈希函数

我们需要了解的第一个加密原语是加密散列函数。散列函数是一种数学函数,具有以下三个特性:

  • 它的输入可以是任何大小的字符串。
  • 它的输出大小固定。为了使本章的讨论具体化,我们将假设输出大小为 256 位。不过,只要输出大小足够大,我们的讨论都是正确的。
  • 可高效计算。直观地说,这意味着对于给定的输入字符串,你可以在合理的时间内计算出散列函数的输出结果。更严格地说,计算 n 位字符串的哈希值的运行时间应为 O(n)。

这些属性定义了一种通用哈希函数,可以用来构建哈希表等数据结构。我们将专门讨论加密哈希函数。为了保证哈希函数在密码学上的安全性,我们将要求它具备以下三个附加属性:(1)抗碰撞性;(2)隐藏性;(3)谜题友好。

我们将更仔细地研究这些特性中的每一个,以了解为什么有这样一个函数是有用的。学过密码学的读者应该知道,本书对哈希函数的处理与标准密码学教科书有些不同。特别是 “谜题友好 “属性,它并不是对加密哈希函数的一般要求,而是对加密货币特别有用的属性。

属性 1:抗碰撞性。我们需要加密哈希函数具备的第一个属性就是抗碰撞性。当两个不同的输入产生相同的输出时,就会发生碰撞。如果无法发现碰撞,那么就可以说一个哈希函数​H(.)是抗碰撞性的。正式地:

抗碰撞性:如果不可能找到两个值 x 和 y,使得 x≠y 但 H(x)=H(y) ,那么就可以说哈希函数具有抗碰撞性。

图 1.1 一个哈希碰撞。x 和 y 是不同的值,但输入哈希函数 H 后,它们产生了相同的输出。

请注意,我们说没有人能找到碰撞,但并没有说不存在碰撞。事实上,我们知道碰撞确实存在,我们可以通过一个简单的计数论证来证明这一点。哈希函数的输入空间包含所有长度的字符串,而输出空间只包含特定固定长度的字符串。由于输入空间大于输出空间(事实上,输入空间是无限的,而输出空间是有限的),因此一定存在映射到相同输出字符串的输入字符串。事实上,根据鸽洞原理,必然会有非常多的可能输入映射到任何特定的输出。

图1.2 由于输入数量大于输出数量,我们保证哈希函数必须至少有一个输出映射多个输入。

现在,更糟糕的是,我们说过不可能找到碰撞。然而,有些方法却能保证找到碰撞。请看下面这个寻找一个拥有256比特输出的哈希函数的碰撞的简单方法:选取 2256 + 1 个不同的值,计算每个值的哈希值,然后检查是否有两个输出值相等。由于我们选取的输入值比可能的输出值多,因此在应用哈希函数时,其中一定有一对会发生碰撞。

上述方法可以保证找到碰撞。但如果我们随机选取输入并计算哈希值,那么早在检查 2256 + 1 输入之前,我们就会以很高的概率发现碰撞。事实上,如果随机选择 2130 + 1 个输入,那么至少有两个输入会发生碰撞的概率高达 99.8%。我们只需检查可能输出数的大约平方根,就能发现碰撞,这一事实源于概率论中的一个现象,即生日悖论。在本章结尾的作业题中,我们将更详细地探讨这一问题。

这种碰撞检测算法适用于所有哈希函数。当然,它的问题在于需要非常非常长的时间才能完成。对于一个 256 位输出的哈希函数,在最坏的情况下,你必须计算哈希函数 2256 + 1 次,平均大约 2128 次。这毫无疑问将是一个天文数字,如果一台计算机每秒计算 10,000 次哈希值,那么计算 2128个哈希值需要的时间将超过 10 亿年(1027)!换个角度思考,我们可以说,如果人类制造的每一台计算机从整个宇宙诞生之初就开始计算,直到现在,它们发现碰撞的几率仍然微乎其微。概率小到远远低于地球在接下来的两秒钟内被一颗巨大流星摧毁的几率。

因此,我们看到了一种通用但不切实际的算法,可以找到任何散列函数的碰撞。一个更难的问题是:是否有其他方法可以用于特定的哈希函数,从而找到碰撞?换句话说,虽然通用碰撞检测算法不可行,但仍可能有其他算法可以有效地找到特定哈希函数的碰撞。

例如,请看下面的哈希函数:

H(x) = x mod 2256

这个函数符合我们对散列函数的要求,因为它可以接受任意长度的输入,返回固定大小的输出(256 位),并且可以高效计算。不过,这个函数也有一种高效的方法来查找碰撞。请注意,该函数只返回输入的最后 256 位。那么碰撞值就是 3 和 3 + 2256。这个简单的例子说明,尽管我们的通用碰撞检测方法在实践中无法使用,但至少有一些哈希函数确实存在高效的碰撞检测方法。

然而,对于其他哈希函数,我们不知道是否存在这样的方法。我们怀疑它们具有抗碰撞性。然而,没有任何哈希函数被证明是抗碰撞的。我们在实践中所依赖的加密哈希函数,只是人们非常非常努力地寻找碰撞但尚未成功的函数。在某些情况下,比如老式的 MD5 哈希函数,经过多年的努力,碰撞最终被发现,导致该函数被淘汰,不再实际使用。因此,我们选择相信这些函数是抗碰撞的。

应用: 既然我们知道了什么是抗碰撞,那么合乎逻辑的问题就是:抗碰撞有什么用?这里有一个应用: 如果我们知道抗碰撞哈希函数的两个输入 x 和 y 是不同的,那么可以安全地假设它们的哈希值 H(x) 和
如果我们知道 x 和 y 的哈希值是不同的,那么我们就可以认为它们的哈希值 H(x) 和 H (y ) 是安全的–如果我们知道 x 和 y 的哈希值是安全的,那么就违反了我们关于它具有抗碰撞性的假设。

应用: Mes­sage digests 既然我们知道了什么是抗碰撞,那么合乎逻辑的问题就是:抗碰撞有什么用?这里有一个应用: 如果我们知道抗碰撞哈希函数的两个输入 x 和 y 是不同的,那么可以安全地假设它们的哈希值 H(x) 和 H (y )是不同的–如果已知x和y是不同的但有相同的哈希值,那么这将会与我们之前关于哈希函数H是抗碰撞的假设相矛盾。

考虑一下 SecureBox,这是一个经过验证的在线文件存储系统,允许用户上传文件,并在下载时确保文件的完整性。假设爱丽丝上传了一个非常大的文件,并希望能在稍后验证她下载的文件与上传的文件是否相同。一种方法是将整个大文件保存在本地,然后直接与她下载的文件进行比较。虽然这种方法可行,但它在很大程度上违背了上传文件的初衷;如果爱丽丝需要访问文件的本地副本以确保其完整性,她可以直接使用本地副本。

这个说法允许我们使用哈希输出作为Mes­sage digests。考虑 SecureBox,这是一个经过身份验证的在线文件存储系统,允许用户上传文件并在下载文件时确保其完整性。 假设 Alice 上传了非常大的文件,并且希望稍后能够验证她下载的文件与她上传的文件是否相同。 一种方法是将整个大文件保存在本地,然后直接将其与她下载的文件进行比较。 虽然这有效,但它在很大程度上违背了上传它的初衷; 如果Alice需要访问文件的本地副本以确保其完整性,她可以直接使用本地副本。

无碰撞哈希为这个问题提供了一个优雅而有效的解决方案。 Alice 只需记住原始文件的哈希值即可。 当她稍后从 Secure­Box 下载文件时,她计算下载文件的哈希值并将其与她存储的哈希值进行比较。 如果哈希值相同,则她可以断定该文件确实是她上传的文件,但如果它们不同,则 Alice 可以断定该文件已被篡改。 因此,记住哈希值可以让她检测到文件在传输过程中或 Secure­Box 服务器上的意外损坏,以及服务器对文件的有意修改。 面对其他实体的潜在恶意行为时的这种保证是密码学为我们提供的核心保证。

哈希充当消息的固定长度摘要或明确的总结。 这为我们提供了一种非常有效的方式来记住我们以前见过的事物并再次识别它们。 尽管整个文件可能有 GB 那么长,但哈希值具有固定长度,在我们的示例中哈希函数为 256 位。 这大大减少了我们的存储需求。 在本章后面和整本书中,我们将看到使用哈希作为消息摘要的有用应用程序。

属性 2:隐藏性 我们想要从哈希函数中获得的第二个属性是隐藏性。隐藏属性断言,如果我们给出哈希函数的输出 y​=​H​(x),​则没有可行的方法来弄清楚输入 x​是什么。 问题是这个属性在规定的形式中不可能是真的。 考虑以下简单的例子:我们要做一个抛硬币的实验。 如果抛硬币的结果是正面,我们将宣布字符串“heads”的哈希值。 如果结果是背面,我们将公布字符串“tails”的哈希值。

然后,我们询问某人,即对手,他没有看到硬币翻转,但只看到了这个哈希输出,以找出经过哈希处理的字符串是什么(我们很快就会明白为什么我们可能想玩这样的游戏)。 作为回应,他们只需计算字符串“heads”的哈希值和字符串“tails”的哈希值,然后他们就可以看到他们得到的是哪一个。 因此,只需几个步骤,他们就可以弄清楚输入是什么。

攻击者能够猜测字符串是什么,因为 x 只有两个可能的值,并且攻击者很容易尝试这两个值。 为了能够实现隐藏属性,需要出现 x​不存在值的情况,这种情况特别有可能。 也就是说,x​必须从某种意义上非常分散的集合中选择。 如果 x​是从这样的集合中选择的,那么尝试一些特别可能的 x 值的方法将不起作用。

最大的问题是:当我们想要的值不是来自“heads”和“tails”实验中的展开集时,我们能否实现隐藏属性? 幸运的是,答案是肯定的! 所以通过将其与已传播的其他输入连接起来,我们甚至可以隐藏未传播的输入。 现在我们可以更精确地理解隐藏的含义(双竖线 ‖ 表示串联)。

隐藏性。​哈希函数 H 是隐藏性的,如果:当从具有高最小熵的概率分布中选择秘密值 r​时,则给定 H​(r x)​不可能找到 x​。​

在信息论中,最小熵m​in-entropy​是对结果可预测程度的度量,高的 min-entropy 体现了分布(如,随机变量)非常分散的直观想法。这具体意味着,当我们从分布中采样时,可能不会出现特定的值。 因此,举一个具体的例子,如果从所有 256 位长的字符串中统一选择 r​,则以概率 1/2​选择任何特定字符串,这是一个无限小的值。

应用:承诺 Com­mit­ments。​现在让我们看一下隐藏属性的应用。 特别是,我们想做的是所谓的承诺。承诺是数字模拟,取一个值,将其密封在信封中,然后将信封放在每个人都可以看到的桌子上。 当你这样做时,你就已经承诺了信封内的内容。 但你还没有打开它,所以即使你承诺了一个价值观,这个价值观对其他人来说仍然是一个秘密。 稍后,您可以打开信封并显示您之前承诺的价值。

承诺方案。​承诺方案由两种算法组成:
com := commit(m​sg, nonce)​ com­mit 函数采用消息和秘密随机值(称为随机数)作为输入并返回承诺。
verify(com, msg, nonce)​ 验证函数将承诺、随机数和消息作为输入。 如果 com​ == commit(m​sg,​n​once)​则返回 true,否则返回 false。
我们要求满足以下两个安全属性:
Hid­ing:​给定com,​不可能找到m​sg
Bind­ing:​不可能找到两对 (​msg, nonce)​和 (​msg’, nonce’)​使得 m​sg ≠​
msg’​和提交(m​sg,nonce)​== commit(m​sg’,nonce’)​

要使用承诺方案,我们首先需要生成一个随机数。 然后,我们将 com­mit 函数与要提交的值 m​sg 一起应用于此随机数,并发布承诺 com。此阶段类似于将密封的信封放在桌子上。 稍后,如果我们想揭示他们之前承诺的值,我们会发布用于创建此承诺的随机数,以及消息​msg。现在,任何人都可以验证 m​sg 确实是之前承诺的消息。 这个阶段类似于打开信封。

每次您提交一个值时,选择一个新的值非常重要。​​在密码学中,术语“n​once​”用于指只能使用一次的值。

这两个安全属性决定了算法的行为实际上就像密封和打开信封一样。 首先,给定 com​承诺,查看信封的人无法弄清楚消息是什么。 第二个属性是它具有约束力。 这确保了当您承诺信封中的内容时,您以后无法改变主意。 也就是说,您可以先提交一条消息,然后又声称您提交了另一条消息,找到这样两条不同的消息是不可能的。

那么我们如何知道这两个属性成立呢? 在回答这个问题之前,我们需要讨论如何实际实施承诺计划。 我们可以使用加密哈希函数来做到这一点。 考虑以下承诺方案:

com­mit(msg, nonce)​:= H(nonce ‖ msg)​,其中 nonce​是一个256位的随机值。

为了提交消息,我们生成一个随机 256 位随机数。 然后我们将随机数和消息连接起来,并返回该连接值的哈希值作为承诺。 为了进行验证,有人将计算与消息连接的随机数的相同哈希值。 他们将检查这是否等于他们看到的承诺。

再看看我们的承诺计划所要求的两个属性。 如果我们将­com­mit和ver­i­fy的实例化以及 H(nonce ‖ msg) 替换为com,那么这些属性变为:

● 隐藏:​给定 H(n​once msg),​不可能找到 m​sg
● 绑定:​不可能找到两对 (​msg, nonce)​和 (​msg’, nonce’)​使得 m​sg ≠​msg’和 H(nonce msg)​== H(nonce’ msg’)​

承诺的隐藏性正是我们哈希函数所需的隐藏性功能 。 如果随机选择256位值作为key,则隐藏性说明如果哈希将密钥和消息连接起来,从哈希输出中找到消息是不可行的。 事实证明,绑定属性隐含在底层哈希函数的抗碰撞属性1中。 如果哈希函数是抗碰撞的,那么将不可能找到不同的值 msg 和 msg’ 使得 H(n​once ‖ msg) = H​(n​once’ ‖ msg’)​,因为这些值确实会发生碰撞。

因此,如果 H​是一个抗碰撞和隐藏的哈希函数,则该承诺方案将起作用,因为它将具有必要的安全属性。

属性3:谜题友好性。 我们需要哈希函数的第三个安全特性是它们的谜题友好性。 这个属性有点复杂。 我们将首先解释该属性的技术要求是什么,然后给出一个应用来说明为什么该属性有用。

谜题友好性。对于每个可能的 n 位输出值 y​,如果 k 是从具有高最小熵的分布中选择的,那么在明显小于 2n​​的时间内,不可能找到 x​,使得H(k ‖ x) = y ,则哈希函数 H​被认为是易解谜性。

直观地说,这意味着,如果有人想要将哈希函数定位为某个特定的输出值 y​,​如果输入的一部分是以适当随机的方式选择的,则很难找到另一个完全符合该目标的值。

应用:搜索谜题。​现在,让我们考虑一个说明此属性有用性的应用。 在此应用中,我们将构建一个搜索谜题,这是一个需要搜索非常大的空间才能找到解决方案的数学问题。 特别是,搜索谜题没有捷径。 也就是说,除了搜索那么大的空间之外,没有办法找到有效的解决方案。

1 相反的推论不成立。 也就是说,您可能会发现碰撞,但它们都不是 H(n​once ‖ msg) == H​(n​once’ ‖ msg’) 形式。例如,如果您只能找到两个不同的随机数为同一消息生成相同承诺的碰撞,则承诺方案仍然具有约束力,但底层哈希函数不具有抗碰撞性。

搜索谜题。 搜索谜题包括
● 哈希函数,H​,​
● 一个值,i​d(我们称之为谜题 ID)​,从高最小熵分布中选择
● 和目标集 Y​
这个谜题的一个解决方案是一个值 x​,​使得 H ( id ​ ‖ x ) ​ ∈ Y ​ 。

直觉是这样的:如果 H 有一个 n 位输出,那么它可以采用 2 个值中的任何一个。 解决谜题需要找到一个输入,以便输出落在集合 Y 内,该集合通常比所有输出的集合小得多。 Y 的大小决定了拼图的难度。 如果 Y 是所有 n 位字符串的集合,则密题很简单,而如果 Y 只有 1 个元素,则谜题非常困难。 谜题 ID 具有高最小熵这一事实确保了没有捷径。 相反,如果 ID 的特定值是可能的,那么有人可能会作弊,比如通过使用该 ID 预先计算谜题的解决方案。

如果一个搜索谜题是谜题友好的,这意味着这个谜题没有解决策略,这比仅仅尝试 x 的随机值要好得多。因此,如果我们想要提出一个难以解决的谜题,只要我们能够以适当随机的方式生成谜题 ID,我们就可以这样做。 稍后当我们讨论比特币挖矿时,我们将使用这个想法,这是一种计算难题。

SHA-256。 我们已经讨论了哈希函数的三个属性,以及每个属性的一个应用。 现在让我们讨论一个特定的哈希函数,我们将在本书中大量使用它。 存在很多哈希函数,但这是比特币主要使用的哈希函数,而且它是一个非常好用的哈希函数。 它被称为 SHA‐256。​

回想一下,我们要求哈希函数适用于任意长度的输入。 幸运的是,只要我们能够构建一个适用于固定长度输入的哈希函数,就有一种通用方法可以将其转换为适用于任意长度输入的哈希函数。 它被称为 Merkle-Damgard 变换。SHA-256 是使用此方法的许多常用哈希函数之一。 用通用术语来说,底层的定长抗碰撞哈希函数称为压缩函数。​已经证明,如果底层压缩函数是抗碰撞的,那么整个哈希函数也是抗碰撞的。

Merkle-Damgard 变换非常简单。 假设压缩函数接受长度为 m​的输入,并输出较小的长度 n​。哈希函数的输入(可以是任意大小)被分为长度为 ​m‐n的块​。构造工作如下:将每个块与前一个块的输出一起传递到压缩函数中。 请注意,输入长度将为 (m​‐n)​ + n​ = ​​m,这是压缩函数的输入长度。 对于第一个块,没有预先的块输出,我们在每次调用哈希函数时都使用初始化向量(IV)。这个数字在每次调用哈希函数时都会使用,实际上你可以看一下它在标准文件中。 最后一个块的输出是您返回的结果。

SHA-256 使用压缩函数,该函数接受 768 位输入并生成 256 位输出。 块大小为 512 位。 请参见图 1.3 了解 SHA-256 工作原理的图形描述。

图 1.3:SHA-256 哈希函数(简化)。 ​SHA-256 使用 Merkle-Damgard 传输格式将固定长度的抗碰撞压缩函数转换为接受任意长度输入的哈希函数。 输入被“填充”,使其长度为 512 位的倍数。

我们讨论了哈希函数、具有特殊属性的加密哈希函数、这些属性的应用以及我们在比特币中使用的特定哈希函数。 在下一节中,我们将讨论使用哈希函数构建在比特币等分布式系统中使用的更复杂的数据结构的方法。

边栏:哈希函数建模。哈希函数是密码学的瑞士军刀:它们在各种各样的应用程序中占有一席之地。 这种多功能性的另一面是,不同的应用需要稍微不同的哈希函数属性来确保安全性。 事实证明,要确定一个哈希函数属性列表来全面证明安全性是非常困难的。
在本文中,我们选择了对于比特币和其他加密货币中使用哈希函数的方式至关重要的三个属性。 即使在这个空间内,并非所有这些属性对于每次使用哈希函数都是必需的。 例如,正如我们将看到的,谜题友好性仅在比特币挖矿中才重要。
安全系统的设计者经常认输,并将哈希函数建模为每个可能的输入输出独立随机值的函数。 使用这种“随机预言模型”来证明安全性在密码学中仍然存在争议。 无论人们在这场辩论中的立场如何,推理如何将我们在应用中想要的安全属性减少到底层原语的基本属性对于构建安全系统来说是一项有价值的智力练习。 我们在本章中的演示旨在帮助您学习这项技能。

1.2 哈希指针和数据结构

在本节中,我们将讨论哈希指针及其应用。 哈希指针是一种数据结构,在我们将要讨论的许多系统中都非常有用。 哈希指针只是指向某些信息与信息的加密哈希一起存储的位置的指针。 常规指针为您提供了一种检索信息的方法,而哈希指针还为您提供了一种验证信息是否未更改的方法。

图 1.4 哈希指针。哈希指针是指向数据存储位置的指针,以及该数据在某个固定时间点的值的加密哈希值。

我们可以使用哈希指针来构建各种数据结构。 直观上,我们可以采用一种熟悉的使用指针(例如链表或二叉搜索树)的数据结构,并使用哈希指针来实现它,而不是像通常那样使用指针。

区块链。​在图1.5中,我们使用哈希指针构建了一个链表。 我们将这种数据结构称为块链。在具有一系列块的常规链表中,每个块都有数据以及指向列表中前一个块的指针,而在块链中,前一个块指针将被哈希指针替换。 因此,每个块不仅告诉我们前一个块的值在哪里,而且还包含该值的摘要,使我们能够验证该值是否未更改。 我们存储列表的头部,它只是一个指向最新数据块的常规哈希指针。

图 1.5 区块链。​区块链是一个用哈希指针而不是指针构建的链表。

区块链的一个用例是防篡改日志。也就是说,我们想要构建一个存储一堆数据的日志数据结构,并允许我们将数据附加到日志的末尾。 但如果有人更改了日志中较早的数据,我们就会检测到它。

为了理解为什么区块链实现了这种防篡改的属性,让我们问一下如果对手想要篡改链中间的数据会发生什么。 具体来说,攻击者的目标是让只记住区块链头部哈希指针的人无法检测到篡改。 为了实现这一目标,对手改变了某些区块的数据。​由于数据已更改,因此区块 k​的哈希值 + 1(表示整个区块 k​的哈希值)将不会匹配。 请记住,我们在统计上保证新的哈希值不会与更改的内容匹配,因为哈希函数具有抗碰撞性。 因此,我们将检测块 k​中的新数据与块 k​ + 1 中的哈希指针之间的不一致。当然,对手也可以继续尝试通过更改下一个块的哈希来掩盖此更改。 对手可以继续这样做,但是当他到达列表的头部时,这个策略就会失败。 具体来说,只要我们将链表头部的哈希指针存储在对手无法更改的地方,对手就无法在不被发现的情况下更改任何块。

这样做的结果是,如果对手想要篡改整个链中任何位置的数据,为了保持故事的一致性,他将不得不一直篡改哈希指针,直到开始。 他最终会遇到障碍,因为他无法篡改列表的头部。 因此,通过记住这个单个哈希指针,我们基本上就记住了整个列表的防篡改哈希。 因此,我们可以构建一个像这样的区块链,其中包含我们想要的任意数量的块,回到列表开头的某个特殊块,我们将其称为创世块。

您可能已经注意到,区块链结构与我们在上一节中看到的 Merkle-Damgard 结构类似。 事实上,它们非常相似,并且相同的安全论点也适用于它们。

图1.6 防篡改日志。​如果对手修改了区块链中任何位置的数据,就会导致后续区块中的哈希指针不正确。 如果我们存储链表的头,那么即使对手修改了所有指针以与修改的数据一致,头指针也会不正确,我们就会检测到篡改。

Merkle 树。我们可以使用哈希指针构建的另一个有用的数据结构是二叉树。 带有哈希指针的二叉树被称为 Merkle 树,以其发明者 Ralph Merkle 的名字命名。 假设我们有许多包含数据的块。 这些块构成了我们树的叶子。 我们将这些数据块分成两对,然后对于每一对,我们构建一个具有两个哈希指针的数据结构,每个数据块都有一个哈希指针。 这些数据结构构成了树的下一层。 我们依次将它们分为两组,并为每一对创建一个包含每个组的哈希值的新数据结构。 我们继续这样做,直到到达单个块,即树的根。

图 1.7 Merkle 树。​在 Merkle 树中,数据块成对分组,每个块的哈希值存储在父节点中。 父节点依次成对分组,并且它们的哈希值存储在树的上一层。 这一直持续到树上,直到到达根节点。

和以前一样,我们只记住树头的哈希指针。 我们现在可以通过哈希指针向下遍历到列表中的任何点。 这可以让我们确保数据没有被篡改,因为就像我们在区块链中看到的那样,如果对手篡改了树底部的某个数据块,就会导致上一层的哈希指针不匹配,即使他继续篡改这个块,变化最终也会传播到树的顶部,在那里他将无法篡改我们存储的哈希指针。 同样,只要记住顶部的哈希指针,就可以检测到任何篡改任何数据的尝试。

成员资格证明。Merkle 树的另一个很好的功能是,与我们之前构建的区块链不同,它允许简洁的成员资格证明。 假设有人想证明某个数据块是 Merkle Tree 的成员。 像往常一样,我们只记住词根。 然后他们需要向我们展示这个数据块,以及从数据块到根的路径上的块。 我们可以忽略树的其余部分,因为这条路径上的块足以让我们验证哈希一直到树的根。 请参见图 1.8 了解其工作原理的图形描述。

如果树中有 n 个节点,则只需要显示大约 l​og(n)​项。 由于每个步骤只需要计算子块的哈希值,因此我们需要大约 (n) 时间来验证它。 并且即使 Merkle 树包含非常大量的区块,我们仍然可以在相对较短的时间内证明成员资格。 因此,验证在时间和空间上运行,时间和空间与树中节点的数量成对数。

图1.8 会员证明。 为了证明数据块包含在树中,只需显示从该数据块到根的路径中的块。

排序的 Merkle 树只是一棵 Merkle 树,我们在底部获取块,然后使用某种排序函数对它们进行排序。 这可以是字母顺序、字典顺序、数字顺序或其他商定的顺序。

非成员资格证明。​使用排序的 Merkle 树,可以在对数时间和空间中验证非成员资格。 也就是说,我们可以证明某个特定的区块不在 Merkle 树中。 我们这样做的方法很简单,就是显示相关项目所在位置之前的项目的路径,并显示该项目所在位置之后的项目的路径。 如果这两个项目在树中是连续的,则这可以作为不包括相关项目的证据。 因为如果包含它,则它需要位于显示的两个项目之间,但它们之间没有空格,因为它们是连续的。

我们已经讨论了在链表和二叉树中使用哈希指针,但更一般地说,事实证明我们可以在任何基于指针的数据结构中使用哈希指针,只要该数据结构没有循环。 如果数据结构中存在循环,那么我们将无法使所有哈希值都匹配。 如果您考虑一下,在非循环数据结构中,我们可以从叶子附近或没有任何指针的事物附近开始,计算它们的哈希值,然后返回到开头。 但在有循环的结构中,我们没有尽头可以开始并计算回来。

因此,考虑另一个例子,我们可以用哈希指针构建一个有向无环图。 我们将能够非常有效地验证该图中的成员资格。 而且很容易计算。 以这种方式使用哈希指针是一个通用技巧,您将在分布式数据结构的上下文中以及我们在本章后面和整本书中讨论的算法中一次又一次地看到它。

1.3 数字签名

在本节中,我们将研究数字签名。这是第二个加密原语以及哈希函数,我们需要它们作为稍后讨论加密货币的构建块。 数字签名应该是纸上手写签名的数字模拟。 我们希望数字签名具有与手写签名类比很好对应的两个属性。 首先,只有你可以签名,但任何看到它的人都可以验证它是否有效。 其次,我们希望签名与特定文档相关联,以便签名不能用于表明您同意或认可其他文档。 对于手写签名,后一个属性类似于确保某人无法获取您的签名并将其从一份文档上剪下来并将其粘贴到另一份文档的底部。

我们如何使用密码学以数字形式构建它? 首先,让我们把之前直观的讨论变得更具体一些。 这将使我们能够更好地推理数字签名方案并讨论其安全属性。

数字签名方案。​数字签名方案由以下三种算法组成:
● (sk, pk) :=generateKeys(k​eysize)​ generateKeys方法采用密钥大小并生成密钥对。 秘密密钥 sk​被秘密保存并用于签署消息。 p​k​是您提供给每个人的公共验证密钥。 任何拥有此密钥的人都可以验证您的签名。
● sig := sign(s​k,​m​essage)​ sign方法采用消息和密钥s​k,​a​s 输入并输出 s​k 下 m​essage 的签名
● isValid := verify(p​k,​m​essage,​s​ig)​ 验证方法将消息、签名和公钥作为输入。 它返回一个布尔值 i​sValid,如果s​ig​是公钥p​k下消息的有效签名,则该值为true,否则为false。
我们要求满足以下两个性质:
● 有效签名必须验证 verify(​p​k,​m​essage,​sign(​s​k,​m​essage)​) == t​rue
● 签名本质上是不可伪造的

我们注意到,generateKeys 和 sign 可以是随机算法。 事实上,generateKeys 最好是随机的,因为它应该为不同的人生成不同的密钥。 另一方面,验证始终是确定性的。

现在让我们更详细地研究数字签名方案所需的两个属性。 第一个属性很简单——必须验证有效签名。 如果我使用 s​k(我的密钥)签署一条消息,并且稍后有人尝试使用我的公钥 p​k 在同一条消息上验证该签名,则该签名必须正确验证。 此属性是签名发挥作用的基本要求。

不可伪造性。 第二个要求是伪造签名在计算上是不可行的。 也就是说,知道您的公钥并可以看到您在其他一些消息上的签名的对手无法在他没有看到您的签名的某些消息上伪造您的签名。 这种不可伪造性通常以我们与对手玩的游戏来形式化。 游戏的使用在密码安全证明中相当常见。

在不可伪造性游戏中,有一个对手声称他可以伪造签名,还有一个挑战者将测试这一主张。 我们要做的第一件事是使用 g​enerateKeys​生成一个秘密签名密钥和相应的公共验证密钥。 我们将密钥提供给挑战者,并将公钥提供给挑战者和对手。 因此,对手只知道公开的信息,而他的任务就是试图伪造信息。 挑战者知道秘密密钥。 这样他就可以签名了。

直观上,该游戏的设置符合现实世界的条件。 现实生活中的攻击者可能能够在许多不同的文档上看到潜在受害者的有效签名。 如果这对攻击者有用的话,攻击者甚至可以操纵受害者签署看似无害的文件。

为了在我们的游戏中对此进行建模,我们将允许攻击者在他选择的某些文档上获得签名,只要他愿意,只要猜测的数量是合理的。 给个直观的理解合理的猜测次数意味着什么,我们允许攻击者尝试 100 万次猜测,但不允许 280 次猜测2

一旦攻击者确信他看到了足够的签名,那么攻击者就会选择一些消息 M,他们将尝试在其上伪造签名。 对 M​的唯一限制是,它必须是攻击者之前未见过签名的消息(因为攻击者显然可以发回他所获得的签名!)。 挑战者运行验证算法来确定攻击者生成的签名是否是公共验证密钥下 M 上的有效签名。 如果验证成功,攻击者就赢得了游戏。

2 用渐近术语来说,我们允许攻击者尝试多次猜测,这些猜测是密钥大小的多项式函数,但不能更多(例如,攻击者不能尝试指数级多次猜测)。
More Details
Jul 14, 2023
比特币和加密货币技术 (绪论)

本文翻译自英文版 Narayanan A, Bon­neau J, Fel­ten E, et al. Bit­coin and cryp­tocur­ren­cy technologies[J]. A com­pre­hen­sive, 2021. 译者:唐凯

在此致敬该书的全体著作者:Arvind Narayanan, Joseph Bon­neau, Edward Fel­ten,
Andrew Miller, Steven Goldfed­er

如对该书有任何问题,请邮件联系:bitcoinbook@lists.cs.princeton.edu

本书介绍

比特币和加密货币技术令很多人兴奋。 乐观者声称比特币将从根本上改变世界各地的支付、经济甚至政治。 悲观主义者声称比特币本质上是破碎的,并将遭受不可避免的巨大崩溃。这些不同观点的背后是对比特币是什么及其运作方式的严重混淆。 我们写作这本书,旨在帮助消除炒作,并深入了解比特币独特之处的核心。要真正了解比特币的独特之处,我们需要了解它在技术层面上的运作方式。 比特币确实是一项新技术,我们只能通过与过去技术的简单类比来解释它。我们假设您对计算机科学有基本的了解——计算机如何工作、数据结构和算法,以及一些编程经验。 如果您是计算机科学专业的本科生或研究生、软件开发人员、企业家或技术爱好者,这本教科书适合您。在本书中,我们将解决有关比特币的重要问题。 比特币是如何运作的? 是什么让它与众不同? 您的比特币安全吗? 比特币用户的匿名程度如何? 我们可以使用比特币作为平台构建哪些应用程序? 加密货币可以受到监管吗? 如果我们今天设计一种新的加密货币,我们会改变什么? 未来会怎样?

每章都有一系列的课后问题,帮助您更深入地理解这些问题。 此外,还有一系列编程作业,您将以简化模型实现比特币的各种组件。 如果您是听觉学习者,本书的大部分材料也可以作为一系列视频讲座提供。 您可以在我们的 Cours­era 课程中找到所有这些内容。您还可以通过在线找到的信息(包括比特币维基、论坛和研究论文)以及与同行和比特币社区的互动来补充您的学习。

读完本书后,您将了解在阅读有关比特币和其他加密货币的声明时区分事实与虚构所需的一切。 您将拥有设计与比特币网络交互的安全软件所需的概念基础。 您将能够将比特币的想法整合到您自己的项目中。

致谢

我们非常感谢帮助开发编程作业的学生以及对本书草稿提供反馈的每个人。 普林斯顿大学的学生 Shiv­am Agarwal、Miles Carlsten、Paul Ellenbogen、Pranav Gokhale、Alex Iriza、Harry Kalod­ner 和 Dil­lon Reisman,以及斯坦福大学的学生 Alli­son Berke、Benedikt Bünz 和 Alex Leish­man 值得特别赞扬。 我们还要感谢 Dan Boneh 和 Albert Szmigiel­s­ki。

前言——通往比特币的漫漫长路

通往比特币的道路上布满了尝试失败的先驱者。 我编制了一份大约一百个加密支付系统的列表,包括基于电子现金和信用卡的技术,这些系统在某种程度上值得注意。 有些是被广泛引用的学术提案,而另一些则是已部署和测试的实际应用系统。 在这份名单上的所有名字中,可能只有一个你认识——PayPal。 Pay­Pal 之所以能幸存下来,只是因为它迅速放弃了在手持设备上进行加密支付的最初想法!

从这段历史中可以学到很多东西。 比特币的想法从何而来? 为什么有些技术能够幸存,而另一些技术却消亡了? 复杂的技术创新要成功商业化需要什么? 如果不出意外的话,这个故事会让您体会到我们终于拥有了一个真正的、可运行的、源于互联网的支付机制是多么的了不起。

表 1:著名的电子支付系统和提案

传统的金融服务

回顾政府和货币出现之前的历史,一种用于获取商品的系统就是易货贸易。 假设爱丽丝想要一个工具,而鲍勃想要药物。 如果他们每个人碰巧都有另一个人需要的东西,那么他们可以交换并满足他们的需要。另一方面,假设爱丽丝有食物,她愿意用它来换取工具,而鲍勃有工具,但不需要食物, 他想要药物。 爱丽丝和鲍勃不能互相交易,但如果有第三者卡罗尔愿意用药品交换食物,那么就可以安排三方交易,从而让每个人都能得到他们需要的东西。当然,缺点是协调——将一群需求和愿望一致的人同时安排在同一个地方。 为了解决协调问题出现了两种系统:信贷和现金。 历史学家、人类学家和经济学家争论两者中哪一个先发展起来,但这对我们的目的来说并不重要。在基于信用的系统中,在上面的示例中,爱丽丝和鲍勃将能够相互交易。 鲍勃会给爱丽丝工具,鲍勃得到了欠他的人情。 换句话说,爱丽丝有一笔债务需要在未来某个时候与鲍勃清算。爱丽丝的物质需求现在得到了满足,但她有一笔债务想要取消,所以这是她新的“想要”。 如果将来爱丽丝遇到卡罗尔,爱丽丝可以用她的食物换取卡罗尔的药品,然后带着药品回到鲍勃那里并取消债务。另一方面,在基于现金的系统中,爱丽丝会从鲍勃那里购买该工具。 稍后,她可能会将食物卖给卡罗尔,卡罗尔可以将药物卖给鲍勃,从而完成循环。 这些交易可以以任何顺序进行,只要每笔交易的买方手头都有现金。 当然,到最后,就好像没有钱易手一样。这两个系统都没有明显优越性。 基于现金的系统需要通过一些初始现金分配来“引导”,否则任何交易都不会发生。 基于信用的系统不需要引导,但缺点是任何欠债的人都要承担一定的风险。 对方有可能永远不会回来偿还债务。现金还可以让我们准确判断某物的价值。 如果你进行物物交换,很难说工具是否比药物更有价值,或者药物是否比食物更有价值。 现金让我们用数字来谈论价值。 这就是我们今天使用混合系统的原因——即使我们使用信贷,我们也会以解决债务所需的现金数量来衡量债务。这些想法出现在许多情况下,尤其是用户交易某种虚拟商品的在线系统。 例如,点对点文件共享网络必须解决“贪图便宜者”的问题,即下载文件而不依次共享的用户。 虽然交换文件可能有效,但还存在协调问题:找到拥有您想要的文件并且想要您拥有的文件的完美人员。 在 MojoNa­tion 等项目和 Kar­ma 等学术提案中,用户会获得一些虚拟现金的初始分配,他们必须花费这些现金来接收文件,并在向其他用户发送文件副本时赚取收入。 在这两种情况下,一个或多个中央服务器帮助跟踪用户的余额,并可以提供内部货币和传统货币之间的兑换服务。 虽然 MojoNa­tion 没有生存足够长的时间来实现这样的交换,但它成为当今使用的一些协议的智力祖先:BitTorrent 和 Tahoe-LAFS。

网上信用卡的麻烦

信用和现金是基本概念,以至于我们可以将众多电子支付方式分为两类。 比特币显然属于“现金”堆,但让我们先看看另一个。信用卡交易是当今网络上使用的主要支付方式。 如果您曾经从亚马逊等在线卖家那里购买过商品,您就会知道安排是如何进行的。 您输入信用卡详细信息,将其发送给亚马逊,然后亚马逊将这些信用卡详细信息转交给“系统”,即涉及处理商、银行、信用卡公司和其他中介机构的金融系统。另一方面,如果您使用像 Pay­Pal 这样的东西,您看到的是一个中介机构。 您和卖家之间有一家公司,因此您将信用卡详细信息发送给该中介机构,该中介机构批准交易并通知卖家。 中介机构将在每天结束时与卖方结算余额。您从这种机构中获得的好处是,您不必向卖家提供您的信用卡详细信息,这可能会带来安全风险。 您甚至可能不必向卖家提供您的身份,这也将改善您的隐私。 缺点是您失去了与卖家直接互动的简单性。 您和卖家可能都必须在同一中介机构拥有账户。如今,我们大多数人在网上购物时都愿意透露信用卡信息,或者至少我们勉强接受了。 我们也习惯于公司收集有关我们在线购物和浏览活动的数据。 但在 20 世纪 90 年代,网络还是新生事物,协议级加密标准才刚刚兴起,这些担忧让消费者深感不确定和犹豫。 特别是,通过不安全的渠道将您的信用卡详细信息交给信誉未知的在线供应商被认为是疯狂的。 在这样的环境下,人们对中介机构产生了很大的兴趣。一家名为 FirstVir­tu­al 的公司是一家早期的支付中介公司,成立于 1994 年。顺便说一句,他们是最早建立纯虚拟办公室的公司之一,员工分布在全国各地,通过互联网进行交流,因此得名。FirstVirtual 提议的系统有点像 Pay­Pal 当前的系统,但早于它很多年。 作为用户,您需要向他们注册并提供您的信用卡详细信息。 当您想从卖家处购买商品时,卖家会联系 FirstVir­tu­al 并提供所请求付款的详细信息,FirstVirtual 会与您确认这些详细信息,如果您批准,则会向您的信用卡收取费用。 但有两个细节很有趣。 首先,所有这些沟通都是通过电子邮件进行的; 当时的网络浏览器才刚刚开始普遍支持 HTTPS 等加密协议,而支付协议的多方性质又增加了其他复杂性。 (其他中介机构采用将信息编码到 URL 中或在 HTTP 之上使用自定义加密协议的方法。) 其次,客户将有 90 天的时间对费用提出异议,而商家只能在三个月后收到款项! 如今,商家确实会立即收到付款,但是,仍然存在客户提出退款或对信用卡账单提出异议的风险。 如果发生这种情况,商家将不得不将付款退还给信用卡公司。在 90年代中期,有一种中间机构的竞争方法,我们称之为 SET 架构。 SET 还避免了客户向商家发送信用卡信息的需要,而且还避免了用户必须向中介机构注册。 在 SET 中,当您准备购买时,浏览器会将您的交易详细信息视图传递到计算机上的购物应用程序,该应用程序与您的信用卡详细信息一起进行加密,只有中介才能解密,其他人都不能(包括卖家)。 通过这种方式加密您的数据后,您可以将其发送给卖家,因为您知道它是安全的。 卖方盲目地将加密数据连同他们自己对交易细节的看法转发给中介。 仅当您的观点与卖家的观点一致时,中介才会解密您的数据并批准交易。SET 是由 VISA 和 Mas­ter­Card 以及当时许多技术巨头:Netscape、IBM、Microsoft、Verisign 和 RSA 共同开发的标准。 这是一个统一了多个现有提案的总括规范。一家实施 SET 的公司名为 Cyber­Cash。 从很多方面来说,这都是一家有趣的公司。 除了信用卡支付处理之外,他们还有一种名为 Cyber­Coin 的数字现金产品。 这是一个小额支付系统——用于小额支付,例如支付几美分阅读在线报纸文章。 这意味着您的 Cyber­Coin 账户中的余额在任何时候都可能不会超过 10 美元。 然而,有趣的是,他们能够为每个账户获得高达 10 万美元的美国政府 (FDIC) 保险。更有趣的是,当 CyberCash运营时,美国政府对被视为武器的密码技术出口实施了一项误导性的限制(现已放弃)。 这意味着包含有意义加密的软件无法提供给其他国家/地区的用户下载。 然而,CyberCash 的软件获得了国务院的特殊豁免。 政府的论点是,从 Cyber­Cash 软件中提取加密技术比从头开始编写加密货币更困难。最后,CyberCash 是少数受 Y2K 漏洞影响的公司之一,这一点值得怀疑——这导致他们的支付处理软件向某些客户重复计费。 他们后来于 2001 年破产。他们的知识产权被 Verisign 收购,随后 Verisign 将其出售给了现在的 Pay­Pal。

为什么SET不起作用? 根本问题与证书有关。 证书是一种将加密身份(即公钥)与现实身份安全关联的方法。 这是网站需要从 Verisign 等被称为证书颁发机构的公司获得的信息,以便在浏览器中显示为安全(通常由锁定图标表示)。 将安全性置于可用性之上,CyberCash 和 SET 决定不仅系统中的处理商和商家必须获得证书,所有用户也必须获得证书。 获得证书就像报税一样令人愉快,所以这个系统是一场灾难。 几十年来,主流用户对任何需要最终用户证书的系统都坚决集体说“不”,而此类提案现在已降级为学术论文。 比特币通过完全避免现实生活中的身份,巧妙地避开了这个棘手的问题。 在比特币中,公钥本身就是用户的身份,我们将在第一章中看到。90 年代中期,当 SET 标准化时,万维网联盟也在考虑标准化金融支付。 他们希望通过扩展 HTTP 协议来实现这一点,这样用户就不需要额外的软件来进行交易——他们只需使用浏览器即可。 事实上,他们对于如何扩展协议有一个非常笼统的建议,他们的用例之一就是进行支付。 这从未发生过——整个扩展框架从未部署在任何浏览器中。 大约二十年后的 2015 年,W3C 宣布它希望再次尝试这一领域,而这次比特币将成为该标准化的一部分。 然而,考虑到过去的所有失败,我不会屏住呼吸(有所期待)。

从信贷到(加密)现金

现在让我们转向现金。 我们之前比较了现金和信贷,并指出现金系统需要“引导”,但好处是它避免了买家拖欠债务的可能性。 现金还有两个额外的优势。 首先是更好的匿名性。 由于您的信用卡是以您的名义发行的,因此银行可以跟踪您的所有支出。 但当你用现金支付时,银行就不会介入,对方也不需要知道你是谁。 其次,现金可以实现线下交易,无需打电话给第三方即可获得交易批准。 也许稍后,他们会去银行等第三方存入现金,但这就不那么麻烦了。

比特币并没有完全提供这两个属性,但已经足够接近了,很有用。 比特币的匿名性不如现金。 你不需要使用你的真实身份来支付比特币,但你的交易有可能通过巧妙的算法与公共交易账本绑定在一起,如果您不小心,就会进一步与您的身份相关联。我们将在第 6 章中探讨比特币匿名性背后的混乱但令人着迷的细节。比特币也不能以完全离线的方式工作。 好消息是它不需要中央服务器,而是依赖于像互联网本身一样具有弹性的点对点网络。 在第 3 章中,我们将介绍“绿色地址”和小额支付等技巧,这些技巧使我们能够在某些情况下或在某些假设下进行离线支付。

最早将密码学应用于现金的想法来自于 1983 年的 David Chaum。让我们通过物理类比来理解这一点。 假设我开始分发一些纸条,上面写着:“这张纸币的持有者可以通过将其出示给我来兑换一美元”,并附上我的签名。 如果人们相信我会信守诺言并认为我的签名不可伪造,他们就可以像钞票一样传递这些纸片。 事实上,纸币本身最初是由商业银行发行的本票。 直到最近的历史,政府才介入,集中货币供应并合法要求银行赎回纸币。我可以用数字签名以电子方式做同样的事情,但这会遇到恼人的“双重支出”问题——如果你收到代表一个虚拟现金单位的数据,你可以制作它的两个(或更多)副本并通过它对不同的人说。 为了坚持我们的类比,让我们稍微延伸一下,假设人们可以制作完美的副本,而我们无法区分副本和原件。 我们能解决这个世界上的双重支付吗?这是一个可能的解决方案:我将唯一的序列号放入我发出的每张纸条中。 当你收到某人发来的这样的票据时,你会检查我的签名,但你也会打电话给我,询问带有该序列号的票据是否已经被花掉。 希望我会拒绝,在这种情况下你会接受这张便条。 我会将序列号记录在我的分类账中,如果你尝试花掉这张纸币,它不会起作用,因为收件人会打电话给我,我会告诉他们这张纸币已经被花掉了。 相反,您需要做的是定期将您收到的所有纸币带给我,我将向您发出相同数量的新纸币,并带有新的序列号。这很有效。 但这在现实生活中很麻烦,如果我设置了一个服务器来进行序列号的签名和记录保存,那么数字化就很简单。 唯一的问题是,这不再是真正的现金,因为它不是匿名的——当我给你开一张纸条时,我可以记录序列号和你的身份,当其他人稍后兑换它时,我也可以做同样的事情。 这意味着我可以跟踪你花钱的所有地方。这就是 Chaum 的创新之处。他想办法通过发明以下过程的数字等效物来保持系统匿名并防止双重支出:当我向您发出新通知时,您选择序列号。 你没有写在这张纸上,但是把它遮盖起来,这样我就看不到它了。 然后我就签名了,但还是看不到序列号。 这在密码学中称为“盲签名”。 选择一个长的、随机的序列号以确保它很可能是唯一的,这符合您的利益。 我不必担心你会选择一个已经选过的序列号——这样做只会搬起石头砸自己的脚,最终得到一张无法使用的钞票。这是第一个严肃的数字现金提案。 它有效,但仍然需要由中央机构(例如银行)运行的服务器,并且每个人都信任该实体。 而且,每笔交易都需要这个服务器的参与才能完成。 如果服务器暂时宕机,付款就会停止。 几年后,即 1988 年,Chaum 与另外两位密码学家 Fiat 和 Naor 合作提出了离线电子现金。 乍一看,这似乎是不可能的:如果您尝试在两个不同的商店使用相同的数字纸币或硬币,除非它们都连接到相同的支付网络或中央实体,否则它们怎么可能阻止这种情况?聪明的想法是不再担心防止双重支付,而是在事后当商家重新连接到银行服务器时专注于检测双重支付。 毕竟,这就是为什么即使天空中没有网络连接,您也可以在飞机上使用信用卡。 当航空公司能够重新连接到网络时,交易处理会稍后进行。 如果您的卡被拒绝,您将欠航空公司(或银行)钱。 如果您仔细想想,很多传统金融都是基于检测错误或损失的想法,然后尝试追回资金或惩罚肇事者。 如果您给某人写了一张个人支票,他们无法保证这笔钱确实存入您的帐户,但如果支票被退回,他们可以追查您。 可以想象,如果离线电子现金系统被广泛采用,法律体系将承认双重支付为犯罪行为。

Chaum、Fiat 和 Naor 检测双重支付的想法是一种复杂的密码学舞蹈。 从较高的层面来看,它所实现的目标是:发行给您的每一枚数字货币都对您的身份进行编码,但除了您之外没有人,甚至是银行,可以对其进行解码。 每次您花费硬币时,接收者都会要求您解码编码的随机子集,并且他们会保留此记录。 这种解码不足以让他们确定您的身份。 但如果您双花一枚硬币,最终两个接收者都会去银行兑换他们的纸币,当他们这样做时,银行可以将两条信息放在一起,以极高的概率完全解码您的身份。您可能想知道是否有人可以在这个系统中将您陷害为双花者。 假如您和我一起花了一枚硬币,然后我转身尝试双花它(没有向银行兑换它并获得带有我的身份编码的新硬币)。 这是行不通的——新的接收者会要求我解码一个随机子集,而这几乎肯定与您为我解码的子集不同,所以我将无法满足他们的解码请求。

多年来,许多密码学家研究了这种结构,并以各种方式对其进行了改进。 在 Chaum-Fiat-Naor 计划中,如果一枚硬币价值 100 美元,而您想购买仅花费 75 美元的东西,那么就无法将该硬币分成 75 美元和 25 美元。 您所能做的就是回到银行,将 100 美元的硬币兑现,然后索取 75 美元和 25 美元的硬币。 但 Okamo­to 和 Ohta 的一篇论文使用“Merkle 树”创建了一个确实允许您细分您的代币的系统。 Merkle 树也会出现在比特币中,我们将在第一章中见到它们。Chaum-Fiat-Naor 方案也为提高效率留下了很大的空间。 特别是,零知识证明在该方案中的应用(最著名的是 Brands;以及 Camenisch、Hohenberger 和 Lysyanskaya)非常富有成果——零知识证明也已应用于比特币,我们将在第 6 章中看到 。

但回到Chaum:他采纳了自己的想法并将其商业化。 他于 1989 年成立了一家名为 Dig­i­Cash 的公司,这可能是最早尝试解决在线支付问题的公司。 他们比我们刚才讨论的 FirstVir­tu­al 和 Cyber­Cash 等其他公司领先了大约五年。 Dig­i­cash 系统中的实际现金称为 Ecash,他们还有另一个称为 cyber­bucks 的系统。 有一些银行实际实施了它——美国有几家,芬兰至少有一家。 那是在 20 世纪 90 年代,早在比特币出现之前,这可能会让一些比特币爱好者感到惊讶,他们认为银行是技术恐惧、反创新的庞然大物。Ecash 基于 Chaum 的协议。 客户是匿名的,因此银行无法追踪他们如何花钱。 但电子现金的商人并不是匿名的。 他们必须在收到硬币后立即归还硬币,以便银行知道他们赚了多少钱、在什么时间等等。

图 2:DigiCash 的屏幕截图

图 2 显示了该软件的屏幕截图。 正如您所看到的,它显示了您的余额以及银行发行给您的所有硬币。 由于无法分割您的硬币,银行会向您发行一整套硬币,面额为一分、两分、四分等等——二的幂。 这样,您(或您的软件,代表您)始终可以选择一组硬币来支付交易的确切金额。

当您想要进行交易时,例如,如本例所示,您想要向非营利隐私组织 EPIC 捐款,您可以单击捐款链接,将您带到 Dig­i­cash 网站。 然后,这将打开一个返回到您的计算机的反向网络连接。 这意味着您的计算机必须能够接受传入连接并充当服务器。 您必须拥有自己的 IP 地址,并且您的 ISP 必须允许传入连接。 如果连接成功,ecash 软件将在您的计算机上启动,您将能够批准交易并汇款。

Chaum 拥有 Dig­i­cash 技术的多项专利,特别是其使用的盲签名方案。 这是有争议的,它阻止了其他人开发使用相同协议的电子现金系统。 但一群在所谓的“cypherpunks”邮件列表上闲逛的密码学家想要另一种选择。 Cyper­punks 是中本聪Satoshi Nakamoto后来向全世界宣布比特币的邮件列表的前身,这并非巧合。 我们将在第七章讨论­cypher­punks运动和比特币的根源。

Cyper­punks密码学家实现了一个名为 Mag­ic­Money 的 ecash 版本。 它确实侵犯了专利,但被宣传为仅供实验使用。 这是一个很有趣的软件。 该界面全部基于文本。 您可以通过电子邮件发送交易。 您只需将交易复制并粘贴到您的电子邮件中,然后将其发送给其他用户。 希望您能够使用 PGP 等端到端电子邮件加密软件来保护传输中的交易。Ben Lau­rie 提出了一项名为 Lucre 的提案,得到了许多其他人的贡献。 Lucre 试图用不受专利限制的替代方案来取代 ecash 中的盲签名方案,系统的其余部分基本相同。

伊恩·戈德堡 (Ian Gold­berg) 提出的另一项提议试图解决无法分割硬币进行找零的问题。 他的想法是,如果商人有一些硬币,他们可以给你寄回硬币,这样如果你没有确切的零钱,你可能会多付钱,然后你会得到一些硬币。 但请注意,这会带来匿名问题。 正如我们之前看到的,在 ecash 中,发送者是匿名的,但商家不是。 当商家退回现金时,从技术上讲,他们是发送者,所以他们是匿名的。 但是,作为必须将这笔现金退还给银行的人,您并不是匿名的。 在不破坏试图购买商品的用户的匿名性的情况下,无法设计这个系统。 因此,戈德堡提出了一个提案,其中有不同类型的硬币可以允许这些交易发生,允许你找回零钱,并且仍然保持你的匿名性。

那么为什么 Dig­i­Cash 会失败呢? Dig­i­Cash 的主要问题是很难说服银行和商家采用它。 由于接受电子现金的商家不多,用户也不想要它。 更糟糕的是,它不支持用户到用户的交易,或者至少不是很好。 它确实以用户到商家的交易为中心。 因此,如果商家不参与,就没有其他方法来激发人们对该系统的兴趣。 所以最终,DigiCash 输了,而信用卡公司赢了。

顺便说一句,比特币允许用户对商家和用户对用户的交易。 事实上,该协议没有与用户概念分开的商家概念。 对用户间交易的支持可能促成了比特币的成功。 从一开始就与您的比特币有关:将其发送给其他用户,而社区则试图争取对比特币的支持并让商家接受它。

在公司的后期,DigiCash 还尝试了防篡改硬件,以试图防止双花,而不仅仅是检测它。 在这个系统中,你会得到一个小型硬件设备,通常称为钱包或某种卡。 该设备会记录你的余额,当你花钱时,余额会减少;如果你在卡上充值更多,余额就会增加。 该设备的要点在于,不应该有任何物理或数字方式进入并篡改其计数器的方法。 因此,如果计数器为零,则该卡将无法消费,直到重新加载为止。

还有许多其他公司拥有基于防篡改硬件的电子现金系统。 Dig­i­Cash 后来与一家位于欧洲、名为 CAFE 的公司合作。 围绕这一想法成立的另一家公司名为 Mondex,后来被万事达卡收购。 Visa 也有自己的变体,称为 VisaCash。

图 3:Mondex 系统,显示用户卡和钱包。

图 3 显示了 Mon­dex 系统的用户端。 有一张智能卡和一个钱包单元,您可以在其中任何一个中充值现金。 如果你想进行用户与用户之间的货币交换,给予者用户首先将他们的卡放入钱包,然后将卡上的钱转移到钱包中。 然后收款人会将他们的卡插入钱包,然后你将钱转移到第二张卡上。 这是一种交换数字现金的方式,而且是匿名的。

Mon­dex 在许多社区试用了他们的技术。 有一个社区恰好是离我长大的地方很近的一个城市:安大略省圭尔夫市。 您可能已经猜到它并没有真正流行起来。 Mon­dex 卡的一个主要问题是它们就像现金 — 如果您丢失或被盗,钱就会消失。 更糟糕的是,如果卡出现某种故障,如果读卡器无法读取它,则无法确定该卡是否有余额。 在这些情况下,Mondex 通常会承担成本。 他们会假设该卡已加载并补偿用户损失的钱。 当然,这可能会花费公司很多钱。

此外,钱包又慢又笨重。 使用信用卡或现金支付要快得多。 零售商讨厌拥有多个支付终端; 他们只想要一张信用卡。 所有这些因素共同推动了 Mon­dex 的发展。

然而,这些卡是智能卡,这意味着它们上面有小型微控制器,并且该技术已被证明是成功的。 如今,在许多国家,包括我居住的加拿大,每张信用卡和每张借记卡现在都采用了智能卡技术。 但它有不同的用途。 它不是用来防止双重支付的——这个问题不会出现,因为它不是基于现金的技术。 银行(而不是您的卡)会跟踪您的余额或可用信用额度。 相反,该芯片用于身份验证,即证明您知道与您的帐户关联的 PIN。 但早在这项技术被银行业广泛采用之前,Mondex 就已经开始使用它了。

凭空造钱

在 Dig­i­Cash 系统中,如果你有一个价值 100 美元的数字现金物品,是什么让它真的价值 100 美元呢?答案很简单:为了获得价值 100 美元的电子现金,你必须从银行账户中取出 100 美元,然后交给发行电子现金的银行。但是,关于如何做到这一点,有很多不同的建议,不同的公司也有不同的做法。有一种牵强附会的可能性:如果某个国家的政府真的授权服务机构铸造数字货币,凭空创造出新的现金呢?这就是 Net­Cash 背后的想法,尽管它从未超越提案阶段。e‑Gold 使用的另一种系统是把一堆黄金放在金库里,然后发行与黄金等值的数字现金。另一家名为 Digigold 的公司并非完全由黄金支持,而是拥有部分储备。

所有这些想法最终都将数字现金的价值与美元或商品挂钩。如果美元升值或贬值,你持有的数字货币的价值也会随之变化。一种截然不同的可能性是让数字货币成为自己的货币,其发行和估值独立于任何其他货币。

要创造一种可能获得实际价值的自由浮动数字货币,就必须设计一种稀缺的东西。事实上,稀缺性也是黄金或钻石被用作货币支撑的原因。在数字领域,实现稀缺性的一种方法是设计一个系统,使铸币需要解决一个计算问题(或 “谜题”),而这个问题需要一段时间才能破解。这就是比特币 “挖矿 “的过程,我们将在第 5 章中介绍。

计算谜题的解决方案可以是具有一定价值的数字对象,这一基本理念由来已久。早在 1992 年,密码学家 Dwork 和 Naor 就首次提出了这一想法,并将其作为解决垃圾电子邮件的潜在方案。如果您每次发送电子邮件时,您的计算机都必须解决一个只需几秒钟就能解决的谜题呢?为了执行这一要求,如果你没有附上计算谜题的解法,收件人的电子邮件程序就会直接忽略你的电子邮件。对于普通用户来说,这并不会成为发送邮件的障碍,因为你发送邮件的频率并不高。但如果你是一个垃圾邮件发送者,你要同时发送数千或数百万封电子邮件,解决这些计算难题就会变得令人望而却步。亚当-巴克(Adam Back)后来于 1997 年在一项名为 “哈希现金”(Hashcash)的提案中独立发现了类似的想法。

这些计算谜题需要具备一些特定属性,才能对垃圾邮件起到有效的威慑作用。首先,垃圾邮件发送者不可能解开一个谜题,并将谜底附在他发送的每封邮件上。为了确保这一点,谜题应该针对具体的电子邮件:它应该取决于发件人和收件人、电子邮件的内容以及发送的大致时间。其次,收件人应能轻松查看谜题的解答,而无需重复解题过程。第三,每道谜题都应完全独立于其他谜题,即解开一道谜题不会减少解开其他谜题所需的时间。最后,由于硬件会随着时间的推移而不断改进,解任何特定的计算谜题都会变得更快、更便宜,因此接收者应该能够调整他们所接受的谜题解法的难度。使用加密哈希函数设计谜题可以实现这些特性,我们将在第 1 章对此进行研究。

比特币使用的计算谜题与 Hash­cash 基本相同,只是略有改进。不过,比特币比哈希现金做得更多–毕竟,解释比特币需要一整本书!我之所以提到这一点,是因为 Hash­cash 的发明者 Adam Back 说过:“比特币是 Hash­cash 的扩展,具有通货膨胀控制功能”。我觉得这有点言过其实了。这有点像说 “特斯拉只是一个装在轮子上的电池”。

与密码学中的任何好点子一样,计算谜题也有许多变体,旨在实现略有不同的特性。Rivest 和 Shamir(RSA 密码系统中的 R 和 S)提出了一个建议。请注意,在 Hash­cash 中,你解决多个谜题的成本只是各个谜题的成本之和。但这与政府铸币的成本结构不同。如果你想一想纸币的防伪技术,那么购买所有设备、创建防伪功能等初始成本都是巨大的。但一旦他们完成了这些工作,成本就会下降,印一张钞票还是一百张钞票也就不那么重要了。换句话说,铸造纸币的固定成本很高,但边际成本却很低。里韦斯特和沙米尔希望设计出能够模仿这些特性的计算谜题,这样,铸造第一枚硬币就会面临巨大的计算挑战,但铸造后续硬币的成本却会低很多。他们的提议也利用了哈希函数,但方式不同。我们不会深入探讨他们的解决方案的细节,但他们试图解决的问题在高层次上是非常有趣的。

为什么 Hash­cash 从未达到其防止垃圾邮件的预期目的?也许垃圾邮件并不是一个足以解决的大问题。对大多数人来说,垃圾邮件是一种困扰,但并不是他们想要花费计算周期来对付的东西。如今,我们已经有了垃圾邮件过滤器,可以很好地阻止垃圾邮件进入我们的收件箱。也有可能 Hash­cash 无法真正阻止垃圾邮件发送者。特别是,如今大多数垃圾邮件发送者都使用 “僵尸网络 “发送垃圾邮件,即使用恶意软件控制他人计算机的大型网络。他们完全可以利用这些电脑来获取 Hashcash。尽管如此,使用计算谜题来限制资源访问的想法仍在流传。你可以在一些取代网络协议的提案中看到这种想法,比如 Min­i­maLT。

在分类账中记录所有信息

比特币的另一个关键组成部分是区块链:一个安全记录所有比特币交易的账本。区块链背后的想法也很古老,可以追溯到哈伯和斯托内塔 1991 年的一篇论文。他们提出的是一种对数字文件进行安全时间戳的方法,而不是数字货币计划。打上时间戳的目的是提供一个文档产生时间的大致概念。更重要的是,时间戳可以准确地传达这些文件的创建顺序:如果一个文件比另一个文件先创建,时间戳就会反映出这一点。安全属性要求文档的时间戳不能事后更改。

在 Haber 和 Stor­net­ta 的方案中,有一个时间戳服务,客户向其发送文档以进行时间戳。服务器收到文件后,会在文件上标注当前时间以及指向前一个文件的链接或指针,并用这些信息签发 “证书”。指针是一种特殊类型的指针,它链接的是一段数据而不是一个位置。这意味着,如果相关数据发生变化,指针就会自动失效。在第 1 章中,我们将学习如何使用散列函数创建这种指针。

这样做的目的是,每个文档的证书都能确保前一个文档内容的完整性。事实上,你可以递归地应用这个论点:每份证书基本上都固定了文档和证书在此之前的整个历史。如果我们假设系统中的每个客户都至少记录了几份证书–他们自己文档的证书,以及前一份和后一份文档的证书–那么参与者就能共同确保历史记录不会在事后被更改。特别是,文件的相对排序会被保留下来。

图 4:链接时间戳。要为文档创建证书,时间戳服务器会包含一个指向上一个文档证书的哈希指针和当前时间,并对这三个数据元素进行签名。

后来的一篇论文提出了一种提高效率的方法:我们可以将文档收集成块,然后以链的形式将块链接在一起,而不是单个链接。在每个区块内,文档将再次链接在一起,但链接方式是树状结构而不是线性结构。这就减少了验证特定文档是否出现在系统历史上某个特定时间点所需的检查量。从外观上看,这种混合方案如图 5 所示。

图 5:高效链接时间戳。箭头表示哈希指针,垂直虚线表示时间间隔。

这种数据结构构成了比特币区块链的骨架,我们将在第 3 章中看到。比特币以一种微妙但重要的方式对其进行了改进:使用哈希算法(Hashcash-esque)来延迟新区块添加到区块链上的速度。这一修改对比特币的安全模型有着深远而有利的影响。比特币不再需要受信任的服务器;取而代之的是,事件由被称为 “矿工 “的一系列不受信任的节点记录。每个矿工都对区块进行跟踪,而不是依靠普通用户。任何人都可以成为矿工,通过解决计算难题来创建区块。比特币还摆脱了签名,只依靠哈希指针来确保数据结构的完整性。最后,实际的时间戳在比特币中并不重要,系统的意义在于以防篡改的方式记录交易的相对顺序。事实上,比特币区块的创建并没有固定的时间表。该系统确保平均每 10 分钟创建一个新区块,但连续区块之间的时间差异很大。

从本质上讲,比特币结合了利用计算谜题来规范创造新货币单位的想法和保护时间戳来记录交易账簿并防止重复消费的想法。早些时候,也有一些不太成熟的提案将这两种想法结合在一起。第一种被称为 b‑货币,由戴伟(Wei Dai)于 1998 年提出。在 b 型货币中,任何人都可以使用类似哈希卡的系统创造货币。这里有一个点对点网络,有点像比特币。每个节点都有一个账本,但它不像比特币区块链那样是一个全球账本。每个节点都有自己的账本,记录它认为每个人的余额。

尼克-萨博(Nick Szabo)提出的另一个类似方案,名为 Bitgold。Szabo说,他早在 1998 年就有了 Bit­gold 的想法,但直到 2005 年才在博客上发表。我之所以提到这一点,是因为《纽约时报》的记者纳撒尼尔-波普尔(Nathaniel Popper)发表了一个小阴谋论,他写了一本非常好的关于比特币历史的书。Popper指出,在中本聪发布比特币白皮书之后,博客文章的时间戳被更改了,因此 Bit­gold 的提案看起来像是在比特币发布两个月之后写的。Popper 和许多其他观察家一样,认为 Szabo 可能就是中本聪,他认为更改时间戳是 Szabo/Satoshi 试图掩盖他在知道比特币之前就发明了 Bit­gold 这一事实的证据。

这种解释的问题在于,如果你真正读过博文的内容,Szabo 非常清楚自己在 1998 年就有了这个想法,而且他并没有试图改变这些日期。因此,更合理的解释是,他只是在比特币普及了类似的想法之后,把这篇文章放到了博客的顶端,以确保人们知道他之前的提议。

比特币与 b‑货币和 Bit­gold 有几个重要区别。在这些方案中,计算谜题被直接用来铸造货币。任何人都可以解开谜题,谜题本身就是货币单位。在比特币中,谜题本身并不构成货币。它们被用来保证区块链的安全,只是在有限的时间内间接地铸造货币。其次,b‑money 和 Bit­gold 依赖于时间戳服务,这些服务对货币的创造或转移进行签名。正如我们所看到的,比特币不需要可信的时间戳,它只是试图保持区块和交易的相对顺序。

最后,在 b‑money 和 Bit­gold 中,如果服务器或节点之间对分类账存在分歧,那么没有明确的解决方法。在两位作者的著作中,似乎都隐含着让多数人来决定的意思。但是,由于任何人都可以建立一个节点–或者隐藏在不同身份下的上百个节点–这些机制并不十分安全,除非有一个中央看门人来控制网络的进入。相比之下,在比特币中,攻击者要改变历史,就必须以比其他参与者总和更快的速度解决计算难题。这不仅更安全,还可以量化系统的安全性。

B‑money 和 Bit­gold 都是非正式的提议–b‑money 是邮件列表上的一个帖子,Bitgold 是一系列博客帖子。这两个项目都没有启动,甚至没有直接实施。与比特币白皮书不同,它们没有完整的规范或任何代码。这些提案都是对一些可能解决也可能无法解决的问题的轻描淡写。首先,正如我们已经提到的,如何解决关于分类账的分歧。另一个问题是如何确定计算难题的难度,以便铸造一个货币单位。由于在计算能力固定的情况下,硬件的价格往往会随着时间的推移而大幅降低,因此比特币采用了一种定期自动调整谜题难度的机制。B‑money 和 Bit­gold 则没有这样的机制,这可能会导致一些问题,因为如果创造新币变得非常容易,那么这些币就可能失去价值。

关于中本聪的提示

你可能知道中本聪是比特币创造者使用的假名。虽然他的身份仍然是个谜,但他在比特币的早期进行了广泛的交流。让我们利用这一点来探究一些问题,比如他是什么时候开始研究比特币的,他在多大程度上受到了我们之前研究过的想法的影响,以及是什么激励了他。

中本聪说他是在 2007 年 5 月左右开始编写比特币代码的。我相信他的话;他是匿名的,这并不是他撒谎的理由。他在 2008 年 8 月注册了 bitcoin.org 域名。当时,他开始向一些他认为可能对这个提议感兴趣的人发送私人邮件。稍后,在 2008 年 10 月,他公开发布了一份描述比特币协议的白皮书,不久之后,他又发布了比特币的初始代码。在此期间,他在论坛上发布了大量信息,与许多人发送电子邮件,并回应了人们的关切。在编程方面,他提交了代码补丁。他与其他开发人员一起维护源代码,修复出现的问题。到 2010 年 12 月,其他人慢慢接管了项目的维护工作,他也不再与他们交流。

我一直把中本聪称为 “他”,但我没有特别的理由相信中本聪是个男人而不是女人。我只是用了男性代词,因为中本聪是个男性名字。我也一直把他称作一个人。有一种理论认为,中本聪可能是一个人的集合。我不相信这个理论–我认为中本聪可能只是一个人。原因是,如果我们看一下以中本聪为化名的整个在线互动,如果我们想一想中本聪花了两年时间回复电子邮件和修补代码,就很难想象这可能是多人共享用户账户和密码,以相似的风格和相似的声音回复,并确保他们不会相互矛盾。至少中本聪的这部分活动是由一个人完成的,这似乎是一个简单得多的解释。

此外,从他的著作和补丁中可以清楚地看出,这个人了解比特币的全部代码库及其所有设计方面。因此,我们可以非常合理地假设,最初的代码库和白皮书也是同一个人写的。最后,中本聪可能在最初的设计中得到了帮助。然而,在比特币发布之后,我们可以亲眼看到,中本聪很快就把他从其他贡献者那里得到的帮助归功于自己。如果中本聪得到了其他人的帮助,那么他误导我们说是他自己发明的东西就不符合他的性格了。

接下来,我们可能会问自己:“中本聪对ecash的历史了解多少?” 为了更好地理解这个问题,我们可以先看看他在白皮书中引用的内容,以及比特币网站早期版本中的参考资料。在白皮书中,他引用了一些关于基础密码学和概率论的论文。他还引用了我们之前看到的时间戳工作,由于相似之处如此明显,我们很自然地认为他是根据这些参考文献来设计区块链的。他还引用了 Hash­cash 方案,该方案的计算谜题与比特币中使用的谜题非常相似。他还提到了 b‑money。后来,他又在网站上提到了 Bit­gold 以及 Hal Finney 提出的重复使用计算谜题的方案。

但是,如果我们看一下早期与中本聪通信的人公开的往来电子邮件,我们会发现,b‑money 提议实际上是在亚当-贝克(Adam Back)的建议下事后添加的。中本聪随后给创建了 b‑money的戴伟发了电子邮件,显然,是戴伟告诉他 Bit­gold 的。因此,这些建议并不是最初设计的灵感来源。后来,他与哈尔-芬尼(Hal Finney)有过很多通信,这也是他引用芬尼作品的一个合理解释,至少在网站上是这样。

由此看来,在创建比特币时,哈希现金和时间戳是中本聪唯一知道或认为与ecash历史相关的东西。然而,在他知道了 b‑money 和 Bit­gold 之后,他似乎意识到了它们的相关性。2010 年年中,维基百科上关于比特币的文章被维基百科的编辑标记为删除,因为他们认为这篇文章不值得关注。于是,中本聪和其他人讨论了如何措辞才能让维基百科接受这篇文章。为此,中本聪建议这样描述比特币:“比特币是1998年戴伟在Cypherpunks上提出的b-money提案和尼克-萨博的Bitgold提案的实现”。因此,中本聪认为把比特币定位为这两个想法的延伸或者是这两个先前系统的实现是对比特币工作原理的很好解释。

但是,其他的东西–Chaumian 电子现金计划和我们研究过的信用卡提案–又是怎么回事呢?中本聪在设计比特币的时候知道这些历史吗?这很难说。他没有任何迹象表明他知道这些历史,但也很有可能他没有提到这些,因为这与比特币无关。比特币使用的是一种完全不同的去中心化模式,因此没有必要纠结于那些已经失败的旧的中心化系统。

中本聪本人在比特币论坛上发表的一篇文章中顺便提到了Chau­mi­an ecash,从而表明了这一点。在写到另一个名为 opencoin.org 的提议时,他指出,他们似乎 “在谈论旧的 Chau­mi­an 中央铸币厂的东西,但也许只是因为那是唯一可用的东西。也许他们会对新的方向感兴趣。很多人都认为电子货币是一项失败的事业,因为自 20 世纪 90 年代以来,很多公司都失败了。我希望大家明白,只是这些系统的中央控制性质注定了它们的失败。我认为这是我们第一次尝试一种去中心化的、非基于信任的系统”。这让我们很清楚中本聪对早期提议的看法,特别是他认为比特币有什么不同。比特币的去中心化的确是一个决定性的特征,它与我们所看到的几乎所有东西都不同。

中本聪的另一句有趣的话表明,他可能不是一名学者。大多数学术研究人员在构建系统之前,都会思考各种想法并立即写下来。中本聪说,他采取了相反的方法: “我实际上是倒着做比特币的。我必须先写出所有代码,然后才能说服自己,我可以解决每一个问题,然后我再写论文。我认为,比起写一份详细的说明书,我能够更快地发布代码”。

由于人们对中本聪有些误解,值得一提的是,他和其他人一样也犯过错误,他并不是一个完美的未来预言家。比特币的原始代码和设计中都存在错误和值得商榷的设计选择。例如,有一个将比特币发送到 IP 地址的功能从未流行起来,现在回想起来,这是个坏主意。当他描述比特币的用处时,他的设想都是围绕着在互联网上使用比特币的想法。当然,这种用途是比特币的核心,但不是唯一的。比如说,他并没有提出去咖啡店用比特币支付咖啡费用的设想。

根据我们对数字现金历史的了解,我们可以问自己的最后一个问题是:“为什么中本聪保持匿名?可能的原因有很多。首先,可能只是为了好玩。许多人匿名写小说,还有像班克斯这样的涂鸦艺术家也保持匿名。事实上,在中本聪当时参与的社区,即 Cypher­punk 社区和密码学邮件列表中,匿名发帖是很常见的做法。

另一方面,中本聪的选择背后可能存在法律问题。Liberty Reserve 和 e‑Gold 这两家美国公司因洗钱而陷入法律纠纷。2006 年,Liberty Reserve 的创始人之一逃离了美国,因为他担心自己会被控洗钱。而 E‑Gold 的创始人则留在了美国,其中一人还被起诉,并最终认罪。就在中本聪建立比特币网站并开始通过电子邮件向人们宣传他的提议之前,他就已经认罪了。尽管如此,已经有无数人发明了生态现金系统,没有人害怕法律影响或选择匿名。因此,这可能是原因,也可能不是原因。

值得一提的还有,ecash 的某些方面已经申请了专利,“赛弗朋克 “运动的成员们担心实施e­cash 系统会受到这些专利的影响。事实上,在 Cypher­punks 邮件列表中,有一个帖子建议由一群匿名的程序员来实现 ecash,这样如果有人起诉,他们就无法找到程序员。鉴于比特币的设计与ecash的不同,很难认为比特币会违反ecash的专利,也许中本聪是格外谨慎。又或者,他只是受到了来自密码朋克社区的匿名编码员想法的启发。

最后一个经常被提到的原因是个人安全。我们知道,中本聪早期挖矿挖出了很多比特币,由于比特币的成功,这些比特币现在价值不菲。我认为这是一个合理的理由。毕竟,选择匿名不是一次就能决定的,而是要持续不断地做。尽管如此,这可能并不是中本聪最初的理由。中本聪第一次使用中本聪这个名字时,他甚至还没有发布比特币的白皮书或代码库,很难想象他会想到比特币会如此成功。事实上,在比特币早期的很多时候,中本聪对比特币的前景持乐观但谨慎的态度。他似乎明白,以前的许多努力都失败了,比特币也可能会失败。

结束语

如果考虑到所有尝试比特币的企业都失败了,那么比特币的成功是非常了不起的。比特币有几项显著的创新,包括区块链和支持用户对用户交易的去中心化模式。它为用户提供了实际有用但并不完美的匿名性。我们将在第 6 章详细介绍比特币的匿名性。从某种意义上说,比特币的匿名性弱于 Dig­i­Cash 的匿名性,但从另一个意义上说,比特币的匿名性更强。这是因为在 Dig­i­Cash 中,只有汇款人而不是商家保持匿名性。比特币给发送者和商家(无论是用户还是商家)提供了相同程度的匿名性。

最后,让我通过我们之前研究过的系统,总结一下我们可以从比特币中学到的一些经验。首先是不要放弃问题。人们在开发数字现金的过程中失败了 20 年,但这并不意味着就没有一个可行的系统。第二是要愿意妥协。如果你想要完美的匿名性或完美的去中心化,你可能需要在设计的其他方面做一些改进。回过头来看,比特币似乎做出了正确的妥协。它稍微降低了匿名性,并要求参与者在线并连接到点对点网络,但这最终被用户所接受。

最后一课是通过数字取得成功。比特币能够建立起一个由热情的用户和愿意为开源技术做出贡献的开发者组成的社区。这与之前的数字现金尝试明显不同,之前的数字现金通常是由一家公司开发的,唯一的技术拥护者就是公司本身的员工。比特币目前的成功在很大程度上要归功于充满活力的支持社区,他们推动了这项技术的发展,让人们使用它,并让商家采用它。

延伸阅读

An acces­si­ble overview of dig­i­tal cash schemes focused on prac­ti­cal issues:

P. Wayn­er. Dig­i­tal Cash: com­merce on the net (2nd ed). Mor­gan Kauf­mann, 1997.

A cryp­to­graph­i­cal­ly-ori­ent­ed overview of e‑cash sys­tems (Chap­ter 1) and micro­pay­ments (Chap­ter 7):

B. Rosen­berg (ed.) Hand­book of Finan­cial Cryp­tog­ra­phy and Secu­ri­ty. CRC Press, 2011.

Although not Chaum’s ear­li­est paper on e‑cash, this is arguably the most inno­v­a­tive, and it formed a tem­plate repli­cat­ed by many oth­er papers:

D. Chaum, A. Fiat, M. Naor. Untrace­able elec­tron­ic cash. CRYPTO 1998.

Many papers improved the effi­cien­cy of Chaum-Fiat-Naor using mod­ern cryp­to­graph­ic tech­niques, but arguably the most sig­nif­i­cant is:

J. Camenisch, S. Hohen­berg­er, A. Lysyan­skaya, Com­pact e‑cash. The­o­ry and Appli­ca­tions of Cryp­to­graph­ic Tech­niques, 2005

Some prac­ti­cal secu­ri­ty obser­va­tions on the finan­cial indus­try and pro­pos­als, includ­ing Mon­dex:

R. Ander­son. Secu­ri­ty Engi­neer­ing (2nd ed). Wiley, 2008.

An overview of the imple­men­ta­tion of Chaum’s ecash pro­pos­al:

B. Schoen­mak­ers. Basic secu­ri­ty of the ecash pay­ment sys­tem. State of the Art in Applied Cryp­tog­ra­phy, 1997.

Two papers cit­ed by Satoshi Nakamo­to in the Bit­coin whitepa­per that are inte­gral to Bitcon’s design:

A. Back. Hash­cash — A Denial of Ser­vice Counter-Mea­sure, Online, 2002. S. Haber, W. S. Stor­net­ta. Secure names for bit­strings. CCS, 1997.

More Details