diff --git a/01_history/README.md b/01_history/README.md index 629790e..4e414ce 100644 --- a/01_history/README.md +++ b/01_history/README.md @@ -6,6 +6,6 @@ 区块链(Blockchain)结构首次为人关注,源于 2009 年初上线的比特币(Bitcoin)开源项目。从记账科技数千年的演化角度来看,区块链实际上是记账问题发展到分布式场景下的天然结果。 -本章将从记账问题的历史讲起,剖析区块链和分布式账本技术的来龙去脉。通过介绍比特币项目探讨区块链思想的诞生过程,并初步剖析区块链技术潜在的商业价值。 +本章将从记账问题的历史讲起,剖析区块链和分布式账本技术的来龙去脉。通过介绍比特币项目探讨区块链的诞生过程,并初步剖析区块链技术潜在的商业价值。 通过阅读本章内容,读者可以了解到区块链思想和技术的起源和背景,以及在商业应用中的巨大潜力。 diff --git a/01_history/business.md b/01_history/business.md index 99ba1de..38884ad 100644 --- a/01_history/business.md +++ b/01_history/business.md @@ -13,14 +13,14 @@ 随之带来的业务特性将可能包括: * 可信任性:区块链技术可以提供天然可信的分布式账本平台,不需要额外第三方中介机构参与; -* 降低成本:跟传统技术相比,区块链技术可能通过自动化合约执行带来更快的交易,同时降低维护成本; +* 降低成本:与传统技术相比,区块链技术可能通过自动化合约执行带来更快的交易,同时降低维护成本; * 增强安全:区块链技术将有利于安全、可靠的审计管理和账目清算,减少犯罪风险。 -区块链并非凭空诞生的新技术,更是多种技术演化到一定程度后的产物,因此,其商业应用场景也跟促生其出现的环境息息相关。对于基于数字方式的交易行为,区块链技术能潜在地降低交易成本、加快交易速度,同时能提高安全性。笔者认为,**能否最终提高生产力,将是一项技术能否被实践接受的关键**。 +区块链并不是凭空诞生的新技术,而是多种技术演化到一定程度后的产物,因此,其商业应用场景也跟促生其出现的环境息息相关。对于基于数字方式的交易行为,区块链技术能潜在地降低交易成本、加快交易速度,同时能提高安全性。笔者认为,**能否最终提高生产力,将是一项技术能否被实践接受的关键**。 -Gartner 在 2017 年的报告《Forecast: Blockchain Business Value, Worldwide, 2017-2030》中预测:“区块链带来的商业价值在 2025 年将超过 1760 亿美金,2030 年将超过 3.1 万亿美金(the business value-add of blockchain will grow to slightly more than $176 billion by 2025, and then it will exceed $3.1 trillion by 2030)”。IDC 在 2018 年的报告《Worldwide Semiannual Blockchain Spending Guide》中预测,到 2021 年全球分布式账本科技相关投资将接近百亿美元,五年内的复合增长率高达 81.2%。 +Gartner 在 2017 年的报告《Forecast: Blockchain Business Value, Worldwide, 2017-2030》中预测:“区块链带来的商业价值在 2025 年将超过 1760 亿美金,2030 年将超过 3.1 万亿美金(the business value-add of blockchain will grow to slightly more than $176 billion by 2025, and then it will exceed $3.1 trillion by 2030)”。IDC 在 2018 年的报告《Worldwide Semiannual Blockchain Spending Guide》中预测,到 2021 年全球分布式记账科技相关投资将接近百亿美元,五年内的复合增长率高达 81.2%。 -目前,区块链技术已经得到了众多金融机构和商业公司的关注,包括大量金融界和信息技术界的领军性企业和团体。典型企业组织如下所列(排名不分先后)。 +目前,区块链技术已经得到了众多金融机构和商业公司的关注,包括大量金融界和信息技术界的领军性企业和团体。典型企业和组织如下所列(排名不分先后)。 * 维萨国际公司(VISA International) * 美国纳斯达克证券交易所(Nasdaq Stock Exchange) @@ -42,8 +42,8 @@ Gartner 在 2017 年的报告《Forecast: Blockchain Business Value, Worldwide, * 埃森哲公司(Accenture Corporation) * 脸书公司(Facebook Incorporated) -实际上,所有跟信息、价值(包括货币、证券、专利、版权、数字商品、实际物品等)、信用等相关的交换过程,都将可能从区块链技术中得到启发或直接受益。但这个过程绝不是一蹴而就的,可能需要较长时间的探索和论证。 +实际上,区块链可以有效地实现大规模信息和个体的自主化连接。因此,所有与信息、价值(包括货币、证券、专利、版权、数字商品、实际物品等)、信用等相关的交换过程,都将可能从区块链技术中得到启发或直接受益。但这个过程绝不是一蹴而就的,需要长时间的探索和论证。 ![区块链影响的交换过程](_images/application_circle.png) -本书将在后续章节中通过具体的案例来讲解区块链的多个典型商业应用场景。 \ No newline at end of file +本书将在后续章节中通过具体的案例来讲解区块链的多个典型商业应用场景。 diff --git a/01_history/dlt_problem.md b/01_history/dlt_problem.md index 318c7c1..3a2b9a9 100644 --- a/01_history/dlt_problem.md +++ b/01_history/dlt_problem.md @@ -1,16 +1,16 @@ ## 分布式记账与区块链 -随着最前沿的信息科技成果不断融入金融行业,以区块链(Blockchain)为基础的分布式账本科技(Distributed Ledger Technology,DLT)崭露头角,并在部分场景(如跨境支付)中得到探索和落地。从最早的简单账本到复式账本,再到数字化账本,以及目前正在探索的分布式账本,账本科技的每次突破都会引发金融领域的重要革新,也往往对社会生活的各个方面进一步产生阶段性的影响。 +金融行业是对前沿信息科技成果最敏感的行业之一。特别是对记账科技,其每次突破都会引发金融领域的重要革新,进而对社会生活的各个方面产生阶段性的影响。那么,从技术层面看,区块链到底解决了什么记账难题呢? -### 从分布式记账问题说起 +### 分布式记账的难题 -分布式记账问题由来已久。为了正常进行商业活动,参与者需要找到一个多方均能信任的第三方来负责记账,确保交易记录的准确。然而,随着商业活动的规模越来越大,商业过程愈加动态和复杂,很多场景下难以找到符合要求的第三方记账方(例如供应链领域动辄涉及来自数十个行业的数百家参与企业)。这就需要交易各方探讨在分布式场景下进行协同记账的可能性。 +分布式记账由来已久。为了正常进行商业活动,参与者需要找到一个多方均能信任的第三方来负责记账,确保交易记录的准确。然而,随着商业活动的规模越来越大,商业过程愈加动态和复杂,很多场景下难以找到符合要求的第三方记账方(例如,供应链领域动辄涉及来自数十个行业的数百家参与企业)。这就需要交易各方探讨在分布式场景下进行协同记账的可能性。 实际上,可以很容易设计出一个简单粗暴的分布式记账结构,如下图所示方案(一)。多方均允许对账本进行任意读写,一旦发生新的交易即追加到账本上。这种情况下,如果参与多方均诚实可靠,则该方案可以正常工作;但是一旦有参与方恶意篡改已发生过的记录,则无法确保账本记录的正确性。 ![方案(一):简单分布式记账结构](_images/dlt-01.png) -为了防止有参与者对交易记录进行篡改,需要引入一定的验证机制。很自然地,可以借鉴信息安全领域的数字摘要(Digital Digest)技术,从而改进为方案(二)。每次当有新的交易记录被追加到账本上时,参与各方可以使用 Hash 算法对完整的交易历史计算数字摘要,获取当前交易历史的“指纹”。此后任意时刻,每个参与方都可以对交易历史重新计算数字摘要,一旦发现指纹不匹配,则说明交易记录被篡改过。同时,通过追踪指纹改变位置,可以定位到被篡改的交易记录。 +为了防止有参与者对交易记录进行篡改,需要引入一定的验证机制。很自然,可以借鉴信息安全领域的数字摘要(Digital Digest)技术,从而改进为方案(二)。每次当有新的交易记录被追加到账本上时,参与各方可以使用 Hash 算法对完整的交易历史计算数字摘要,获取当前交易历史的“指纹”。此后任意时刻,每个参与方都可以对交易历史重新计算数字摘要,一旦发现指纹不匹配,则说明交易记录被篡改过。同时,通过追踪指纹改变位置,可以定位到被篡改的交易记录。 ![方案(二):带有数字摘要验证的分布式记账](_images/dlt-02.png) @@ -20,7 +20,7 @@ ![方案(三):带有数字摘要验证的可扩展的分布式记账](_images/dlt-03.png) -实际上,读者可能已经注意到,方案(三)中的账本结构正是一个区块链结构(如下图所示)。可见,从分布式记账的基本问题出发,可以自然推导出区块链结构,这也说明了在分布式场景下的记账问题中,区块链结构是一个简洁有效的天然答案。 +实际上,读者可能已经注意到,方案(三)中的账本结构正是一个区块链结构(如下图所示)。可见,从分布式记账的基本问题出发,可以自然推导出区块链结构,这也说明了**对于分布式记账问题,区块链结构是一个简洁有效的天然答案**。 ![区块链结构](_images/blockchain.png) @@ -28,15 +28,15 @@ ### 区块链的三次热潮 -从比特币诞生之日算起,区块链已在全球掀起了三次热潮。 +区块链结构的首次大规模应用是在比特币项目。从比特币项目诞生之日算起,区块链已在全球掀起了三次热潮。 ![区块链的三次热潮](_images/3-hops.png) -第一波热潮出现在 2013 年左右。比特币项目上线后,很长一段时间里并未获得太多关注。直到比特币价格发生增长,各种加密货币项目纷纷出现,隐藏在其后的区块链结构才首次引发大家的兴趣。2014 年起,区块链这个术语开始频繁出现,但更多集中在加密货币和相关技术领域; +第一波热潮出现在 2013 年左右。比特币项目上线后,很长一段时间里并未获得太多关注。直到比特币价格发生增长,各种加密货币项目纷纷出现,隐藏在其后的区块链结构才首次引发大家的兴趣。2014 年起,区块链这个术语开始频繁出现,但更多集中在加密货币和相关技术领域。 第二波热潮出现在 2016 年前后。以区块链为基础的分布式账本技术被证实在众多商业领域存在应用价值。2015 年 10 月《经济学人》封面文章《信任机器》中,正式指出区块链在构建分布式账本平台中的重要作用,促使更多实验性应用出现。下半年更是出现了“初始代币发行(Initial Coin Offering,ICO)”等新型融资募集形式。这一时期,区块链技术自身也有了发展和突破。2015 年 7 月底,以太坊(Ethereum)开源项目正式上线。该项目面向公有场景针对比特币项目的缺陷进行了改善,重点在于对通用智能合约的支持,同时优化了性能和安全性。 -2015 年底,Linux 基金会牵头发起了超级账本(Hyperledger)开源项目,希望联合各行业的力量构造开放、企业级的分布式账本技术生态。与此前的开源项目相比,超级账本项目主要面向联盟链场景,关注企业在权限管理、隐私保护和安全性能等方面的核心诉求,并积极推动技术成果在各行业的落地实践。首批会员企业包括来自科技界和金融界的领军企业,如 IBM、Intel、Cisco、Digital Asset 等。超级账本项目自诞生后发展十分迅速,目前已经包括 10 大顶级项目,超过 240 家企业会员,并在金融、供应链等领域得到实践应用。尤为值得称道的是,超级账本项目采取了商业友好的 Apache 2.0 开源许可,吸引了众多企业的选用。 +2015 年底,Linux 基金会牵头发起了超级账本(Hyperledger)开源项目,希望联合各行业的力量构造开放、企业级的分布式账本技术生态。与此前的开源项目相比,超级账本项目主要面向联盟链场景,关注企业在权限管理、隐私保护和安全性能等方面的核心诉求,并积极推动技术成果在各行业的落地实践。首批会员企业包括来自科技界和金融界的领军企业,如 IBM、Intel、Cisco、Digital Asset 等。超级账本项目自诞生后发展十分迅速,目前已经包括 16 大顶级项目,超过 280 家企业会员,并在金融、供应链等领域得到实践应用。尤为值得称道的是,超级账本项目采取了商业友好的 Apache 2.0 开源许可,吸引了众多企业的选用。 随着更多商业项目开始落地,从 2017 年开始至今,众多互联网领域的资本开始关注区块链领域,人才缺口持续加大,商业和政策环境开始加强。区块链已经俨然成为继人工智能后的又一资本热点。 @@ -46,25 +46,25 @@ 分布式记账问题为何重要?可以类比互联网出现后给社会带来的重大影响。 -互联网是人类历史上最大的分布式互联系统。作为信息社会的基础设施,它很好地解决了传递**信息**的问题。然而,由于早期设计上的缺陷,互联网无法确保所传递信息的可靠性,这大大制约了人们利用互联网进行大规模协作的能力。而以区块链为基础的分布式账本科技则可能解决传递**可信信息**的问题。这意味着基于分布式账本科技的未来商业网络,将成为新一代的文明基础设施——大规模协同网络。 +互联网是人类历史上最大的分布式互联系统,它已成为信息社会的基础设施,很好地解决了传递**信息**的问题。然而,由于早期设计上的缺陷,互联网无法确保所传递信息的可靠性,这大大制约了人们利用互联网进行大规模协作的能力。而以区块链为基础的分布式记账科技则可能解决传递**可信信息**的问题,这意味着基于分布式记账科技的未来商业网络将成为新一代的文明基础设施——大规模协同网络。 -分布式账本科技的核心价值在于为未来多方协同网络提供可信基础。区块链引发的记账科技的演进,将促使商业协作和组织形态发生变革。甚至世界经济论坛执行主席 Klaus Schwab 认为 “区块链是(继蒸汽机、电气化、计算机之后的)第四次工业革命的核心成果(Blockchains are at the heart of the Fourth Industrial Revolution)”。 +分布式记账科技的核心价值在于为未来多方协同网络提供可信基础。区块链引发的记账科技的演进,将促使商业协作和组织形态发生变革。甚至世界经济论坛执行主席 Klaus Schwab 认为 “区块链是(继蒸汽机、电气化、计算机之后的)第四次工业革命的核心成果(Blockchains are at the heart of the Fourth Industrial Revolution)”。 -### 分布式账本的现状与未来 +### 分布式记账的现状与未来 -类比互联网,从科技发展的一般规律而言,笔者认为,分布式账本科技仍处于发展早期,而商业应用已经在加速落地中,如下表所示。 +类比互联网,从科技发展的一般规律来看,笔者认为,分布式记账科技现在仍处于发展早期,而商业应用已经在加速落地中,如下表所示。 阶段 | 互联网 | 区块链 | 阶段 -- | -- | -- | -- -1974~1983 | ARPANet 内部试验网络 | 比特币试验网络 | 2009~2014 -1984~1993 | TCP/IP 基础协议确立,基础架构完成 | 基础协议和框架探索,出现超级账本、以太坊等开源项目 | 2014~2019? -1990s~2000s | HTTP 应用协议出现;互联网正式进入商用领域 | 商业应用的加速落地,仍未出现杀手级应用 | 2018~? -2000s~? | 桌面互联网、移动互联网、物联网 | 分布式协同商业网络 | ? +1974~1983 | ARPANet 内部试验网络 | 比特币试验网络 | 2009~2013 +1984~1993 | TCP/IP 基础协议确立,基础架构完成 | 基础协议和框架探索,出现超级账本、以太坊等开源项目 | 2014~2018 +1990s~2000s | HTTP 应用协议出现;互联网正式进入商用领域 | 商业应用的加速落地,仍未出现杀手级应用 | 2019~2023 +2000s~? | 桌面互联网、移动互联网、物联网 | 分布式协同商业网络 | 2024~ 互联网在发展过程中,先后经历了试验网络、基础架构和协议、商业应用、大规模普及等四个阶段,每个阶段都长达 10 年左右。其中第二个阶段尤为关键,TCP/IP 取代了已有的网络控制协议成为核心协议,这奠定了后来全球规模互联网的技术基础。 -作为一套前所未有的大规模协同网络,分布式账本网络的发展很大可能也要经历这四个阶段的演化。当然,站在前人肩膀上,无论是演化速度还是决策效率,都会有不小的优势。 +作为一套前所未有的大规模协同网络,分布式记账网络的发展很大可能也要经历这四个阶段的演化。当然,站在前人肩膀上,无论是演化速度还是决策效率,都会有不小的优势。 客观来看,虽然超级账本、以太坊等开源项目在基础协议和框架方面进行了诸多探索,并取得了重要成果,但在多账本互联、与已有系统的互操作性等方面还存在不足,商业应用的广度和深度仍需实践的考验。 -但毫无疑问,分布式账本科技已经成为金融科技领域的重要创新,必将为金融行业创造新的发展机遇。而未来的商业协同网络,也将成为人类文明进步的重要基础。 +但毫无疑问,分布式记账科技已经成为金融科技领域的重要创新,必将为金融行业创造新的发展机遇。而未来的商业协同网络,也将成为人类文明进步的重要基础。 diff --git a/01_history/ledger_history.md b/01_history/ledger_history.md index 1b3e421..b05eef7 100644 --- a/01_history/ledger_history.md +++ b/01_history/ledger_history.md @@ -2,26 +2,26 @@ 如果说金融科技(Financial Technology,Fintech)是保障社会文明的重要支柱,那么记账科技(Ledger Technology,或账本科技)则是这一支柱最核心的基石。 -大到国际贸易,小到个人消费,都离不开记账这一看似普通、却不简单的操作。无论是资金的流转,还是资产的交易,都依赖于银行、交易机构正确维护其记账系统。 +大到国际贸易,小到个人消费,都离不开记账这一看似普通却不简单的操作。无论是资金的流转,还是资产的交易,都依赖于银行、交易机构正确维护其记账系统。 -毫不夸张地说,人类文明的整个发展历程,都伴随着账本科技的持续演化。 +毫不夸张地说,人类文明的整个发展历程,都伴随着记账科技的持续演化。 -目前,很少见到对账本科技演化规律的研究,这导致了人们对其认知的局限。近年来,以区块链为基础的分布式账本技术飞速崛起并得到快速应用。尽管如此,却很少有人能说清楚区块链与记账问题的关系。区块链到底解决了哪些问题?为何能在金融领域产生如此巨大的影响? +目前,很少见到对记账科技演化规律的研究,这导致了人们对其认知的局限。近年来,以区块链为基础的分布式账本技术飞速崛起并得到快速应用。尽管如此,却很少有人能说清楚区块链与记账问题的关系。区块链到底解决了哪些问题?为何能在金融领域产生如此巨大的影响? -按照科技发展的一般规律,可将账本科技从古至今的演化过程大致分为四个阶段:简单账本、复式账本、数字化账本、分布式账本。各个阶段的时期和特点如下表所示。 +按照科技发展的一般规律,可将记账科技从古至今的演化过程大致分为四个阶段:单式账本、复式账本、数字化账本、分布式账本。各个阶段的时期和特点如下表所示。 | 阶段 | 时期 | 主要特点 | | --- | --- | --- | -| 阶段一:简单账本 | 约公元前 3500 年 ~ 15 世纪 | 使用原始的单式记账法(Single Entry Bookkeeping) | +| 阶段一:单式账本 | 约公元前 3500 年 ~ 15 世纪 | 使用原始的单式记账法(Single Entry Bookkeeping) | | 阶段二:复式账本 | 15 世纪 ~ 20 世纪中期 | 现代复式记账法(Double Entry Bookkeeping)出现和应用 | | 阶段三:数字化账本 | 20 世纪中期 ~ 21 世纪初 | 物理媒介账本演化到数字化账本 | -| 阶段四:分布式账本 | 2009 年至今 | 区块链为代表的分布式账本相关思想和技术出现 | +| 阶段四:分布式账本 | 2009 年至今 | 以区块链为代表的分布式账本相关思想和技术出现 | -科技创新往往不是孤立的。账本科技的发展也与众多科技和商业成果的出现息息相关,特别是商业贸易、计算技术、数据处理等,如下图所示。 +科技创新往往不是孤立的。记账科技的发展也与众多科技和商业成果的出现息息相关,特别是商业贸易、计算技术、数据处理等,如下图所示。 -![账本科技的演化](_images/ledger_history.png) +![记账科技的演化](_images/ledger_history.png) -下面笔者将具体讲述不同阶段中账本科技的发展状况。 +下面笔者将具体讲述不同阶段中记账科技的发展状况。 ### 阶段一:单式账本 @@ -31,19 +31,19 @@ ![乌鲁克城的库辛泥板](_images/kushim.png) -库辛泥板同时也是目前已知的最古老的人类文字记录。除了昙花一现的苏美尔文明,包括古中国、古埃及、古希腊、古罗马等人类早期文明,都不乏跟记账相关的考古发现。 +库辛泥板同时也是目前已知的最古老的人类文字记录。除了昙花一现的苏美尔文明,在古中国、古埃及、古希腊、古罗马等人类早期文明中,都不乏与记账相关的考古发现。 -类似通过单条记录进行账目记录的方法,被称为“单式记账法”或“简单记账法”。 +类似于这样的通过单条记录进行账目记录的方法称为“单式记账法”或“简单记账法”,对应的账本叫“单式账本”。 -此后相当长的一段时间里(甚至到今天),人们都在使用单式记账法进行记账,无论是记录在泥板、绳索,还是后来的纸质账本,虽然物理媒介不同,但核心方法都是一致的。 +此后相当长的一段时间里(甚至到今天),人们都在使用单式记账法进行记账,无论是记录在泥板、绳索上,还是记录在后来的纸质账本中,虽然物理媒介不同,但核心方法都是一致的。 -简单记账法自然易用,适合小规模的简易账务,但当面对大规模、特别是涉及到多个实体的复杂记账需求时,就暴露出不少问题。 +简单记账法自然易用,适合小规模的简易账务,但当面对大规模账务,特别是涉及多个实体的复杂记账需求时,就暴露出不少问题。 首先是容易出错。以库辛账本为例,如果大麦入库和出库交易记录很多,很难确认账本记录跟实际情况是否匹配;即便发现不匹配,也很难定位到哪次记录出了问题。 -其次是容易篡改。账本只有一个,只能保管在记账者个人手里。假设记账者不那么诚实,那么,他可以轻易地通过修改已有的记录来窃取大麦。并且很难发现账本被篡改过。 +其次是容易篡改。账本只有一个,只能保管在记账者个人手里。假设记账者不那么诚实,那么,他可以轻易地通过修改已有的记录来窃取大麦。并且其他人很难发现账本被篡改过。 -随着商业活动的普及、交易规模增大和参与方的增多(特别是所有者和经营者的分离),单式记账已经难以满足人们日益提高的记账需求。代表现代记账思想的“复式记账法”应运而生。 +随着商业活动的普及、交易规模增大和参与方的增多(特别是所有者和经营者的分离),单式记账法已经难以满足人们日益提高的记账需求。代表现代记账思想的“复式记账法”应运而生。 ### 阶段二:复式账本 @@ -51,55 +51,54 @@ * 宗教改革:马丁·路德批判了当时基督教的诸多弊端,提出宗教不应有等级制度,即宗教面前人人平等,无需任何代理人或中间介绍人; * 朴素宇宙观:从地心说,到日心说,再到宇宙观形成,人类终于意识到地球并非所处宇宙的“中心”,甚至任何位置都可以被认为是宇宙的“中心”,是否是中心也并不特别或重要; -* 复式记账法:前所未有的繁荣的商业活动催生了更先进的记账方式。复式记账法将单一中心记录分拆为多个科目,极大提高了账目的可靠性,一旦发现问题,方便追查根源。 +* 复式记账法:前所未有的繁荣的商业活动催生了更先进的记账方式。复式记账法将单一中心记录分拆为多个科目,极大提高了账目的可靠性,一旦发现问题,方便追查根源,对应的账本叫“复式账本”。 这些成果虽然分属文化、天文和金融等不同领域,但在核心思想上却如此一致和谐,不得不令人惊讶。 -关于复式记账法的文字记载最早出现于 1494 年,意大利著名数学家卢卡·帕切奥利(Luca Pacioli)在其著作《Summa de arithmetica, geometria, Proportioni et proportionalita(算术、几何、比及比例概要)》中介绍了算术的原理和应用、意大利各地的度量衡制度、商业记账方法和几何学基础。当然,复制记账法的出现是数百年商业活动和数学发展的结果。早在 1202 年,比萨(意大利北部城市)的数学家斐波那契在《珠算原理》中介绍了东方数学思想,包括十进制阿拉伯数字、分数等,还指出了如何使用这些数学手段来进行记账和计算利息。这些都极大促进了金融行业的发展。 +关于复式记账法的文字记载最早出现于 1494 年,意大利著名数学家卢卡·帕西奥利(Luca Pacioli)在其著作《Summa de arithmetica, geometria, Proportioni et proportionalita(算术、几何、比及比例概要)》中介绍了算术的原理和应用、意大利各地的度量衡制度、商业记账方法和几何学基础。当然,复式记账法的出现是数百年商业活动和数学发展的结果。早在 1202 年,比萨(意大利北部城市)的数学家斐波那契在《珠算原理》中介绍了东方数学思想,包括十进制阿拉伯数字、分数等,还指出了如何使用这些数学手段来进行记账和计算利息。这些都极大地促进了金融行业的发展。 -复式记账法演化到现在包括增减记账法、收付记账法、借贷记账法三种。目前最常用的是借贷记账法,它基于会计恒等式(资产=负债+权益),确保每笔交易都按照该恒等式进行记录。复式记账法很快就得到了广泛应用,并成为现代会计学的重要基础。卢卡·帕切奥利也因此被誉为“会计学之父”。 +复式记账法演化到现在包括增减记账法、收付记账法、借贷记账法三种。目前最常用的是借贷记账法,它基于会计恒等式(资产=负债+权益),确保每笔交易都按照该恒等式进行记录。复式记账法很快就得到了广泛应用,并成为现代会计学的重要基础。卢卡·帕西奥利也因此被誉为“会计学之父”。 复式记账法原理并不复杂。由于交易的本质是将某种价值从来源方转移到目标方,因此可将每笔交易分别在贷方(来源方)和借方(目标方)两个科目进行记录,且借贷双方的总额应该时刻保持相等(即守恒)。 -如果库辛当年也懂得复式记账法,当收到大麦入库时,会分别在“库存大麦科目”和“应收大麦科目”上都进行记录,并且记录数额一致。如果要做审核,可以分别对不同科目进行统计,查看其结果是否相同。可见,使用复式记账法能很容易对交易的来龙去脉进行追踪,而且验证账目是否记录正确。实际上,比特币的交易模型中也借鉴了复式记账法的思想。 +如果库辛当年也懂得复式记账法,当大麦入库时,就会分别在“库存大麦科目”和“应收大麦科目”上都进行记录,并且记录数额应该一致。如果要做审核,可以分别对不同科目进行统计,查看其结果是否相同。可见,使用复式记账法能很容易对交易的来龙去脉进行追踪,而且验证账目是否记录正确。实际上,比特币的交易模型中也借鉴了复式记账法的思想。 -复式记账法虽然解决了单个记账人所持本地账本可信的问题,但是仍然无法解决多方之间账本的可信互通问题。例如,投资者如何确保所投资企业的账目没有作假?贸易双方产生交易纠纷时该以谁的账本为准?这些问题的解决要等到数百年以后了。 - -*注:借(Debit):意味着债务,表示从其他方转移到本科目内;贷(Credit):意味着债权,代表从该科目转移出去。* +复式记账法虽然解决了单个记账人所持本地账本的可信度问题,但是仍然无法解决多方之间账本的可信互通问题。例如,投资者如何确保所投资企业的账目没有作假?贸易双方产生交易纠纷时该以谁的账本为准?这些问题的解决要等到数百年以后了。 +*注:借(Debit)意味着债务,表示从其他方转移到本科目内;贷(Credit)意味着债权,代表从该科目转移出去。* ### 阶段三:数字化账本 如果要评价 20 世纪最伟大的十大发明,数字计算机一定会入围。它在物理世界之外开创了全新的赛博空间,为人类社会的方方面面都带来了巨大变化。 -早期计算机很重要的用途之一便是进行账目相关的统计处理。1951年,全世界首台商用计算机 UNIVAC,即为美国人口普查局所使用。 +早期计算机很重要的用途之一便是进行账目相关的统计处理。1951年,全世界首台商用计算机 UNIVAC即为美国人口普查局所用。 -使用计算机,不但可以提高大规模记账的效率,还可以避免人工操作的错误。为了更好的管理统计数据,人们发明了专门的数据库技术。从最早的网状数据库(Network Databases)和层次数据库(Hierarchical Databases),到开创意义的关系型数据库(Relational Database),再到互联网出现后大量新需求催生的大数据、NoSQL 等技术,根源上都与记账问题息息相关。 +使用计算机,不但可以提高大规模记账的效率,还可以避免人工操作的错误。为了更好地管理统计数据,人们发明了专门的数据库技术。从最早的网状数据库(Network Databases)和层次数据库(Hierarchical Databases),到具有开创意义的关系型数据库(Relational Database),再到互联网出现后大量新需求催生的大数据、NoSQL 等技术,根源上都与记账问题息息相关。 在这一阶段,记账方法本身并没有太多创新,但由于数字媒介的出现,使得账本的规模、处理的速度、账本的复杂度,都有了天翻地覆的提升。而这些为后来包括电子商务、互联网金融在内的多种数字化服务奠定了技术基础。 ### 阶段四:分布式账本 -复式记账法虽然记录了交易的来龙去脉、不易出错,但本质上仍然是中心化模式。 +复式记账法虽然记录了交易的来龙去脉,不易出错,但本质上仍然是中心化模式。 -中心化模式的记账系统方便使用,但在很多情况下仍然存在不少问题:账本掌握在个体手中,一旦出现数据丢失则无法找回;同时涉及到多个交易方的情况下,需要分别维护各自的账本,如果出现不一致,对账较为困难。 +中心化模式的记账系统方便使用,但在很多情况下仍然存在不少问题:账本掌握在个体手中,一旦出现数据丢失则无法找回;在同时涉及到多个交易方的情况下,需要分别维护各自的账本,如果出现不一致,对账较为困难。 -很自然可以想到借助分布式系统的思想来实现分布式账本(Distributed Ledger):由交易多方共同维护同一个共享的分布式账本;打通交易在不同阶段的来龙去脉;同时凭借分布式技术,进一步提高记账的规模、效率、可靠性以及合规性。 +因此,人们很自然地想到借助分布式系统的思想来实现分布式账本(Distributed Ledger):由交易多方共同维护同一个共享的分布式账本;打通交易在不同阶段的来龙去脉;凭借分布式技术,进一步提高记账的规模、效率、可靠性以及合规性。 -但在分布式场景下,如何避免有参与方恶意篡改或破坏记录?该由谁来决定将交易记录写到账本中?这些问题一直没有得到很好的解决。 +但在分布式场景下,如何避免某个参与方恶意篡改或破坏记录?该由谁来决定将交易记录写到账本中?这些问题一直没有得到很好的解决。 -2009 年 1 月,基于区块链结构的比特币网络悄然问世,它融合了现代密码学和分布式网络技术等重要成果。此后数年里,在纯分布式场景下比特币网络稳定支持了海量转账交易。这让人们开始认识到,区块链这一看似极为简洁的数据结构,居然恰好解决了分布式记账的基本需求,基于区块链结构的分布式记账技术开始大量出现。由于这些技术多以区块链结构作为其核心的账本结构,也往往被统称为区块链技术。 +2009 年 1 月,基于区块链结构的比特币网络悄然问世,它融合了现代密码学和分布式网络技术等重要成果。此后数年里,在纯分布式场景下,比特币网络稳定支持了海量转账交易。这让人们开始认识到,**区块链这一看似极为简洁的数据结构,居然恰好解决了分布式记账的基本需求**,于是基于区块链结构的分布式记账技术开始大量出现。由于这些技术多以区块链结构作为其核心的账本结构,也往往被统称为区块链技术。 2014 年开始,金融、科技领域的专家们开始关注区块链技术,并积极推动分布式账本相关应用落地。在此过程中,对开放、先进分布式账本平台的需求越来越迫切。 -2015 年底,三十家金融、科技领域的领军企业(包括 IBM、Accenture、Intel、J.P.Morgan、DTCC、SWIFT、Cisco 等)联合发起了超级账本(Hyperledger)开源项目,并由中立的 Linux 基金会进行管理。该项目遵循 Apache v2 许可(商业友好),致力于打造一个开源、满足企业场景的分布式账本科技生态。围绕企业分布式账本的核心诉求,超级账本社区已经发展到 12 大顶级项目,超过 280 名全球的企业会员,支撑了众多的应用案例。 +2015 年的年底,三十家金融和科技领域的领军企业(包括 IBM、Accenture、Intel、J.P.Morgan、DTCC、SWIFT、Cisco 等)联合发起了超级账本(Hyperledger)开源项目,并由中立的 Linux 基金会进行管理。该项目遵循 Apache v2 许可(商业友好),致力于打造一个开源、满足企业场景的分布式记账科技生态。围绕企业分布式账本的核心诉求,超级账本社区已经发展到涵盖 16 大顶级项目,超过 280 名全球企业会员,支撑了众多的应用案例。 -目前,基于分布式账本技术的各种创新方案已经在包括金融、供应链、医疗等领域得到了不少落地应用。但笔者认为,类比互联网的发展过程,目前分布式账本技术整体还处于发展的初期,还存在不少尚待解决的问题,包括权限管理、隐私保护、性能优化和互操作性等。未来在这些方面的科技突破,将极大拓展分布式账本技术的应用场景和形态,最终实现传递“价值”的商业协同网络。 +目前,基于分布式账本技术的各种创新方案已经在金融、供应链、医疗等领域得到了不少落地应用。但笔者认为,类比互联网的发展过程,目前分布式账本技术整体还处于发展的初期,还存在不少尚待解决的问题,包括权限管理、隐私保护、性能优化和互操作性等。未来在这些方面的科技突破,将极大拓展分布式账本技术的应用场景和形态,最终实现传递“价值”的商业协同网络。 -*注:1371 年,中国明朝开展了首次面向全国的户籍勘查。勘查采用户帖制度,十年清查一次,每次记录各户现有人数,以及距上次的新增、减少情况。历届信息前后对照,有效规避了统计错误。* +*注:1371 年,中国明朝开展了首次面向全国的户籍勘查。勘查采用户帖制度,十年清查一次,每次记录各户现有人数,以及距上次的新增、减少情况。将历届信息进行前后对照,有效规避了统计错误。* -### 账本科技的未来 +### 记账科技的未来 -账本科技历千年而弥新,由简单到复杂、由粗糙到精细、由中心化到分布式,这与业务需求的不断变化密不可分。大规模、高安全、易审计等特性将越来越受到关注。 +记账科技历千年而弥新,由简单到复杂,由粗糙到精细,由中心化到分布式,这与业务需求的不断变化密不可分。大规模、高安全、易审计等特性将越来越受到关注。 -笔者相信,随着社会文明特别是商业活动的进一步成熟,分布式记账的需求将更加普遍,分布式账本科技也将更加繁荣。 +笔者相信,随着社会文明的进步,特别是商业活动的进一步成熟,分布式记账的需求将更加普遍,分布式记账科技也将更加繁荣。 diff --git a/01_history/summary.md b/01_history/summary.md index 42ab870..7c49a02 100644 --- a/01_history/summary.md +++ b/01_history/summary.md @@ -1,5 +1,5 @@ ## 本章小结 -区块链思想诞生于对更先进的分布式记账技术的追求。它支持了首个自带信任、防篡改的分布式账本系统——比特币网络。这让大家意识到,除了互联网这样的尽力而为(不保证可信)的基础设施外,区块链技术还将可能塑造彼此信任的未来网络基础设施。 +区块链思想诞生于对更先进的分布式记账技术的追求,它支持了首个自带信任、防篡改的分布式账本系统——比特币网络。这让人们意识到,除了互联网这样的尽力而为(不保证可信)的基础设施外,区块链技术还将可能塑造彼此信任的未来网络基础设施。 从应用角度讲,以比特币为代表的加密货币只是基于区块链技术的一种金融应用。区块链技术还能带来更通用的计算能力和更广泛的商业价值。本书后续章节将具体介绍区块链的核心技术,以及代表性的开源项目,包括 [以太坊](https://www.ethereum.org/)和[超级账本](https://hyperledger.org) 等。这些开源项目加速释放了区块链技术的威力,为更多更复杂的应用场景提供了技术支持。 diff --git a/02_overview/README.md b/02_overview/README.md index 30b7be5..f3fdcd4 100644 --- a/02_overview/README.md +++ b/02_overview/README.md @@ -1,12 +1,12 @@ # 核心技术概览 -** 运用之妙夺造化,存乎一心胜天工。 ** +** 设计之妙夺造化,存乎一心胜天工。 ** 跨境商贸中签订的合同,怎么确保对方能严格遵守和及时执行? -酒店宣称刚打捞上来的三文鱼,怎么追踪捕捞和运输过程中的时间和卫生? +酒店宣称刚打捞上来的三文鱼,怎么追踪捕捞和运输过程中的时间和卫生情况? -现代数字世界里,怎么证明你是谁?怎么证明某个资产属于你? +数字世界里,怎么证明你是谁?怎么证明某个资产属于你? 囚徒困境中的两个人,怎样才能达成利益的最大化? diff --git a/02_overview/challenge.md b/02_overview/challenge.md index 5857b01..00d33e7 100644 --- a/02_overview/challenge.md +++ b/02_overview/challenge.md @@ -1,14 +1,14 @@ ## 关键问题和挑战 -从技术角度讲,区块链所涉及到的领域比较繁杂,包括分布式系统、密码学、心理学、经济学、博弈论、控制论、网络协议等,这也意味着工程实践中大量的挑战。 +从技术角度讲,区块链所涉及的领域比较繁杂,包括分布式系统、密码学、心理学、经济学、博弈论、控制论、网络协议等,这也意味着我们在工程实践中会面临大量的挑战。 下面列出了目前业界关注较多的一些技术话题。 ### 隐私保护 -隐私保护一直是分布式系统领域十分关键的问题。在分布式场景下,因为缺乏独立的管理机制,参与网络的各方无法保证严格遵守协议,甚至会故意试图获取网络中他人的数据,这些行为都很难进行约束。 +隐私保护一直是分布式系统领域十分关键的问题。在分布式场景下,因为缺乏独立的管理机制,参与网络的各方无法保证严格遵守协议,甚至会故意试图获取网络中他人的数据,对这些行为都很难进行约束。 -而分布式账本要在共享协同信息和隐私保护之间达到合适的平衡,是个不小的挑战。特别随着公有账本系统屡屡出现安全漏洞,动辄造成数千万美金的风险;随着欧盟《通用数据保护条例》(General Data Protection Regulation,GDPR)的落地,隐私保护的合规要求愈加严格;传统的信息安全技术、形式化验证技术在应对新的需求时暴露出实践性不强的缺陷,都亟待解决。 +要在共享协同信息和隐私保护之间达到合适的平衡是个不小的挑战,目前,公有账本系统屡屡出现安全漏洞,动辄造成数千万美金损失的风险。随着欧盟《通用数据保护条例》(General Data Protection Regulation,GDPR)的落地,隐私保护的合规要求愈加严格;传统的信息安全技术、形式化验证技术在应对新的需求时暴露出实践性不强的缺陷,都亟待解决。 尤其是医疗健康领域,对数据的隐私性需求最为强烈,要求严格控制数据的来源、所有权和使用范围。传统的基于加密的手段很难满足这些要求,需要结合零知识证明、同态加密、隐私查询等新的密码学手段。而这些新技术在实际应用中还存在不少问题。 @@ -20,25 +20,25 @@ 该问题在公开匿名场景下和带权限管理的场景下需求差异较大,从而导致了基于概率的算法和确定性算法两类思想。 -最初,比特币区块链考虑的是公开匿名场景下的最坏保证。通过引入了“工作量证明”(Proof of Work)策略来规避少数人的恶意行为,并通过概率模型保证最后参与方共识到最长链。算法的核心思想是基于经济利益的博弈,让恶意破坏的参与者损失经济利益,从而保证大部分人的合作。同时,确认必须经过多个区块的生成之后达成,从概率上进行保证。这类算法的主要问题在于效率的低下和能源的浪费。类似地,还有以权益为抵押的 PoS 和 DPoS 算法等。 +最初,比特币区块链考虑的是公开匿名场景下的最坏保证。通过引入了“工作量证明”(Proof of Work)策略来规避少数人的恶意行为,并通过概率模型保证最终共识到最长链。算法的核心思想是基于经济利益的博弈,让恶意破坏的参与者损失经济利益,从而保证大部分人的合作。同时,确认必须经过多个区块的生成之后达成,从概率上进行保证。这类算法的主要问题在于效率低下和能源浪费。类似地,还有以权益为抵押的 PoS 和 DPoS 算法等。 -后来更多的区块链技术(如超级账本)在带权限许可的场景下,开始考虑支持更多的确定性的共识机制,包括经典的拜占庭算法等,可以解决快速确认的问题。 +后来更多的区块链技术(如超级账本)在带权限许可的场景下,开始考虑支持更多的确定性的共识机制,包括改进的拜占庭算法等,可以解决快速确认的问题。但已有算法往往在大规模和动态场景下表现不佳。 -共识问题在很长一段时间内都将是极具学术价值的研究热点,核心的指标将包括容错的节点比例、决策收敛速度、出错后的恢复、动态特性等。PoW 等基于概率的系列算法理论上允许少于一半的不合作节点,PBFT 等确定性算法理论上则允许不超过 1/3 的不合作节点。 +共识问题在很长一段时间内都将是极具学术价值的研究热点,核心的指标将包括支持规模、容错的节点比例、决策收敛速度、出错后的恢复、动态特性等。PoW 等基于概率的系列算法理论上允许少于一半的不合作节点,PBFT 等确定性算法理论上则允许不超过 1/3 的不合作节点。 ### 交易性能 -一般情况下,区块链并不适用于高频交易的场景,但由于金融系统的需求,业界目前也十分关心如何尽量提高区块链系统的交易性能,包括吞吐量和确认延迟两个方面。 +一般情况下,区块链并不适用于高频交易的场景,但由于金融系统的迫切需求,业界目前积极探讨如何提高其交易性能,包括吞吐量(Throughput)和确认延迟(Latency)两个方面。 -目前,公开的比特币区块链只能支持平均每秒约 7 笔的吞吐量,安全的交易确认时间为一个小时左右。以太坊区块链的吞吐量略高一些能到几十笔每秒,但交易性能也被认为是较大的瓶颈。2017 年底一款名为 CryptoKitties 的游戏应用造成以太坊网络的严重堵塞。 +目前,公开的比特币公有区块链只能支持平均每秒约 7 笔的吞吐量,其安全的交易确认时间为一小时。以太坊公有区块链的吞吐量略高,达到每秒几十笔,但仍不能满足较大的应用。2017 年底,游戏应用 CryptoKitties 就造成了以太坊网络的严重堵塞。 -这种场景下,为了提高处理性能,一方面可以提升单个节点的性能(如采用高配置的硬件),同时设计优化的策略和算法,提高性能;另外一方面可将交易处理卸载(off-load)到链下。只用区块链记录最终交易信息,如比特币社区提出的 [闪电网络](https://lightning.network/lightning-network-paper.pdf) 等设计。类似地,侧链(side chain)、影子链(shadow chain)等思路在当前阶段也有一定的借鉴意义。类似设计可将整体性能提升 1~2 个数量级。 +这种场景下,为了提高处理性能,一方面可以提升单个节点的性能(如采用高配置的硬件),同时设计优化的策略和并行算法而提高性能;另外一方面可将交易处理卸载(off-load)到链下,只用区块链记录最终交易信息,如比特币社区提出的 [闪电网络](https://lightning.network/lightning-network-paper.pdf) 等设计。类似地,侧链(side chain)、影子链(shadow chain)等思路在当前阶段也有一定的借鉴意义。类似设计可将整体性能提升 1~2 个数量级。 -联盟链场景下,参与多方存在一定的信任前提和利益约束,可以采取更优化的设计,换来性能的提升。以超级账本 Fabric 项目为例,在普通虚拟机配置下,单客户端每秒可以达到数百次(Transactions per second,tps)的交易吞吐量;在有一定工程优化或硬件加速情况下可以达到每秒数千次的吞吐量。 +联盟链场景下,参与方在共同的信任前提和利益约束下,可以采取更激进的设计,换取性能的提升。以超级账本 Fabric 项目为例,普通虚拟机配置即可达到每秒数千次的交易吞吐量;在进一步优化或硬件加速情况下可以达到每秒数万次的处理性能。 -客观地说,目前开源区块链系统已经可以满足不少应用场景的性能需求,但离大规模交易系统每秒稳定数万笔的吞吐性能还有较大差距。 +整体来看,目前开源区块链系统已经可以满足大量应用场景的性能需求,但离大规模商用交易系统的吞吐性能(每秒稳定数万笔)还有差距。 -*注:据公开的数据,VISA 系统的处理均值为 2,000 tps,峰值为 56,000 tps;某金融支付系统的处理峰值超过了 85,000 tps;某大型证券交易所号称的处理均(峰)值在 80,000 tps 左右。* +*注:据公开的数据,VISA 系统的处理均值为 2,000 tps,峰值为 56,000 tps;某大规模金融支付系统的处理峰值超过了 85,000 tps;某大型证券交易所号称的处理均(峰)值在 80,000 tps 左右。* ### 扩展性 diff --git a/02_overview/misunderstand.md b/02_overview/misunderstand.md index 8472381..6e0b03e 100644 --- a/02_overview/misunderstand.md +++ b/02_overview/misunderstand.md @@ -4,13 +4,16 @@ 下面总结一些常见的认知误区。 -**区块链是完全创新的,是颠覆性的** 作为融合多项已有技术而出现的事物,区块链跟现有记账科技和信息体系是一脉相承的。区块链在解决多方合作和可信计算问题上向前多走了一步,但并不意味着它就是万能的(从来不会存在一项万能的科技),更不会快速颠覆已有的众多商业模式。很长一段时间里,区块链的应用场景仍需不断摸索,区块链在自身发展的同时也会与已有系统共存互通。 +**区块链是完全创新的新技术** 作为融合多项已有技术而出现的事物,区块链跟现有记账科技和信息体系是一脉相承的。区块链在解决多方合作和可信计算问题上向前多走了一步,但并不意味着它就是万能的(从来不会存在一项万能的科技),更不会快速颠覆已有的众多商业模式。很长一段时间里,区块链的应用场景仍需不断摸索,区块链在自身发展的同时也会与已有系统共存互通。 -**区块链必然是非中心化的,非中心化的一定优于中心化设计** 比较两种技术的优劣必须要先确定场景前提,区块链也是如此。不可能存在某种技术在任意场景下都是最优的。目前区块链两大形态——公有链和联盟链之所以在技术选型上存在较大差异,正是因为它们面向的场景不同。中心化设计往往具有设计简单、管理完善、性能高、安全可控的特点,但容错性能比较差;非中心化(多中心化)的设计可以提高容错性能,可以利用多方共识来降低篡改风险,但意味着设计较复杂,性能较差。从实际需求出发,现有大部分区块链技术都介于绝对的中心化和绝对的非中心化之间,以取得不同指标上的平衡。例如某些公有链为了提高性能,选择部分代表节点来参与共识。 +**区块链必然是非中心化的,非中心化一定优于中心化设计** 比较两种技术的优劣,必须要先确定场景,区块链也是如此。不可能存在某种技术在任意场景下都是最优的。目前区块链的两大形态——公有链和联盟链之所以在技术选型上存在较大差异,正是因为它们面向的场景不同。中心化设计往往具有设计简单、管理完善、性能高、安全可控的特点,但容错性能比较差;非中心化(多中心化)的设计可以提高容错性能,可以利用多方共识来降低篡改风险,但意味着设计较复杂,性能较差。 -**区块链离不开加密数字货币** 虽说区块链的早期应用之一是比特币等加密数字货币,但发展到今日,区块链技术早已脱颖而出,两者也各自发展为不同的目标。前者侧重从金融角度发掘加密数字货币的实验和实践意义;后者则从技术层面探讨和研究分布式账本科技的商业价值,并试图拓展到更多分布式互信的场景。 +从实际需求出发,现有大部分区块链技术都介于绝对的中心化和绝对的非中心化之间,以取得不同指标上的平衡。例如某些公有链为了提高性能,选择部分代表节点来参与共识。 -**区块链是一种数据库技术** 虽然区块链中可以使用数据库技术,也可以用来存储或管理数据(Data Management)技术,但它要面向的核心问题是多方数据互信协作(Data Collaboration)问题,这是传统数据技术无法解决的。另外,单纯从数据存储或管理角度,区块链效率可能不如传统数据库效率高,因此一般不推荐把大量原始数据直接放到区块链系统中。当然,区块链系统可以很好的与现有数据库和大数据等技术集成,也有人尝试将区块链的一些特点引入到数据库设计中,解决非中心化的管理问题,如 BigchainDB。 +**区块链离不开加密数字货币** 虽说区块链的早期应用之一是比特币等加密数字货币,但发展到今日,区块链技术早已脱颖而出,两者也各自朝着不同的目标向前发展。比特币侧重从金融角度发掘加密数字货币的实验和实践意义;区块链则从技术层面探讨和研究分布式账本科技的商业价值,并试图拓展到更多分布式互信的场景。 -**Token 等于加密数字货币** 早在区块链概念出现之前,Token(令牌)就大量应用在计算机系统中。作为权限证明,它可以协助计算机系统进行认证等操作。作为分布式系统,区块链中很自然也可以在某些场景(如游戏积分)下借用 Token 机制,带来应用生态的管理便利。而加密数字货币试图借用数字化技术来实现货币功能,更强调经济价值,跟计算机系统中的原生功能无必然联系。 +**区块链是一种数据库技术** 虽然区块链中往往使用了已有的数据库技术,也可以用来存储或管理数据(Data Management),但它要面向的主要问题是多方数据互信协作(Data Collaboration)问题,这是传统数据技术无法解决的。单纯从数据存储或管理角度,区块链效率可能不如传统数据库效率高,因此一般不推荐把大量原始数据直接放到区块链系统中。当然,区块链系统可以与现有数据库和大数据系统等进行集成。甲骨文、亚马逊等团队尝试将区块链的一些特性引入到数据库中,提出了 Blockchain Table、Quantum Ledger Database 等新型数据系统,可以满足防篡改历史、方便审计等需求。 +另一方面,区块链复杂大规模的场景需求也对数据库技术提出了新的需求。例如开源社区普遍使用的 levelDB 在扩展性方面表现并不特别优秀,需要进行增强;部分业务场景下需要支持 SQL 语义。可以借鉴其它数据库(如 RocksDB 和 BerkeleyDB)的一些优势进行改造。 + +**Token 等于加密数字货币** 早在区块链概念出现之前,Token(令牌或凭证)就大量应用在计算机系统中。作为权限证明,它可以协助计算机系统进行认证等操作。作为分布式系统,区块链中很自然也可以在某些场景(如游戏积分)下借用 Token 机制,带来应用生态的管理便利。而加密数字货币试图借用数字化技术来实现货币功能,更强调经济价值,跟计算机系统中的原生功能无必然联系。总之,两者是不同层面的概念,即使不依赖 Token,仍然可以实现加密数字货币;数字凭证只有具备可靠、大范围接受的购买力,才可能成为货币,否则只能作为收藏品在小圈子内流通。 diff --git a/02_overview/vision.md b/02_overview/vision.md index 27b91c1..65ef3b6 100644 --- a/02_overview/vision.md +++ b/02_overview/vision.md @@ -1,13 +1,13 @@ ## 趋势与展望 -关于区块链技术发展趋势的探讨和争论,自其诞生之日起就从未停息。或许,读者可以从计算技术的演变历史中得到一些启发。 +关于区块链技术发展趋势的探讨和争论,自其诞生之日起就从未停息。或许,读者可以从现代计算技术的演变史中得到一些启发。 -![计算的历史,笔者于某次技术交流会中提出](_images/computing_history.png) +![现代计算技术的演变史,笔者于某次技术交流会中提出](_images/computing_history.png) 以云计算为代表的现代计算技术,其发展历史上有若干重要的时间点和事件: -* 1969 - ARPANet(Advanced Research Projects Agency Network):现代互联网的前身,被美国高级研究计划署(Advanced Research Project Agency)提出,其使用 NCP 协议,核心缺陷之一是无法做到和个别计算机网络交流; -* 1973 - TCP/IP:Vinton.Cerf(文特•瑟夫)与 Bob Karn(鲍勃•卡恩)共同开发出 TCP 模型,解决了 NCP 的缺陷; +* 1969 - ARPANet(Advanced Research Projects Agency Network):现代互联网的前身,由美国高级研究计划署(Advanced Research Project Agency)提出,使用的协议是 NCP ,核心缺陷之一是无法做到和个别计算机网络交流; +* 1973 - TCP/IP:Vinton.Cerf(温顿•瑟夫)与 Bob Karn(鲍勃•卡恩)共同开发出 TCP 模型,解决了 NCP 的缺陷; * 1982 - Internet:TCP/IP 正式成为规范,并被大规模应用,现代互联网诞生; * 1989 - WWW:早期互联网的应用主要包括 telnet、ftp、email 等,蒂姆·伯纳斯-李(Tim Berners-Lee)设计的 WWW 协议成为互联网的杀手级应用,引爆了现代互联网,从那开始,互联网业务快速扩张; * 1999 - salesforce:互联网出现后,一度只能进行通信应用,但 salesforce 开始以云的理念提供基于互联网的企业级服务; @@ -22,11 +22,11 @@ 另外,**最早出现的未必是先驱,也可能是先烈。** 创新科技固然先进,但过早播撒种子,缺乏合适环境也难发芽长大。技术创新与科研创新很不同的一点便是,技术创新必须立足于需求,过早过晚都会错失良机;科研创新则要越早越好,比如二十世纪的现代物理学发展,超前的研究成果奠定了后续一百多年内科技革命的基础。 -最后,**事物的发展往往是延续的、长期的。** 新生事物大都不是凭空而生,往往是解决了先贤未能解决的问题,或是出现了之前未曾出现过的场景。很多时候,新生事物的出现需要长期的孵化,坚持还是放弃的故事会不断重复。但只要是朝着提高生产力的正确方向努力,迟早会有出现在舞台上的一天。 +最后,**事物的发展往往是延续的、长期的。** 新生事物大多数不是凭空而生,往往是解决了先贤未能解决的问题,或是出现了之前未曾出现过的场景。很多时候,新生事物的出现需要长期的孵化,坚持还是放弃的故事会不断重复。但只要是朝着提高生产力的正确方向努力,迟早会有出现在舞台上的一天。 ![坚持还是放弃?](_images/near_dream.png) -目前,区块链在金融相关领域的应用相对成熟,其它方向尚处于初步实践阶段。但毫无疑问地是,区块链技术在已经落地的行业中,确实带来了生产力提升。2018 年 3 月,国际银行间金融电信协会(The Society for Worldwide Interbank Financial Telecommunication,SWIFT)基于超级账本项目经过一年多的成功验证,宣布认可分布式账本技术可满足银行间实时交易,同时遵守监管的报告要求。 +目前,区块链在金融相关领域的应用相对成熟,其它方向尚处于初步实践阶段。但毫无疑问的是,区块链技术在已经落地的行业中,确实带来了生产力提升。2018 年 3 月,国际银行间金融电信协会(The Society for Worldwide Interbank Financial Telecommunication,SWIFT)基于超级账本项目经过一年多的成功验证,宣布认可分布式账本技术可满足银行间实时交易,同时遵守监管的报告要求。 此外,相关标准化组织也在积极从标准和规范角度探讨如何使用分布式账本。包括: @@ -36,6 +36,6 @@ * 国际互联网工程任务组(Internet Engineering Task Force,IETF)成立了 Decentralized Internet Infrastructure Proposed RG (dinrg)。该研究组将集中在非中心化架构服务中的信任管理、身份管理、命名和资源发现等问题; * 万维网联盟(World Wide Web Consortium,W3C)成立了三个相关的研究小组,分别探讨区块链技术和应用;数字资产管理规范以及跨账本互联协议等。 -当然,企业界的进展也不甘落后。不少科技企业已推出了分布式账本相关的产品或方案,并得到了初步的验证。由于分布式账本技术自身的复杂性和尚不成熟,正确使用还需要较高的门槛。目前,这些企业方案多数依托流行的云计算技术,将节约开发成本、方便用户使用账本服务作为主要目标。 +当然,企业界的进展也不甘落后。不少科技企业已推出了分布式账本相关的产品或方案,并得到了初步的验证。由于分布式账本技术自身的复杂性且尚不成熟,正确使用还需要较高的门槛。目前,这些企业方案多数依托流行的云计算技术,将节约开发成本、方便用户使用账本服务作为主要目标。 -大胆预测,随着区块链和分布式账本相关技术的成熟,更多应用实践将会落地,特别是面向企业应用的场景。而在未来解决了跨链等一系列问题后,将会出现随时接入、成本低廉的联合账本网络,为人们生活带来更多便利。 +笔者大胆预测,随着区块链和分布式账本相关技术的成熟,更多应用实践将会落地,特别是面向企业应用的场景。而在未来解决了跨链等一系列问题后,将会出现随时接入、成本低廉的联合账本网络,为人们生活带来更多便利。 diff --git a/03_scenario/README.md b/03_scenario/README.md index 673f4db..fc22ecc 100644 --- a/03_scenario/README.md +++ b/03_scenario/README.md @@ -1,11 +1,9 @@ # 典型应用场景 -TODO: add latest usage cases +** 创新落地,应用为王。 ** -** 科技创新,应用为王。 ** +新的技术能否最终落地得以普及,受很多因素影响,其中最关键一点便是合适的应用场景。 -一项新技术能否最终落地普及,有很多影响因素。其中很关键的一点便是能否找到合适的应用场景。 +比特币网络支撑了全球范围内的支付交易,成功论证了去中心化系统长时间自治运转的可行性。这引发了对区块链应用潜力的遐想:如果基于区块链技术构造自动运行的商业价值网络,其中的交易自动完成且无法伪造;所有签署的合同都能按照约定严格执行,这将大大提高商业系统协作的效率。从这个意义上讲,人们相信,基于区块链技术构建的未来商业网络,将是继互联网之后又一次巨大的产业变革。 -以比特币网络为代表的大规模数字货币系统,长时间自治运行,支持了传统金融系统都难以实现的全球范围即时可靠交易。这为区块链技术的应用潜力引发了无限遐想。如果未来基于区块链技术构造的商业价值网络成为现实,所有的交易都将高效完成且无法伪造;所有签署的合同都能按照约定严格执行。这将极大降低整个商业体系运转的成本,同时大大提高社会沟通协作的效率。从这个意义上讲,基于区块链技术构建的未来商业网络,将可能引发继互联网之后又一次巨大的产业变革。 - -目前,金融交易系统已经开始验证和使用区块链系统。包括征信管理、跨国交易、跨组织合作、资源共享和物联网等诸多领域,也涌现出大量有趣的应用案例。本章将通过剖析这些典型的应用场景,展现区块链技术为不同行业带来的创新潜力。 +目前,除了金融领域外,在权属追溯、资源共享、物流供应链、征信管理和物联网等诸多领域,也涌现出大量的应用案例。本章将通过剖析这些典型的应用场景,展现区块链技术为不同行业带来的创新潜力。 diff --git a/04_distributed_system/README.md b/04_distributed_system/README.md index 690a33b..f4e489e 100644 --- a/04_distributed_system/README.md +++ b/04_distributed_system/README.md @@ -2,10 +2,10 @@ ** 万法皆空,因果不空。 ** -随着摩尔定律碰到瓶颈,分布式架构越来越常见。 +随着摩尔定律碰到瓶颈,分布式架构逐渐流行起来。 -从单点演变到分布式结构,首要问题之一就是数据一致性。很显然,如果分布式集群中多个节点处理结果无法保证一致,那么在其上的业务系统将无法正常工作。 +从单点演变到分布式结构,重要问题之一就是数据一致性。很显然,如果分布式集群中多个节点处理结果无法保证一致,那么在其上的业务系统将无法正常工作。 区块链系统是一个典型的分布式系统,必然也会碰到这些经典问题。 -本章将介绍分布式系统领域的核心技术,包括一致性、共识的定义,基本的原理和常见算法,最后还介绍了评估分布式系统可靠性的指标。 +本章将介绍分布式系统领域的核心技术,包括一致性、共识,介绍这些概念的定义、基本原理和常见算法,最后还介绍了评估分布式系统可靠性的指标。 diff --git a/04_distributed_system/acid.md b/04_distributed_system/acid.md index 053482d..0f71bc5 100644 --- a/04_distributed_system/acid.md +++ b/04_distributed_system/acid.md @@ -35,7 +35,7 @@ ACID 也是一种比较出名的描述一致性的原则,通常出现在分布 完整过程如下: -* 尝试预提交:协调者询问执行者是否能进行某个事务的提交。执行者需要返回答复,但无需执行提交。这就避免出现部分执行者被无效阻塞住的情况。 +* 尝试预提交:协调者询问执行者是否能进行某个事务的提交。执行者需要返回答复,但无需执行提交。这就避免出现部分执行者被无效阻塞住的情况; * 预提交:协调者检查收集到的答复,如果全部为真,则发起提交事务请求。各参与执行者(Participant)需要尝试进行提交并反馈是否能完成; * 正式提交:协调者如果得到所有执行者的成功答复,则发出正式提交请求。如果成功完成,则算法执行成功。 diff --git a/04_distributed_system/algorithms.md b/04_distributed_system/algorithms.md index 02b657e..5a2c4cd 100644 --- a/04_distributed_system/algorithms.md +++ b/04_distributed_system/algorithms.md @@ -1,6 +1,6 @@ ## 共识算法 -共识(Consensus),很多时候会见到与一致性(Consistency)术语放在一起讨论。严谨地讲,两者的含义并不完全相同。 +共识(Consensus)这个术语很多时候会与一致性(Consistency)术语放在一起讨论。严谨地讲,两者的含义并不完全相同。 一致性的含义比共识宽泛,在不同场景(基于事务的数据库、分布式系统等)下意义不同。具体到分布式系统场景下,一致性指的是多个副本对外呈现的状态。如前面提到的顺序一致性、线性一致性,描述了多节点对数据状态的共同维护能力。而共识,则特指在分布式系统中多个节点之间对某个事情(例如多个事务请求,先执行谁?)达成一致看法的过程。因此,达成某种共识并不意味着就保障了一致性。 @@ -8,7 +8,7 @@ 共识算法解决的是分布式系统对某个提案(Proposal),大部分节点达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是主节点……等等。可以认为任何可以达成一致的信息都是一个提案。 -对于分布式系统来讲,各个节点通常都是相同的确定性状态机模型(又称为状态机复制问题,State-Machine Replication),从相同初始状态开始接收相同顺序的指令,则可以保证相同的结果状态。因此,系统中多个节点最关键地是对多个事件的顺序进行共识,即排序。 +对于分布式系统来讲,各个节点通常都是相同的确定性状态机模型(又称为状态机复制问题,State-Machine Replication),从相同初始状态开始接收相同顺序的指令,则可以保证相同的结果状态。因此,系统中多个节点最关键的是对多个事件的顺序进行共识,即排序。 *注:计算机世界里采用的是典型的“多数人暴政”,足够简单、高效。* @@ -16,12 +16,12 @@ 无论是在现实生活中,还是计算机世界里,达成共识都要解决两个基本的问题: -* 首先,如何提出一个待共识的提案?如通过令牌传递、随机选取、权重比较、求解难题……等; -* 其次,如何让多个节点对该提案达成共识(同意或拒绝),如投票、规则验证……等。 +* 首先,如何提出一个待共识的提案?如通过令牌传递、随机选取、权重比较、求解难题等; +* 其次,如何让多个节点对该提案达成共识(同意或拒绝),如投票、规则验证等。 理论上,如果分布式系统中各节点都能以十分“理想”的性能(瞬间响应、超高吞吐)稳定运行,节点之间通信瞬时送达(如量子纠缠),则实现共识过程并不十分困难,简单地通过广播进行瞬时投票和应答即可。 -可惜地是,现实中这样的“理想”系统并不存在。不同节点之间通信存在延迟(光速物理限制、通信处理延迟),并且任意环节都可能存在故障(系统规模越大,发生故障可能性越高)。如通信网络会发生中断、节点会发生故障、甚至存在被入侵的节点故意伪造消息,破坏正常的共识过程。 +可惜的是,现实中这样的“理想”系统并不存在。不同节点之间通信存在延迟(光速物理限制、通信处理延迟),并且任意环节都可能存在故障(系统规模越大,发生故障可能性越高)。如通信网络会发生中断、节点会发生故障、甚至存在被入侵的节点故意伪造消息,破坏正常的共识过程。 一般地,把出现故障(Crash 或 Fail-stop,即不响应)但不会伪造信息的情况称为“非拜占庭错误(Non-Byzantine Fault)”或“故障错误(Crash Fault)”;伪造信息恶意响应的情况称为“拜占庭错误”(Byzantine Fault),对应节点为拜占庭节点。显然,后者场景中因为存在“捣乱者”更难达成共识。 diff --git a/04_distributed_system/availability.md b/04_distributed_system/availability.md index 889183b..3b11e0b 100644 --- a/04_distributed_system/availability.md +++ b/04_distributed_system/availability.md @@ -1,9 +1,8 @@ ## 可靠性指标 -可靠性(Availability),或者说可用性,是描述系统可以提供服务能力的重要指标。高可靠的分布式系统,往往需要各种复杂的机制来进行保障。 +可靠性(Availability),或者说可用性,是描述系统可以提供服务能力的重要指标。高可靠的分布式系统往往需要各种复杂的机制来进行保障。 -通常情况下,服务的可用性可以用服务承诺(Service Level Agreement,SLA -SLA)、服务指标(Service Level Indicator,SLI)、服务目标(Service Level Objective,SLO)等方面进行衡量。 +通常情况下,服务的可用性可以用服务承诺(Service Level Agreement,SLA)、服务指标(Service Level Indicator,SLI)、服务目标(Service Level Objective,SLO)等方面进行衡量。 ### 几个 9 的指标 @@ -23,7 +22,7 @@ SLA)、服务指标(Service Level Indicator,SLI)、服务目标(Servic | 六个 9 | 99.9999% | 31 秒 | 极高要求 | | 七个 9 | 99.99999% | 3 秒 | N/A | -一般来说,单点的服务器系统至少应能满足两个 9;普通企业信息系统三个 9 就肯定足够了(大家可以统计下自己企业内因系统维护每年要停多少时间),系统能达到四个 9 已经是领先水平了(参考 AWS 等云计算平台)。电信级的应用一般需要能达到五个 9,这已经很厉害了,一年里面最多允许出现五分钟左右的服务不可用。六个 9 以及以上的系统,就更加少见了,要实现往往意味着极高的代价。 +一般来说,单点的服务器系统至少应能满足两个 9;普通企业信息系统应能满足三个 9;少数领先企业(如亚马逊、甲骨文)产品能实现四个 9 甚至更多。大型金融和电信系统指标是五个 9,意味着每年最多允许出现五分钟左右的服务故障。五个 9 以上的系统十分罕见,要实现往往意味着极高的成本。 ### 两个核心时间 diff --git a/04_distributed_system/bft.md b/04_distributed_system/bft.md index 18d4923..5af3c4a 100644 --- a/04_distributed_system/bft.md +++ b/04_distributed_system/bft.md @@ -1,10 +1,10 @@ ## 拜占庭问题与算法 -拜占庭问题(Byzantine Problem)又叫拜占庭将军(Byzantine Generals Problem)问题,讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的如何达成共识问题。拜占庭容错(Byzantine Fault Tolerant,BFT)讨论的是容忍拜占庭错误的共识算法。 +拜占庭问题(Byzantine Problem)又叫拜占庭将军(Byzantine Generals Problem)问题,讨论的是在少数节点有可能作恶(消息可能被伪造)的场景下,如何达成共识问题。拜占庭容错(Byzantine Fault Tolerant,BFT)讨论的是容忍拜占庭错误的共识算法。 ### 两将军问题 -拜占庭问题之前,学术界就已经存在两将军问题的讨论(《Some constraints and tradeofis in the design of network communications》,1975 年):两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致?根据 FLP 不可能原理,这个问题无通用解。 +拜占庭问题之前,早在 1975 年,学术界就已经开始两将军问题的讨论(《Some constraints and tradeofis in the design of network communications》):两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致?这是典型的异步双方共识模型,根据 FLP 不可能原理,这个问题不存在通用解。 ### 拜占庭问题 @@ -12,8 +12,7 @@ 拜占庭问题即讨论在此情况下,如何让忠诚的将军们能达成行动的一致。 -在大多数的分布式系统中,拜占庭的场景并不多见。然而在特定场景下存在意义,例如允许匿名参与的系统(如比特币),或是出现欺诈可能造成巨大损失的情况。 - +一般分布式场景下,拜占庭需求并不多见,但在特定场景下会有较大意义。例如容易匿名参与的系统(如比特币),或是出现欺诈可能造成巨大损失的情况(金融系统)。 ### 问题的解决 @@ -31,7 +30,7 @@ 另外存在 F − 1 个不确定的信息。合作者要想达成一致,必须进一步的对所获得的消息进行判定,询问其他人某个被怀疑对象的消息值,并通过取多数来作为被怀疑者的信息值。这个过程可以进一步递归下去。 -Leslie Lamport 等人在论文《Reaching agreement in the presence of faults》中证明,当叛变者不超过 1/3 时,存在有效的拜占庭容错算法(最坏需要 F+1 轮交互)。反之,如果叛变者过多,超过 1/3,则无法保证一定能达到一致结果。 +1980 年,Leslie Lamport 等人在论文《Reaching agreement in the presence of faults》中证明,当叛变者不超过 1/3 时,存在有效的拜占庭容错算法(最坏需要 F+1 轮交互)。反之,如果叛变者过多,超过 1/3,则无法保证一定能达到一致结果。 那么,当存在多于 1/3 的叛变者时,有没有可能存在解决方案呢? @@ -45,23 +44,26 @@ Leslie Lamport 等人在论文《Reaching agreement in the presence of faults》 拜占庭容错算法最早的讨论可以追溯到 Leslie Lamport 等人 1982 年 发表的论文《The Byzantine Generals Problem》,之后出现了大量的改进工作,代表性成果包括《Optimal Asynchronous Byzantine Agreement》(1992 年)、《Fully Polynomial Byzantine Agreement for n>3t Processors in t+1 Rounds》(1998 年)等。长期以来,拜占庭问题的解决方案都存在运行过慢,或复杂度过高的问题,直到“实用拜占庭容错算法”(Practical Byzantine Fault Tolerance,PBFT) 算法的提出。 -1999 年,这一算法由 Castro 和 Liskov 于论文《Practical Byzantine Fault Tolerance and Proactive Recovery》中提出。该算法基于前人工作(特别是 Paxos 相关算法,因此也被称为 Byzantine Paxos)进行了优化,首次将拜占庭容错算法复杂度从指数级降低到了多项式级,目前已得到广泛应用。其可以在恶意节点不超过总数 1/3 的情况下同时保证 Safety 和 Liveness。 +1999 年,PBFT 算法由 Miguel Castro 和 Barbara Liskov + 于论文《Practical Byzantine Fault Tolerance》中提出。该算法基于前人工作(特别是 Paxos 相关算法,因此也被称为 Byzantine Paxos)进行了优化,首次将拜占庭容错算法复杂度从指数级降低到了多项式(平方)级,目前已得到广泛应用。其可以在恶意节点不超过总数 1/3 的情况下同时保证 Safety 和 Liveness。 PBFT 算法采用密码学相关技术(RSA 签名算法、消息验证编码和摘要)确保消息传递过程无法被篡改和破坏。 -算法整体的基本过程如下: +算法的基本过程如下: * 首先,通过轮换或随机算法选出某个节点为主节点,此后只要主节点不切换,则称为一个视图(View)。 -* 在某个视图中,客户端将请求 `` 发送给主节点,主节点负责广播请求到所有其它副本节点。 +* 在某个视图中,客户端将请求 `` 发送给主节点(如果客户端发给从节点,从节点可以转发给主节点),主节点负责广播请求到所有其它从节点并完成共识。 * 所有节点处理完成请求,将处理结果 `` 返回给客户端。客户端检查是否收到了至少 f+1 个来自不同节点的相同结果,作为最终结果。 主节点广播过程包括三个阶段的处理:预准备(Pre-Prepare)、准备(Prepare)和提交(Commit)。预准备和准备阶段确保在同一个视图内请求发送的顺序正确;准备和提交阶段则确保在不同视图之间的确认请求是保序的。 -* 预准备阶段:主节点为从客户端收到的请求分配提案编号,然后发出预准备消息 `<,message>` 给各副本节点,其中 message 是客户端的请求消息,digest 是消息的摘要。 -* 准备阶段:副本节点收到预准备消息后,检查消息。如消息合法,则向其它节点发送准备消息 ``,带上自己的 id 信息,同时接收来自其它节点的准备消息。收到准备消息的节点对消息同样进行合法性检查。验证通过则把这个准备消息写入消息日志中。集齐至少 2f+1 个验证过的消息才进入准备状态。 -* 提交阶段:广播 commit 消息,告诉其它节点某个提案 n 在视图 v 里已经处于准备状态。如果集齐至少 2f+1 个验证过的 commit 消息,则说明提案通过。 +* 预准备阶段:主节点为从客户端收到的请求分配提案编号,然后发出预准备消息 `<,message>` 给各从节点,主节点需要对预准备消息进行签名。其中 n 是主节点为这个请求分配的序号,message 是客户端的请求消息,digest 是消息的摘要。这一步的目的是为请求分配序号并通知其他节点,因此可以不包括原始的请求消息,可以通过其他方式将请求同步到从节点。 +* 准备阶段:从节点收到预准备消息后,检查消息(包括核对签名、视图、编号)。如消息合法,则向其它节点发送准备消息 ``,带上自己的 id 信息,并添加签名。收到准备消息的节点同样对消息进行合法性检查。节点集齐至少 2f+1 个验证过的消息则认为验证通过,把这个准备消息写入本地提交消息日志中。这一步是为了确认大多数节点已经对序号达成共识,本节点已经准备好进行提交了。 +* 提交阶段:广播 commit 消息 `` 并添加自己签名,告诉其它节点某个编号为 n 的提案在视图 v 里已经处于提交状态。如果集齐至少 2f+1 个验证过的 commit 消息,则说明提案被整个系统接受。 + +PBFT 算法和 Raft 算法的过程十分类似。区别在于 PBFT 算法中并不假设主节点一定是可靠的,因此增加了额外的从节点之间的交互,当发现主节点不可靠时通过重新选举选出新的主节点。 -具体实现上还包括视图切换、checkpoint 等机制,读者可自行参考论文内容,在此不再赘述。 +具体实现上还包括 checkpoint(同步节点状态和清理本地日志数据)、视图切换(重新选举主节点)等机制,读者可自行参考论文内容,在此不再赘述。 拜占庭容错类的算法因为要考虑最恶意的存在“捣乱”者的情况,在大规模场景下共识性能往往会受到影响。 @@ -69,17 +71,18 @@ PBFT 算法采用密码学相关技术(RSA 签名算法、消息验证编码 拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且在大规模场景下要完成最终确认的过程容易受干扰,难以达成共识。 -2014 年,斯坦福的 Christopher Copeland 和 Hongxia Zhong 在论文《Tangaroa: a byzantine fault tolerant raft》中提出在 Raft 算法基础上借鉴 PBFT 算法的一些特性(包括签名、恶意领导探测、选举校验等)来实现拜占庭容错性,兼顾可实现性和鲁棒性。该论文也启发了 Kadena 等项目的出现,实现更好性能的拜占庭算法。 +2014 年,斯坦福大学的 Christopher Copeland 和 Hongxia Zhong 在论文《Tangaroa: a byzantine fault tolerant raft》中提出在 Raft 算法基础上借鉴 PBFT 算法的一些特性(包括签名、恶意领导探测、选举校验等)来实现拜占庭容错性,兼顾可实现性和鲁棒性。该论文也启发了 Kadena 等项目的出现,实现更好性能的拜占庭算法。 2017 年,MIT 计算机科学与人工智能实验室(CSAIL)的 Yossi Gilad 和 Silvio Micali 等人在论文《Algorand: Scaling Byzantine Agreements for Cryptocurrencies》中针对 PBFT 算法在很多节点情况下性能不佳的问题,提出先选出少量记账节点,然后再利用可验证随机函数(Verifiable Random Function,VRF)来随机选取领导节点,避免全网直接做共识,将拜占庭算法扩展到了支持较大规模的应用场景,同时保持较好的性能(1000+ tps)。 -此外,康奈尔大学的 Rafael Pass 和 Elaine Shi 在论文《The Sleepy Model of Consensus》中还探讨了在动态场景(大量节点离线情况)下如何保障共识的安全性,所提出的 Sleepy Consensus 算法可以在活跃诚实节点达到一半以上时确保完成拜占庭共识。 +此外,康奈尔大学的 Rafael Pass 和 Elaine Shi 在论文《The Sleepy Model of Consensus》中探讨了在动态场景(大量节点离线情况)下如何保障共识的安全性,提出的 Sleepy Consensus 算法可以在活跃诚实节点达到一半以上时确保完成拜占庭共识。 -2018 年,清华大学的 Chenxing Li 等在论文《Scaling Nakamoto Consensus to Thousands of Transactions per Second》中提出了 Conflux 共识协议。该协议在 GHOST 算法基础上改善了安全性,面向公有区块链场景下,理论上能达到 6000+ tps。 +2018 年,清华大学的 Chenxing Li 等在论文《Scaling Nakamoto Consensus to Thousands of Transactions per Second》中提出了 Conflux 共识协议。该协议在 GHOST 算法基础上改善了安全性,面向公有区块链场景,理论上能达到 6000+ tps。 -比特币网络在设计时使用了 PoW(Proof of Work)的概率型算法思路,从如下两个角度解决大规模场景下的拜占庭容错问题。 +2019 年,康奈尔大学和 VMWare 研究院的 Maofan Yin 等在论文《HotStuff: BFT Consensus with Linearity and Responsiveness》中对 PBFT 算法进行了改进:利用主节点来简化通信量,同时将视图切换与共识操作进行统一。值得一提的是,Facebook Libra 白皮书中采用了该成果。 -首先,限制一段时间内整个网络中出现提案的个数(通过工作量证明来增加提案成本);其次是丢掉最终确认的约束,约定好始终沿着已知最长的链进行拓展。共识的最终确认是概率意义上的存在。这样,即便有人试图恶意破坏,也会付出相应的经济代价(超过整体系统一半的工作量)。 +比特币网络在设计时使用了 PoW(Proof of Work)的概率型算法思路,从如下两个角度解决大规模场景下的拜占庭容错问题。 -后来的各种 PoX 系列算法,也都是沿着这个思路进行改进,采用经济博弈来制约攻击者。 +首先,限制一段时间内整个网络中出现提案的个数(通过工作量证明来增加提案成本);其次是丢掉最终确认的约束,约定好始终沿着已知最长的链进行拓展。共识的最终确认是概率意义上的存在。这样,即便有人试图恶意破坏,也会付出相应的经济代价(超过整体系统一半的工作量)。后来的各种 PoX 系列算法,也都是沿着这个思路进行改进,采用经济博弈来制约攻击者。 +另外,由于要处理的场景比较苛刻,BFT 类算法的吞吐量往往不高。除了可以放宽约束外(例如通常情况下信任主节点,出现问题再回滚),还可以引入多个互不影响的主节点进行并行处理。 diff --git a/04_distributed_system/cap.md b/04_distributed_system/cap.md index 55ccab7..5e0cca8 100644 --- a/04_distributed_system/cap.md +++ b/04_distributed_system/cap.md @@ -1,6 +1,6 @@ ## CAP 原理 -CAP 原理最早出现在 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在 ACM 组织的 Principles of Distributed Computing(PODC)研讨会上提出猜想。两年后,麻省理工学院的 Nancy Lynch 等学者进行了理论证明。 +CAP 原理最早出现在 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在 ACM 组织的 Principles of Distributed Computing(PODC)研讨会上提出的猜想。两年后,麻省理工学院的 Nancy Lynch 等学者进行了理论证明。 该原理被认为是分布式系统领域的重要原理之一,深刻影响了分布式计算与系统设计的发展。 diff --git a/04_distributed_system/flp.md b/04_distributed_system/flp.md index 713380b..49a8eef 100644 --- a/04_distributed_system/flp.md +++ b/04_distributed_system/flp.md @@ -2,32 +2,32 @@ ### 定义 -**FLP 不可能原理**:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法(No completely asynchronous consensus protocol can tolerate even a single unannounced process death)。 +**FLP 不可能原理**:在网络可靠、但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法(No completely asynchronous consensus protocol can tolerate even a single unannounced process death)。 -提出并证明该定理的论文《Impossibility of Distributed Consensus with One Faulty Process》是由 Fischer,Lynch 和 Patterson 三位科学家于 1985 年发表,该论文后来获得了 Dijkstra(就是发明最短路径算法的那位计算机科学家)奖。 +提出并证明该定理的论文《Impossibility of Distributed Consensus with One Faulty Process》是由 Fischer、Lynch 和 Patterson 三位科学家于 1985 年发表,该论文后来获得了 Dijkstra(就是发明最短路径算法的那位计算机科学家)奖。 -FLP 不可能原理告诉我们,**不要浪费时间,去试图为异步分布式系统设计面向任意场景的共识算法**。 +FLP 不可能原理告诉我们,**不要浪费时间去试图为异步分布式系统设计面向任意场景的共识算法**。 ### 如何理解 要正确理解 FLP 不可能原理,首先要弄清楚“异步”的含义。 -在分布式系统中,同步和异步这两个术语存在特殊的含义。 +在分布式系统中,同步和异步这两个术语存在特殊的含义: -* 同步,是指系统中的各个节点的时钟误差存在上限;并且消息传递必须在一定时间内完成,否则认为失败;同时各个节点完成处理消息的时间是一定的。因此同步系统中可以很容易地判断消息是否丢失。 +* 同步,是指系统中的各个节点的时钟误差存在上限;并且消息传递必须在一定时间内完成,否则认为失败;同时各个节点完成处理消息的时间是一定的。因此同步系统中可以很容易地判断消息是否丢失; * 异步,则意味着系统中各个节点可能存在较大的时钟差异;同时消息传输时间是任意长的;各节点对消息进行处理的时间也可能是任意长的。这就造成无法判断某个消息迟迟没有被响应是哪里出了问题(节点故障还是传输故障?)。不幸地是,现实生活中的系统往往都是异步系统。 -FLP 不可能性在论文中以图论的形式进行了严格证明。要理解其基本原理并不复杂,一个不严谨的例子如下。 +FLP 不可能原理在论文中以图论的形式进行了严格证明。要理解其基本原理并不复杂,一个不严谨的例子如下。 -三个人在不同房间,进行投票(投票结果是 0 或者 1)。彼此可以通过电话进行沟通,但经常有人会时不时睡着。比如某个时候,A 投票 0,B 投票 1,C 收到了两人的投票,然后 C 睡着了。此时,A 和 B 将永远无法在有限时间内获知最终的结果,究竟是 C 没有应答还是应答的时间过长。如果可以重新投票,则类似情形可以在每次取得结果前发生,这将导致共识过程永远无法完成。 +三个人在不同房间进行投票(投票结果是 0 或者 1),彼此可以通过电话进行沟通,但经常有人会时不时睡着。比如某个时候,A 投票 0,B 投票 1,C 收到了两人的投票,然后 C 睡着了。此时,A 和 B 将永远无法在有限时间内获知最终的结果,究竟是 C 没有应答还是应答的时间过长。如果可以重新投票,则类似情形可以在每次取得结果前发生,这将导致共识过程永远无法完成。 -FLP 原理实际上说明对于允许节点失效情况下,纯粹异步系统无法确保共识在有限时间内完成。即便对于非拜占庭错误的前提下,包括 Paxos、Raft 等算法也都存在无法达成共识的极端情况,只是在工程实践中这种情况出现的概率很小。 +FLP 不可能原理实际上说明对于允许节点失效情况下,纯粹异步系统无法确保共识在有限时间内完成。即便对于非拜占庭错误的前提下,包括 Paxos、Raft 等算法也都存在无法达成共识的极端情况,只是在工程实践中这种情况出现的概率很小。 那么,这是否意味着研究共识算法压根没有意义? -不必如此悲观。学术研究,往往考虑地是数学和物理意义上理想化的情形,很多时候现实世界要稳定得多(感谢这个世界如此鲁棒!)。例如,上面例子中描述的最坏情形,每次都发生的概率其实并没有那么大。工程实现上某次共识失败,再尝试几次,很大可能就成功了。 +不必如此悲观。学术研究,往往考虑地是数学和物理意义上理想化的情形,很多时候现实世界要稳定得多(感谢这个世界如此鲁棒!)。例如,上面例子中描述的最坏情形,每次都发生的概率其实并没有那么大。工程实现上,若某次共识失败,再尝试几次,很大可能就成功了。 -**科学告诉你什么是不可能的;工程则告诉你,付出一些代价,可以把它变成可行。** +**科学告诉你,什么是不可能的;工程则告诉你,付出一些代价,可以把它变成可行。** 这就是科学和工程不同的魅力。FLP 不可能原理告诉大家不必浪费时间去追求完美的共识方案,而要根据实际情况设计可行的工程方案。 @@ -35,4 +35,4 @@ FLP 原理实际上说明对于允许节点失效情况下,纯粹异步系统 回答这一问题的是另一个很出名的原理:CAP 原理。 -*注:科学告诉你去赌场是愚蠢的,因为最终总会输钱;工程则告诉你,如果你愿意接受最终输钱的风险,中间说不定能偶尔小赢几笔呢!* \ No newline at end of file +*注:科学告诉你去赌场是愚蠢的,因为最终总会输钱;工程则告诉你,如果你愿意接受最终输钱的风险,中间说不定能偶尔小赢几笔呢!* diff --git a/04_distributed_system/paxos.md b/04_distributed_system/paxos.md index e9eaae8..31fc1e0 100644 --- a/04_distributed_system/paxos.md +++ b/04_distributed_system/paxos.md @@ -1,38 +1,39 @@ ## Paxos 算法与 Raft 算法 -Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题。这也是分布式共识领域最为常见的问题。因为最早是 Leslie Lamport 用 Paxos 岛的故事模型来进行描述,而得以命名。解决 Paxos 问题的算法主要有 Paxos 系列算法和 Raft 算法。 +Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下如何达成共识。这也是分布式共识领域最为常见的问题。因为最早是 Leslie Lamport 用 Paxos 岛的故事对该算法进行描述的,因而得名。解决 Paxos 问题的算法主要有 Paxos 系列算法和 Raft 算法。 ### Paxos 算法 -1988 年,Brian M. Oki 和 -Barbara H. Liskov 在论文《Viewstamped Replication: A New Primary Copy Method to +1988 年,Brian M. Oki 和 Barbara H. Liskov 在论文《Viewstamped Replication: A New Primary Copy Method to Support Highly-Available Distributed Systems》中首次提出了解决 Paxos 问题的算法。 1990 年由 Leslie Lamport 在论文《The Part-time Parliament》中提出的 [Paxos](http://research.microsoft.com/users/lamport/pubs/lamport-paxos.pdf) 共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Paxos 算法本质上与前者相同,被广泛应用在 Chubby、ZooKeeper 这样的分布式系统中。Leslie Lamport 作为分布式系统领域的早期研究者,因为相关杰出贡献获得了 2013 年度图灵奖。 论文中为了描述问题编造了一个虚构故事:在古代爱琴海的 Paxos 岛,议会如何通过表决来达成共识。议员们通过信使传递消息来对议案进行表决。但议员可能离开,信使可能走丢,甚至重复传递消息。 -Paxos 是首个得到证明并被广泛应用的共识算法,其原理类似 [两阶段提交](https://en.wikipedia.org/wiki/Two-phase_commit_protocol) 算法,进行了泛化和扩展,通过消息传递来逐步消除系统中的不确定状态。 +Paxos 是首个得到证明并被广泛应用的共识算法,其原理类似于 [两阶段提交](https://en.wikipedia.org/wiki/Two-phase_commit_protocol) 算法,进行了泛化和扩展,通过消息传递来逐步消除系统中的不确定状态。 作为后来很多共识算法(如 Raft、ZAB 等)的基础,Paxos 算法基本思想并不复杂,但最初论文中描述比较难懂,甚至连发表也几经波折。2001 年,Leslie Lamport 还专门发表论文《Paxos Made Simple》进行重新解释。 +*注:Leslie Lamport 对密码学也有研究,1979 年提出的多 Hash 签名机制,具备抗量子计算攻击特性。* + #### 基本原理 -算法中存在三种逻辑角色的节点,在实现中同一节点可以担任多个角色。 +算法中存在三种逻辑角色的节点,在实现中同一节点可以担任多个角色: -* 提案者(Proposer):提出一个提案,等待大家批准(Chosen)为结案(Value)。系统中提案都拥有一个自增的唯一提案号。往往由客户端担任该角色。 -* 接受者(Acceptor):负责对提案进行投票,接受(Accept)提案。往往由服务端担任该角色。 +* 提案者(Proposer):提出一个提案,等待大家批准(Chosen)为决议(Value)。系统中提案都拥有一个自增的唯一提案号。往往由客户端担任该角色; +* 接受者(Acceptor):负责对提案进行投票,接受(Accept)提案。往往由服务端担任该角色; * 学习者(Learner):获取批准结果,并帮忙传播,不参与投票过程。可为客户端或服务端。 -算法需要满足安全性(Safety) 和存活性(Liveness)两方面的约束要求。实际上这两个基础属性也是大部分分布式算法都该考虑的。 +算法需要满足安全性(Safety) 和存活性(Liveness)两方面的约束要求。实际上这两个基础属性也是大部分分布式算法都该考虑的: * Safety:保证决议(Value)结果是对的,无歧义的,不会出现错误情况。    * 只有是被提案者提出的提案才可能被最终批准; - * 在一次执行中,只批准(chosen)一个最终决议。被多数接受(accept)的结果成为决议; + * 在一次执行中,只批准(chosen)一个最终决议。被多数接受(accept)的结果成为决议。 * Liveness:保证决议过程能在有限时间内完成。 * 决议总会产生,并且学习者能获得被批准的决议。 -基本思路类似两阶段提交:多个提案者先要争取到提案的权利(得到大多数接受者的支持);成功的提案者发送提案给所有人进行确认,得到大部分人确认的提案成为批准的结案。 +基本思路类似两阶段提交:多个提案者先要争取到提案的权利(得到大多数接受者的支持);成功的提案者发送提案给所有人进行确认,得到大部分人确认的提案成为批准的决议。 Paxos 并不保证系统总处在一致的状态。但由于每次达成共识至少有超过一半的节点参与,这样最终整个系统都会获知共识结果。一个潜在的问题是提案者在提案过程中出现故障,这可以通过超时机制来缓解。极为凑巧的情况下,每次新一轮提案的提案者都恰好故障,又或者两个提案者恰好依次提出更新的提案,则导致活锁,系统会永远无法达成共识(实际发生概率很小)。 @@ -59,7 +60,7 @@ Paxos 能保证在超过一半的节点正常工作时,系统总能以较大 一种情况是同一时间片段(如一个提案周期)内只有一个提案者,这时可以退化到单提案者的情形。需要设计一种机制来保障提案者的正确产生,例如按照时间、序列、或者大家猜拳(出一个参数来比较)之类。考虑到分布式系统要处理的工作量很大,这个过程要尽量高效,满足这一条件的机制非常难设计。 -另一种情况是允许同一时间片段内可以出现多个提案者。那同一个节点可能收到多份提案,怎么对他们进行区分呢?这个时候采用只接受第一个提案而拒绝后续提案的方法也不适用。很自然的,提案需要带上不同的序号。节点需要根据提案序号来判断接受哪个。比如接受其中序号较大(往往意味着是接受新提出的,因为旧提案者故障概率更大)的提案。 +另一种情况是允许同一时间片段内可以出现多个提案者。那同一个节点可能收到多份提案,怎么对它们进行区分呢?如果一个节点只接受它收到的首个提案,将导致不同节点可能接受不同的提案。很自然地,提案需要带上不同的序号。节点根据序号来判断接受哪个提案。通常采用递增序号,选择接受序号最大的提案。这是因为旧提案可能基于过期数据,导致失败概率更大。 如何为提案分配序号呢?一种可能方案是每个节点的提案数字区间彼此隔离开,互相不冲突。为了满足递增的需求可以配合用时间戳作为前缀字段。 @@ -74,20 +75,22 @@ Paxos 里面对这两个阶段分别命名为准备(Prepare)和提交(Comm **准备阶段**: -* 提案者发送自己计划提交的提案的编号到多个接受者,试探是否可以锁定多数接受者的支持。 -* 接受者时刻保留收到过提案的最大编号和接受的最大提案。如果收到提案号比目前保留的最大提案号还大,则返回自己已接受的提案值(如果还未接受过任何提案,则为空)给提案者,更新当前最大提案号,并说明不再接受小于最大提案号的提案。 +* 提案者向多个接受者发送计划提交的提案编号 n,试探是否可以锁定多数接受者的支持; +* 接受者 i 收到提案编号 n,检查回复过的提案的最大编号 M_i。如果 n > M_i,则向提案者返回准备接受(accept)提交的最大编号的提案 P_i(如果还未接受过任何提案,则为空),并不再接受小于 n 的提案,同时更新 M_i = n。这一步是让接受者筛选出它收到的最大编号的提案,接下来只接受其后续提交。 **提交阶段**: -* 提案者如果收到大多数的回复(表示大部分人听到它的请求),则可准备发出带有刚才提案号的接受消息。如果收到的回复中不带有新的提案,说明锁定成功。则使用自己的提案内容;如果返回中有提案内容,则替换提案值为返回中编号最大的提案值。如果没收到足够多的回复,则需要再次发出请求。 -* 接受者收到接受消息后,如果发现提案号不小于已接受的最大提案号,则接受该提案,并更新接受的最大提案。 +* 某个提案者如果收到大多数接受者的回复(表示大部分人收到了 n),则准备发出带有 n 的提交消息。如果收到的回复中带有提案 P_i(说明自己看到的信息过期),则替换选编号最大的 P_i 的值为提案值;否则指定一个新提案值。如果没收到大多数回复,则再次发出请求; +* 接受者 i 收到序号为 n 的提交消息,如果发现 n >= P_i 的序号,则接受提案,并更新 P_i 序号为 n。 + +一旦多数接受者接受了共同的提案值,则形成决议,成为最终确认。之后可以开始新一轮的提交确认。 -一旦多数接受者接受了共同的提案值,则形成决议,成为最终确认。 +需要注意,Paxos 并不一定能保证每一轮都能提交提案。 ### Raft 算法 Paxos 算法虽然给出了共识设计,但并没有讨论太多实现细节,也并不重视工程上的优化,因此后来在学术界和工程界出现了一些改进工作,包括 Fast Paxos、Multi-Paxos,Zookeeper Atomic Broadcast(ZAB)和 Raft 等。这些算法重点在于改进执行效率和可实现性。 -其中,[Raft](https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf) 算法由斯坦福大学的 Diego Ongaro 和 John Ousterhout 于 2014 年在论文《In Search of an Understandable Consensus Algorithm》中提出,基于 Multi-Paxos 算法进行重新简化设计和实现,提高了工程实践性。Raft 算法的主要设计思想与 ZAB 类似,通过先选出领导节点来简化流程和提高效率。实现上分解了领导者选举、日志复制和安全方面的考虑,并通过约束减少了不确定性的状态空间。 +其中,[Raft](https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf) 算法由斯坦福大学的 Diego Ongaro 和 John Ousterhout 于 2014 年在论文《In Search of an Understandable Consensus Algorithm》中提出,基于 Multi-Paxos 算法进行重新简化设计和实现,提高了工程实践性。Raft 算法的主要设计思想与 ZAB 类似,通过先选出领导节点来简化流程和提高效率。实现上解耦了领导者选举、日志复制和安全方面的需求,并通过约束减少了不确定性的状态空间。 算法包括三种角色:领导者(Leader)、候选者(Candidate) 和跟随者(Follower),每个任期内选举一个全局的领导者。领导者角色十分关键,决定日志(log)的提交。每个日志都会路由到领导者,并且只能由领导者向跟随者单向复制。 @@ -96,4 +99,4 @@ Paxos 算法虽然给出了共识设计,但并没有讨论太多实现细节 * 领导者选举:开始所有节点都是跟随者,在随机超时发生后未收到来自领导者或候选者消息,则转变角色为候选者(中间状态),提出选举请求。最近选举阶段(Term)中得票超过一半者被选为领导者;如果未选出,随机超时后进入新的阶段重试。领导者负责从客户端接收请求,并分发到其他节点; * 同步日志:领导者会决定系统中最新的日志记录,并强制所有的跟随者来刷新到这个记录,数据的同步是单向的,确保所有节点看到的视图一致。 -此外,领导者会定期向所有跟随者发送心跳消息,跟随者如果发现心跳消息超时未收到,则可以认为领导者已经下线,尝试发起新的选举过程。 \ No newline at end of file +此外,领导者会定期向所有跟随者发送心跳消息,跟随者如果发现心跳消息超时未收到,则可以认为领导者已经下线,尝试发起新的选举过程。 diff --git a/04_distributed_system/problem.md b/04_distributed_system/problem.md index 84c12cb..fad2cb9 100644 --- a/04_distributed_system/problem.md +++ b/04_distributed_system/problem.md @@ -18,7 +18,7 @@ 举个现实生活中的例子,多个售票处同时出售某线路上的火车票,该线路上存在多个经停站,怎么才能保证在任意区间都不会出现超售(同一个座位卖给两个人)的情况? -这个问题看起来似乎没那么难,现实生活中经常通过分段分站售票的机制。然而,要支持海量的用户进行并行购票,并非易事(参考 12306 的案例)。特别是计算机系统往往需要达到远超物理世界的高性能和高可扩展性需求,挑战会变得更大。这也是为何每年到了促销季,各大电商平台都要提前完善系统。 +这个问题看起来似乎没那么难,现实生活中经常通过分段分站售票的机制。然而,要支持海量的用户进行并行购票,并非易事(如 12306 网站高峰期日均访问量超过 500 亿次)。特别是计算机系统往往需要达到远超物理世界的高性能和高可扩展性需求,挑战会变得更大。这也是为何每年到了促销季,各大电商平台都要提前完善系统。 *注:一致性关注的是系统呈现的状态,并不关注结果是否正确;例如,所有节点都对某请求达成否定状态也是一种一致性。* @@ -41,7 +41,7 @@ 反过来,如果节点都很鲁棒,性能足够强,同时网络带宽足够大、延迟足够低,这样的集群系统往往更容易实现一致性。 -然而,真实情况可能比人们预期的糟糕。2015年,论文《Taming Uncertainty in Distributed Systems with Help from the Network》中指出,即便部署了专业设备和冗余网络的数据中心,每个月发生的网络故障高达 12 次。 +然而,真实情况可能比人们预期的糟糕。2015年,论文《Taming Uncertainty in Distributed Systems with Help from the Network》中指出,即便部署了专业设备和冗余网络的中等规模的数据中心,每个月发生的网络故障高达 12 次。 ### 一致性的要求 @@ -64,13 +64,11 @@ 最后的合法性看似绕口,但其实比较容易理解,即达成的结果必须是节点执行操作的结果。仍以卖票为例,如果两个售票处分别决策某张票出售给张三和李四,那么最终达成一致的结果要么是张三,要么是李四,而不能是其他人。 ### 带约束的一致性 -从前面的分析可以看到,要实现绝对理想的严格一致性(Strict Consistency)代价很大。除非系统不发生任何故障,而且所有节点之间的通信无需任何时间,此时整个系统其实就等价于一台机器了。实际上,越强的一致性要求往往意味着带来越弱的处理性能,以及越差的可扩展性。根据实际需求的不用,人们可能选择不同强度的一致性,包括强一致性(Strong Consistency)和弱一致性(Weak Consistency)。 +从前面的分析可以看出,要实现理想的严格一致性(Strict Consistency)代价很大。除非系统所有节点都不发生任何故障,而且节点间通信没有延迟,此时整个系统等价于一台机器。实际上,实现较强的一致性要求同步操作,容错性差,同时会牺牲部分性能和可扩展性。实际系统往往会选择不同强度的一致性,主要包括强一致性(Strong Consistency)和弱一致性(Weak Consistency)两大类。 -一般地,强一致性主要包括下面两类: +强一致性主要包括顺序一致性([Sequential Consistency](https://en.wikipedia.org/wiki/Sequential_consistency))和线性一致性([Linearizability Consistency](https://en.wikipedia.org/wiki/Linearizability): -* 顺序一致性([Sequential Consistency](https://en.wikipedia.org/wiki/Sequential_consistency)):又叫因果一致性,最早由 Leslie Lamport 1979 年经典论文《How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs》中提出,是一种比较强的约束。所有进程看到的全局执行顺序(total order)一致(否则数据副本就不一致了);并且每个进程看自身操作的顺序(local order)跟实际发生顺序一致。例如,某进程先执行 A,后执行 B,则实际得到的全局结果(其它进程也看到这个结果)中就应该为 A 在 B 前面,而不能反过来。如果另外一个进程先后执行了C、D操作,则全局顺序可以共识为 A、B、C、D 或 A、C、B、D 或 C、A、B、D 或 C、D、A、B 的一种(即 A、B 和 C、D 的组合),决不能出现 B、A 或 D、C。顺序一致性实际上限制了各进程内指令的偏序关系,但不在进程间按照物理时间进行全局排序,属于实践中可行的最强保证。以算盘为例,每个进程的事件是某根横轴上的算珠,它们可以前后拨动(改变不同进程之间先后顺序),但同一个横轴上的算珠的相对先后顺序无法改变。 -* 线性一致性([Linearizability Consistency](https://en.wikipedia.org/wiki/Linearizability)):Maurice P. Herlihy 与 Jeannette M. Wing 在 1990 年经典论文《Linearizability: A Correctness Condition for Concurrent Objects》中共同提出,是一种更强的保证。在顺序一致性前提下加强了进程间的操作排序,形成理想化的全局顺序。线性一致性要求系统看起来似乎只有一个数据副本,客户端操作都是原子的,并且顺序执行;所有进程的操作似乎是实时同步的,并且跟实际发生顺序一致。例如某个客户端写入成功,则其它客户端将立刻看到最新的值。线性一致性下所有进程的所有事件似乎都处于同一个横轴,存在唯一的先后顺序。线性一致性很难实现,目前基本上要么依赖于全局的时钟或锁,要么通过一些复杂同步算法,性能往往不高。 +* 顺序一致性:又叫因果一致性,最早由 Leslie Lamport 1979 年经典论文《How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs》中提出,是一种较强的约束。所有进程看到的全局执行顺序(total order)一致(否则数据副本就不一致了);并且每个进程看自身操作的顺序(local order)跟实际发生顺序一致。例如,某进程先执行 A,后执行 B,则实际得到的全局结果(其它进程也看到这个结果)中就应该为 A 在 B 前面,而不能反过来。如果另一个进程先后执行了C、D操作,则全局顺序可以共识为 A、B、C、D 或 A、C、B、D 或 C、A、B、D 或 C、D、A、B 的一种(即 A、B 和 C、D 的组合),决不能出现 B、A 或 D、C。顺序一致性实际上限制了各进程自身指令的偏序关系,但不需要在进程间按照物理时间进行全局排序,属于实践中应用较多的强一致性。以算盘为例,每个进程的事件是某根横轴上的算珠,它们可以前后拨动(改变不同进程之间先后顺序),但同一个横轴上的算珠的相对先后顺序无法改变。 +* 线性一致性:由 Maurice P. Herlihy 与 Jeannette M. Wing 在 1990 年经典论文《Linearizability: A Correctness Condition for Concurrent Objects》中共同提出,是最强的一致性。它在顺序一致性前提下增加了进程间的操作顺序要求,形成理想化完全一致的全局顺序。线性一致性要求系统看起来似乎只有一个数据副本,客户端操作都是原子的,并且顺序执行;所有进程的操作似乎是实时同步的,并且跟实际发生顺序一致。例如某个客户端写入成功,则其它客户端将立刻看到最新的值。线性一致性下所有进程的所有事件似乎都处于同一个横轴,存在唯一的先后顺序。线性一致性较难实现,目前基本上要么依赖于全局的时钟或锁,要么通过一些共识算法,性能往往不高。 -强一致的系统往往比较难实现,而且很多场景下对一致性的需求并没有那么强。因此,可以适当放宽对一致性的要求,降低系统实现的难度。例如在一定约束下实现所谓最终一致性(Eventual Consistency),即总会存在一个时刻(而不是立刻),让系统达到一致的状态。例如电商购物时将某物品放入购物车,但是可能在最终付款时才提示物品已经售罄了。实际上,大部分的 Web 系统为了保持服务的稳定,实现的都是最终一致性。 - -相对强一致性,类似最终一致性这样在某些方面弱化的一致性,被笼统称为弱一致性。 +强一致性比较难实现,很多场景下可以放宽对一致性的要求,采用部分异步操作,从而提升性能、可扩展性,降低响应延迟,这些在某些方面弱化的一致性都笼统称为弱一致性。例如互联网领域常用的最终一致性(Eventual Consistency),允许出现临时不一致或看到过时数据,但在经历一段时间后可以达到一致的状态。例如电商购物时将某物品放入购物车,但是可能在最终付款时才提示物品已经售罄了。 diff --git a/04_distributed_system/summary.md b/04_distributed_system/summary.md index fe2556e..d30d7d3 100644 --- a/04_distributed_system/summary.md +++ b/04_distributed_system/summary.md @@ -2,6 +2,6 @@ 分布式系统是计算机学科中十分重要的一个领域。随着集群规模的不断增长,所处理的数据量越来越大,对于性能、可靠性的要求越来越高,分布式系统相关技术已经变得越来越重要,起到的作用也越来越关键。 -分布式系统中如何保证共识是个经典问题,无论在学术上还是工程上都存在很高的研究价值。令人遗憾地是,理想的(各项指标均最优)解决方案并不存在。在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的协议。通过本章的学习,读者可以体会到在工程应用中的类似设计技巧。 +分布式系统中如何保证共识是个经典问题,无论在学术上还是在工程上都存在很高的研究价值。令人遗憾的是,理想的(各项指标均最优)解决方案并不存在,在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的协议。通过本章的学习,读者可以体会到在工程应用中的类似设计技巧。 -实际上,工程领域中不少问题都不存在一劳永逸的通用解法;而实用的解决思路,都在于合理地在实际需求和条件限制之间进行灵活的取舍(trade-off)。 +实际上,工程领域中不少问题都不存在一劳永逸的通用解法;而实用的解决思路都是合理地在实际需求和条件限制之间进行灵活的取舍(trade-off)。 diff --git a/05_crypto/README.md b/05_crypto/README.md index 53698db..51f83f4 100644 --- a/05_crypto/README.md +++ b/05_crypto/README.md @@ -2,6 +2,6 @@ ** 工程领域从来没有黑科技;密码学不仅是工程。 ** -密码学为核心的安全技术在信息科技领域的重要性无需多言。离开现代密码学和信息安全技术,人类社会将无法全面步入信息时代。区块链和分布式账本中大量使用了密码学和安全技术的最新成果,特别是身份认证和隐私保护相关技术。 +密码学作为核心的安全技术在信息科技领域的重要性无需多言。离开现代密码学和信息安全技术,人类社会将无法全面步入信息时代。区块链和分布式账本中大量使用了密码学和安全技术的最新成果,特别是身份认证和隐私保护相关技术。 -从数学定理到工程实践,密码学和信息安全所涉及的知识体系十分繁杂。本章将介绍跟区块链密切相关的安全知识,包括 Hash 算法与摘要、加密算法、数字签名和证书、PKI 体系、Merkle 树、布隆过滤器、同态加密等。通过学习,读者可以了解常见安全技术体系,以及如何实现信息安全的核心要素:机密性、完整性、可认证性和不可抵赖性,为后续理解区块链的设计奠定基础。 \ No newline at end of file +从数学定理到工程实践,密码学和信息安全所涉及的知识体系十分繁杂。本章将介绍与区块链密切相关的安全知识,包括 Hash 算法与摘要、加密算法、数字签名和证书、PKI 体系、Merkle 树、布隆过滤器、同态加密等。通过本章,读者可以了解常见安全技术体系,以及如何实现信息安全的核心要素:机密性、完整性、可认证性和不可抵赖性,为后续理解区块链的设计奠定基础。 diff --git a/05_crypto/algorithm.md b/05_crypto/algorithm.md index 0f93364..4ccf047 100644 --- a/05_crypto/algorithm.md +++ b/05_crypto/algorithm.md @@ -1,6 +1,6 @@ ## 加解密算法 -加解密算法是现代密码学核心技术,从设计理念和应用场景上可以分为两大基本类型,如下表所示。 +加解密算法是现代密码学核心技术,从设计理念和应用场景上可以分为两大基本类型:对称加密、非对称加密,如下表所示。 算法类型 | 特点 | 优势 | 缺陷 | 代表算法 ------ | --- | --- | --- | ------- @@ -9,7 +9,7 @@ ### 加解密系统基本组成 -现代加解密系统的典型组件包括算法和密钥(包括加密密钥、解密密钥)。 +现代加解密系统的典型组件包括算法和密钥,密钥包括加密密钥、解密密钥。 其中,加解密算法自身是固定不变的,并且一般是公开可见的;密钥则是最关键的信息,需要安全地保存起来,甚至通过特殊硬件进行保护。一般来说,密钥需要在加密前按照特定算法随机生成,长度越长,则加密强度越大。 @@ -26,25 +26,25 @@ 缺点是参与方需要提前持有密钥,一旦有人泄露则系统安全性被破坏;另外如何在不安全通道中提前分发密钥也是个问题,需要借助额外的 Diffie–Hellman 协商协议或非对称加密算法来实现。 -对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域(如数字媒介的加密)。 +对称密码从实现原理上可以分为两种:分组加密和序列加密。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域(如数字媒介的加密)。 -**分组对称加密**代表算法包括 DES、3DES、AES、IDEA 等。 +**分组加密**的代表算法包括 DES、3DES、AES、IDEA 等。 -* DES(Data Encryption Standard):经典的分组加密算法,最早是 1977 年美国联邦信息处理标准(FIPS)采用 FIPS-46-3,将 64 位明文加密为 64 位的密文。其密钥长度为 64 位(包括 8 位校验码),现在已经很容易被暴力破解; +* DES(Data Encryption Standard):经典的分组加密算法,最早是美国联邦信息处理标准(FIPS)在 1977 年采用(FIPS-46-3),将 64 位明文加密为 64 位的密文,其密钥长度为 64 位(包括 8 位校验码),现在已经很容易被暴力破解; * 3DES:三重 DES 操作:加密 --> 解密 --> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全; * AES(Advanced Encryption Standard):由美国国家标准研究所(NIST)采用,取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段; -* IDEA(International Data Encryption Algorithm):1991 年由密码学家 James Massey 与来学嘉共同提出。设计类似于 3DES,密钥长度增加到 128 位,具有更好的加密强度。 +* IDEA(International Data Encryption Algorithm):1991 年由密码学家 James Massey 与来学嘉共同提出,设计类似于 3DES,密钥长度增加到 128 位,具有更好的加密强度。 -**序列加密**,又称流加密。1949 年,Claude Elwood Shannon(信息论创始人)首次证明,要实现绝对安全的完善保密性(Perfect Secrecy),可以通过“一次性密码本”的对称加密处理。即通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法包括 RC4 等。 +**序列加密**又称流加密。1949 年,Claude Elwood Shannon(信息论创始人)首次证明,要实现绝对安全的完善保密性(Perfect Secrecy),可以通过“一次性密码本”的对称加密处理。即通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法包括 RC4 等。 -总结下,对称加密算法适用于大量数据的加解密过程;不能用于签名场景;并且需要提前安全地分发密钥。 +总结一下,对称加密算法适用于大量数据的加解密过程,不能用于签名场景,并且需要提前安全地分发密钥。 -*注:分组加密每次只能处理固定长度的明文,因此对于过长的内容需要采用一定模式进行分割,《实用密码学》一书中推荐使用密文分组链(Cipher Block Chain,CBC)、计数器(Counter,CTR)等模式。* +*注:分组加密每次只能处理固定长度的明文,因此对于过长的内容需要采用一定模式进行分割,《实用密码学》一书中推荐使用密文分组链(Cipher Block Chain,CBC,支持串行化加解密)、计数器(Counter,CTR,支持并行化加解密)等模式。* ### 非对称加密算法 非对称加密是现代密码学的伟大发明,它有效解决了对称加密需要安全分发密钥的问题。 -顾名思义,非对称加密中,加密密钥和解密密钥是不同的,分别被称为公钥(Public Key)和私钥(Private Key)。私钥一般通过随机数算法生成,公钥可以根据私钥生成。 +顾名思义,非对称加密中,加密密钥和解密密钥是不同的,分别称为公钥(Public Key)和私钥(Private Key)。私钥一般通过随机数算法生成,公钥可以根据私钥生成。 其中,公钥一般是公开的,他人可获取的;私钥则是个人持有并且要严密保护,不能被他人获取。 @@ -52,7 +52,7 @@ 非对称加密算法的安全性往往基于数学问题,包括大数质因子分解、离散对数、椭圆曲线等经典数学难题。 -代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)、SM2 等系列算法。 +代表算法包括:RSA、ElGamal、椭圆曲线、SM2 等系列算法。 * RSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年因此获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法可以绕过大数分解而进行解密。 * ElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性,比 RSA 产生密钥更快。被应用在 PGP 等安全工具中。 @@ -80,23 +80,23 @@ RSA 类算法被认为已经很难抵御现代计算设备的破解,一般推 与以明文方式传输数据的 HTTP 协议不同,HTTPS 在传统的 HTTP 层和 TCP 层之间引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现安全传输。 -SSL 协议是HTTPS 初期采用的标准协议,最早由 Netscape 于 1994 年设计实现,其两个主要版本(包括 v2.0 和 v3.0)曾得到大量应用。SSL 存在安全缺陷易受攻击(如 POODLE 和 DROWN 攻击),无法满足现代安全需求,已于 2011 和 2015 年被 IETF 宣布废弃。基于 SSL 协议(v3.1),IETF 提出了改善的安全标准协议 TLS,成为目前广泛采用的方案。2008 年 8 月,TLS 1.2 版本(RFC 5246)发布,修正了之前版本的不少漏洞,极大增强了安全性;2018 年 8 月,TLS 1.3 版本(RFC 8446)发布,提高了握手性能同时增强了安全性。商用场景推荐使用这两个版本。除了 Web 服务外,TLS 协议也被广泛应用到 FTP、Email、实时消息、音视频通话等场景中。 +SSL 协议是 HTTPS 初期采用的标准协议,最早由 Netscape 于 1994 年设计实现,其两个主要版本(包括 v2.0 和 v3.0)曾得到大量应用。SSL 存在安全缺陷易受攻击(如 POODLE 和 DROWN 攻击),无法满足现代安全需求,已于 2011 和 2015 年被 IETF 宣布废弃。基于 SSL 协议(v3.1),IETF 提出了改善的安全标准协议 TLS,成为目前广泛采用的方案。2008 年 8 月,TLS 1.2 版本(RFC 5246)发布,修正了之前版本的不少漏洞,极大增强了安全性;2018 年 8 月,TLS 1.3 版本(RFC 8446)发布,提高了握手性能同时增强了安全性。商用场景推荐使用这两个版本。除了 Web 服务外,TLS 协议也被广泛应用到 FTP、Email、实时消息、音视频通话等场景中。 采用 HTTPS 建立安全连接(TLS 握手协商过程)的基本步骤如下: ![TLS 握手协商过程](_images/tls_handshake.png) -* 客户端浏览器发送握手信息到服务器,包括随机数 R1、支持的加密算法套件(Cipher Suite)类型、协议版本、压缩算法等。注意该过程传输为明文。 -* 服务端返回信息,包括随机数 R2、选定加密算法套件、协议版本,以及服务器证书。注意该过程为明文。 -* 浏览器检查带有该网站公钥的证书。该证书需要由第三方 CA 来签发,浏览器和操作系统会预置权威 CA 的根证书。如果证书被篡改作假(中间人攻击),很容易通过 CA 的证书验证出来。 -* 如果证书没问题,则客户端用服务端证书中公钥加密随机数 R3(又叫 Pre-MasterSecret),发送给服务器。此时,只有客户端和服务器都拥有 R1、R2 和 R3 信息,基于随机数 R1、R2 和 R3,双方通过伪随机数函数来生成共同的对称会话密钥 MasterSecret。 -* 后续客户端和服务端的通信都通过协商后的对称加密(如 AES)进行保护。 +1)客户端浏览器发送握手信息到服务器,包括随机数 R1、支持的加密算法套件(Cipher Suite)类型、协议版本、压缩算法等。注意该过程传输为明文。 +2)服务端返回信息,包括随机数 R2、选定加密算法套件、协议版本,以及服务器证书。注意该过程为明文。 +3)浏览器检查带有该网站公钥的证书。该证书需要由第三方 CA 来签发,浏览器和操作系统会预置权威 CA 的根证书。如果证书被篡改作假(中间人攻击),很容易通过 CA 的证书验证出来。 +4)如果证书没问题,则客户端用服务端证书中公钥加密随机数 R3(又叫 Pre-MasterSecret),发送给服务器。此时,只有客户端和服务器都拥有 R1、R2 和 R3 信息,基于随机数 R1、R2 和 R3,双方通过伪随机数函数来生成共同的对称会话密钥 MasterSecret。 +5)后续客户端和服务端的通信都通过协商后的对称加密(如 AES)进行保护。 可以看出,该过程是实现防止中间人窃听和篡改的前提下完成会话密钥的交换。为了保障前向安全性(Perfect Forward Secrecy),TLS 对每个会话连接都可以生成不同的密钥,避免某个会话密钥泄露后对其它会话连接产生安全威胁。需要注意,选用合适的加密算法套件对于 TLS 的安全性十分重要。要合理选择安全强度高的算法组合,如 ECDHE-RSA 和 ECDHE-ECDSA 等,而不要使用安全性较差的 DES/3DES 等。 示例中对称密钥的协商过程采用了 RSA 非对称加密算法,实践中也可以通过 Diffie–Hellman(DH)协议来完成。 -加密算法套件包括一组算法,包括交换、认证、加密、校验等。 +加密算法套件包括一组算法,包括交换、认证、加密、校验等: * 密钥交换算法:负责协商对称密钥,常见类型包括 RSA、DH、ECDH、ECDHE 等; * 证书签名算法:负责验证身份,常见类型包括 RSA、DSA、ECDSA 等; @@ -137,13 +137,12 @@ DH 协议的基本交换过程如下,以 Alice 和 Bob 两人协商为例: 实际上,Alice 和 Bob 计算出来的结果将完全相同,因为在 mod p 的前提下,Y^x =(g^y)^x =g^(xy) = (g^x)^y=X^y。而信道监听者在已知 p,g,X,Y 的前提下,无法求得 Z。 - ### 安全性 虽然很多加密算法的安全性建立在数学难题基础之上,但并非所有算法的安全性都可以从数学上得到证明。 -公认高安全的加密算法和实现往往是经过长时间充分实践论证后,才被大家所认可,但不代表其绝对不存在漏洞。使用方式和参数不当,也会造成安全强度的下降。 +公认高安全性的加密算法和实现往往是经过长时间充分实践论证后,才被大家所认可,但不代表其绝对不存在漏洞。使用方式和参数不当,也会造成安全强度下降。 -另一方面,自行设计和发明未经过大规模验证的加密算法是一种不太明智的行为。即便不公开算法加密过程,也很容易被分析和攻击,无法在安全性上得到足够保障。 +另一方面,自行设计和发明的未经过大规模验证的加密算法是一种不太明智的行为。即便不公开算法加密过程,也很容易被分析和攻击,无法在安全性上得到足够保障。 实际上,现代密码学算法的安全性是通过数学难题来提供的,并非通过对算法自身的实现过程进行保密。 diff --git a/05_crypto/bloom_filter.md b/05_crypto/bloom_filter.md index b227809..f4a566b 100644 --- a/05_crypto/bloom_filter.md +++ b/05_crypto/bloom_filter.md @@ -1,12 +1,12 @@ -## Bloom Filter 结构 +## 布隆过滤器 -布隆过滤器(Bloom Filter),1970 年由 Burton Howard Bloom 在论文《Space/Time Trade-offs in Hash Coding with Allowable Errors》提出。布隆过滤器是一种基于 Hash 的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。 +布隆过滤器(Bloom Filter)是在 1970 年由 Burton Howard Bloom 在论文《Space/Time Trade-offs in Hash Coding with Allowable Errors》提出的。布隆过滤器是一种基于 Hash 的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。 -该结构因为其高效性,被大量应用到网络和安全领域,例如信息检索(BigTable 和 HBase)、垃圾邮件规则、注册管理等。 +该结构因为具有高效性而广泛应用到网络和安全领域,例如信息检索(BigTable 和 HBase)、垃圾邮件规则、注册管理等。 ### 基于 Hash 的快速查找 -在布隆过滤器之前,先来看基于 Hash 的快速查找算法。在前面的讲解中,我们提到,Hash 可以将任意内容映射到一个固定长度的字符串,而且不同内容映射到相同串的概率很低。因此,这就构成了一个很好的“内容 -> 索引”的生成关系。 +在介绍布隆过滤器之前,先来看看基于 Hash 的快速查找算法。在前面的讲解中,我们提到,Hash 可以将任意内容映射到一个固定长度的字符串,而且不同内容映射到相同串的概率很低。因此,这就构成了一个很好的“内容 -> 索引”的生成关系。 试想,如果给定一个内容和存储数组,通过构造 Hash 函数,让映射后的 Hash 值总不超过数组的大小,则可以实现快速的基于内容的查找。例如,内容 “hello world” 的 Hash 值如果是 “100”,则存放到数组的第 100 个单元上去。如果需要快速查找任意内容,如 “hello world” 字符串是否在存储系统中,只需要将其在常数时间内计算 Hash 值,并用 Hash 值查看系统中对应元素即可。该系统“完美地”实现了常数时间内的查找。 @@ -18,10 +18,10 @@ 布隆过滤器采用了多个 Hash 函数来提高空间利用率。 -对同一个给定输入来说,多个 Hash 函数计算出多个地址,分别在位串的这些地址上标记为 1。进行查找时,进行同样的计算过程,并查看对应元素,如果都为 1,则说明较大概率是存在该输入。 +对同一个给定输入来说,多个 Hash 函数计算出多个地址,分别在位串的这些地址上标记为 1。在查找时,进行同样的计算过程,并查看对应元素,如果都为 1,则说明较大概率是存在该输入。 -布隆过滤器相对单个 Hash 算法查找,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。 +布隆过滤器与单个 Hash 算法查找相比,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。 -实际上,无论是 Hash,还是布隆过滤器,基本思想是一致的,都是基于内容的编址。Hash 函数存在冲突,布隆过滤器也存在冲突。这就造成了两种方法都存在着误报(False Positive)的情况,但绝对不会漏报(False Negative)。 +实际上,无论是 Hash 还是布隆过滤器,基本思想是一致的,都是基于内容的编址。Hash 函数存在冲突,布隆过滤器也存在冲突,即这两种方法都存在着误报(False Positive)的情况,但绝对不会漏报(False Negative)。 -布隆过滤器在应用中误报率往往很低,例如,在使用 7 个不同 Hash 函数的情况下,记录 100 万个数据,采用 2 MB 大小的位串,整体的误判率将低于 1%。而传统的 Hash 查找算法的误报率将接近 10%。 \ No newline at end of file +布隆过滤器在应用中误报率往往很低,例如,在使用 7 个不同 Hash 函数的情况下,记录 100 万个数据,采用 2 MB 大小的位串,整体的误判率将低于 1%。而传统的 Hash 查找算法的误报率将接近 10%。 diff --git a/05_crypto/cert.md b/05_crypto/cert.md index e8268cd..ca38ae4 100644 --- a/05_crypto/cert.md +++ b/05_crypto/cert.md @@ -41,7 +41,7 @@ X.509 规范中一般推荐使用 PEM(Privacy Enhanced Mail)格式来存储 PEM 格式采用文本方式进行存储,一般包括首尾标记和内容块,内容块采用 base64 编码。 -例如,一个示例证书文件的 PEM 格式如下所示。 +例如,一个示例证书文件的 PEM 格式如下所示: ``` -----BEGIN CERTIFICATE----- diff --git a/05_crypto/hash.md b/05_crypto/hash.md index 108631d..f52dd27 100644 --- a/05_crypto/hash.md +++ b/05_crypto/hash.md @@ -29,21 +29,21 @@ db8305d71a9f2f90a3e118a9b49a4c381d2b80cf7bcef81930f30ab1832a3c90 目前常见的 Hash 算法包括国际上的 Message Digest(MD)系列和 Secure Hash Algorithm(SHA)系列算法,以及国内的 SM3 算法。 -MD 算法主要包括 MD4 和 MD5 两个算法。MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,其输出为 128 位。MD4 已证明不够安全。MD5(RFC 1321)是 Rivest 于 1991 年对 MD4 的改进版本。它对输入仍以 512 位进行分组,其输出是 128 位。MD5 比 MD4 更加安全,但过程更加复杂,计算速度要慢一点。MD5 已于 2004 年被成功碰撞,其安全性已不足应用于商业场景。。 +MD 算法主要包括 MD4 和 MD5 两个算法。MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,其输出为 128 位。MD4 已证明不够安全。MD5(RFC 1321)是 Rivest 于 1991 年对 MD4 的改进版本。它对输入仍以 512 位进行分组,其输出是 128 位。MD5 比 MD4 更加安全,但过程更加复杂,计算速度要慢一点。MD5 已于 2004 年被成功碰撞,其安全性已不足应用于商业场景。 SHA 算法由美国国家标准与技术院(National Institute of Standards and Technology,NIST)征集制定。首个实现 SHA-0 算法于 1993 年问世,1998 年即遭破解。随后的修订版本 SHA-1 算法在 1995 年面世,它的输出为长度 160 位的 Hash 值,安全性更好。SHA-1 设计采用了 MD4 算法类似原理。SHA-1 已于 2005 年被成功碰撞,意味着无法满足商用需求。 -为了提高安全性,NIST 后来制定出更安全的 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2 算法)。新一代的 SHA-3 相关算法也正在研究中。 +为了提高安全性,NIST 后来制定出更安全的 SHA-224、SHA-256、SHA-384 和 SHA-512 算法(统称为 SHA-2 算法)。新一代的 SHA-3 相关算法也正在研究中。 -此外,中国密码管理局于 2010 年 12 月 17 日发布了GM/T 0004-2012 《SM3 密码杂凑算法》,建立了国内商用密码体系中的公开 Hash 算法标准,已经被广泛应用在数字签名和认证等场景中。 +此外,中国密码管理局于 2010 年 12 月 17 日发布了 GM/T 0004-2012 《SM3 密码杂凑算法》,建立了国内商用密码体系中的公开 Hash 算法标准,已经被广泛应用在数字签名和认证等场景中。 *注:MD5 和 SHA-1 算法的破解工作都是由清华大学教授、中国科学院院士王小云主导完成。* ### 性能 -大多数 Hash 算法都是计算敏感型算法,在强大的计算芯片上完成的更快。因此要提升 Hash 计算的性能可以考虑硬件加速。例如采用普通 FPGA 来计算 SHA-256 值,可以轻易达到数 Gbps 的吞吐量,使用专用芯片甚至会更高。 +大多数 Hash 算法都是计算敏感型算法,在强大的计算芯片上完成得更快。因此要提升 Hash 计算的性能可以考虑硬件加速。例如采用普通 FPGA 来计算 SHA-256 值,可以轻易达到数 Gbps 的吞吐量,使用专用芯片吞吐量甚至会更高。 -也有一些 Hash 算法不是计算敏感型的。例如 scrypt算法,计算过程需要大量的内存资源,因此很难通过选用高性能芯片来加速 Hash 计算。这样的算法可以有效防范采用专用芯片进行算力攻击。 +也有一些 Hash 算法不是计算敏感型的。例如 scrypt 算法,计算过程需要大量的内存资源,因此很难通过选用高性能芯片来加速 Hash 计算。这样的算法可以有效防范采用专用芯片进行算力攻击。 ### 数字摘要 数字摘要是 Hash 算法重要用途之一。顾名思义,数字摘要是对原始的数字内容进行 Hash 运算,获取唯一的摘要值。 @@ -57,8 +57,8 @@ Hash 算法并不是一种加密算法,不能用于对信息的保护。 但 Hash 算法可被应用到对登录口令的保存上。例如网站登录时需要验证用户名和密码,如果网站后台直接保存用户的口令原文,一旦发生数据库泄露后果不堪设想(事实上,网站数据库泄露事件在国内外都不少见)。 -利用 Hash 的防碰撞特性,后台数据库可以仅保存用户口令的 Hash 值,这样每次通过 Hash 值比对,即可判断输入口令是否正确。即便数据库泄露了,攻击者也无法轻易从 Hash 值还原回口令。 +利用 Hash 的防碰撞特性,后台数据库可以仅保存用户口令的 Hash 值,这样每次通过 Hash 值比对,即可判断输入口令是否正确。即便数据库泄露了,攻击者也无法轻易从 Hash 值还原出口令。 然而,有时用户设置口令的安全强度不够,采用了一些常见的字符串,如 password、123456 等。有人专门搜集了这些常见口令,计算对应的 Hash 值,制作成字典。这样通过 Hash 值可以快速反查到原始口令。这一类型以空间换时间的攻击方法包括字典攻击和彩虹表攻击(只保存一条 Hash 链的首尾值,相对字典攻击可以节省存储空间)等。 -为了防范这一类攻击,可以采用加盐(Salt)的方法。保存的不是原文的直接 Hash 值,而是原文再加上一段随机字符串(即“盐”)之后的 Hash 值。Hash 结果和“盐”分别存放在不同的地方,这样只要不是两者同时泄露,攻击者很难进行破解。 \ No newline at end of file +为了防范这一类攻击,可以采用加盐(Salt)的方法。保存的不是原文的直接 Hash 值,而是原文再加上一段随机字符串(即“盐”)之后的 Hash 值。Hash 结果和“盐”分别存放在不同的地方,这样只要不是两者同时泄露,攻击者就很难进行破解。 diff --git a/05_crypto/history.md b/05_crypto/history.md index c6118ab..fb2fd21 100644 --- a/05_crypto/history.md +++ b/05_crypto/history.md @@ -16,6 +16,6 @@ 1976 年 11 月,Whitfield Diffie 和 Martin E.Hellman 在 IEEE Transactions on Information Theory 上发表了论文《New Directions in Cryptography(密码学的新方向)》,探讨了无需传输密钥的保密通信和签名认证体系问题,正式开创了现代公钥密码学体系的研究。 -现代密码学的发展与电气技术特别计算机信息理论和技术关系密切,已经发展为包括随机数、Hash 函数、加解密、身份认证等多个课题的庞大领域,相关成果为现代信息系统特别互联网奠定了坚实的安全基础。 +现代密码学的发展与电气技术特别是计算机信息理论和技术关系密切,已经发展为包括随机数、Hash 函数、加解密、身份认证等多个课题的庞大领域,相关成果为现代信息系统特别是互联网奠定了坚实的安全基础。 *注:Enigma 密码机的加密消息在当年需要数年时间才能破解,而今天使用最新的人工智能技术进行破译只需要 10 分钟左右。* \ No newline at end of file diff --git a/05_crypto/homoencryption.md b/05_crypto/homoencryption.md index 5c773bd..2685170 100644 --- a/05_crypto/homoencryption.md +++ b/05_crypto/homoencryption.md @@ -22,7 +22,7 @@ $$E(X\triangle{}Y) = E(X)\triangle{} E(Y)$$ 仅满足加法同态的算法包括 Paillier 和 Benaloh 算法;仅满足乘法同态的算法包括 RSA 和 ElGamal 算法。 -同态加密在云计算和大数据的时代意义十分重大。目前,虽然云计算带来了包括低成本、高性能和便捷性等优势,但从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。如果有了比较实用的同态加密技术,则大家就可以放心的使用各种云服务了,同时各种数据分析过程也不会泄露用户隐私。加密后的数据在第三方服务处理后得到加密后的结果,这个结果只有用户自身可以进行解密,整个过程第三方平台无法获知任何有效的数据信息。 +同态加密在云计算和大数据的时代意义十分重大。目前,虽然云计算带来了包括低成本、高性能和便捷性等优势,但从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。如果有了比较实用的同态加密技术,则大家就可以放心地使用各种云服务了,同时各种数据分析过程也不会泄露用户隐私。加密后的数据在第三方服务处理后得到加密后的结果,这个结果只有用户自身可以进行解密,整个过程第三方平台无法获知任何有效的数据信息。 另一方面,对于区块链技术,同态加密也是很好的互补。使用同态加密技术,运行在区块链上的智能合约可以处理密文,而无法获知真实数据,极大的提高了隐私安全性。 diff --git a/05_crypto/merkle_trie.md b/05_crypto/merkle_trie.md index 05487c8..8f5e2e8 100644 --- a/05_crypto/merkle_trie.md +++ b/05_crypto/merkle_trie.md @@ -4,7 +4,7 @@ 其主要特点为: -* 最下面的叶节点包含存储数据或其哈希值。 +* 最下面的叶节点包含存储数据或其哈希值; * 非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。 进一步地,默克尔树可以推广到多叉树的情形,此时非叶子节点的内容为它所有的孩子节点的内容的哈希值。 diff --git a/05_crypto/others.md b/05_crypto/others.md index 6d5c726..1c47b95 100644 --- a/05_crypto/others.md +++ b/05_crypto/others.md @@ -14,7 +14,7 @@ * 完整性(Completeness):真实的证明可以让验证者成功验证; * 可靠性(Soundness):虚假的证明无法保证通过验证。但理论上可以存在小概率例外; -* 零知识(Zero-Knowledge):如果得到证明,无法(或很难)从证明过程中获知除了所证明信息之外的任何信息,分为完美零知识、概率零知识。 +* 零知识(Zero-Knowledge):如果得到证明,无法(或很难)从证明过程中获知除了所证明命题之外的任何信息,分为完美零知识、概率零知识两种。 交互式零知识证明相对容易构造,需要通过证明人和验证人之间一系列交互完成。一般为验证人提出一系列问题,证明人如果能都回答正确,则有较大概率确实知道论断。 @@ -69,13 +69,13 @@ Manuel Blum、Alfredo De Santis、Silvio Micali 和 Giuseppe Persiano 在 1991 目前可行的方案主要包括添加拉普拉斯噪音(适合于数值型)和指数噪音(适合于非数值型)等。 ### 量子密码学 -量子密码学(Quantum Cryptography)随着量子计算和量子通信的研究而被受到越来越多的关注,被认为会对已有的密码学安全机制产生较大的影响。 +量子密码学(Quantum Cryptography)随着量子计算和量子通信的研究而被受到越来越多的关注,被认为会在未来对已有的密码学安全机制产生较大的影响。 量子计算的概念最早是物理学家费曼于 1981 年提出,基本原理是利用量子比特可以同时处于多个相干叠加态,理论上可以同时用少量量子比特来表达大量的信息,并同时进行处理,大大提高计算速度。量子计算目前在某些特定领域已经展现出超越经典计算的潜力。如基于量子计算的 Shor 算法(1994 年提出),理论上可以实现远超经典计算速度的大数因子分解。2016 年 3 月,人类第一次以可扩展的方式,用 Shor 算法完成对数字 15 的质因数分解。 -这意味着目前广泛应用的非对称加密算法,包括基于大整数分解的 RSA、基于椭圆曲线随机数的 ECC 等将来都将很容易被破解。当然,现代密码学体系并不会因为量子计算的出现而崩溃。一方面,量子计算设备离实际可用的通用计算机还有较大距离,密码学家可以探索更安全的密码算法。另一方面,很多安全机制尚未发现能加速破解的量子算法,包括数字签名(基于 Hash)、格(Lattice)密码、基于编码的密码等。 +这意味着目前广泛应用的非对称加密算法,包括基于大整数分解的 RSA、基于椭圆曲线离散对数问题的 ECC 等将来都将很容易被破解。当然,现代密码学体系并不会因为量子计算的出现而崩溃。一方面,量子计算设备离实际可用的通用计算机还有较大距离,密码学家可以探索更安全的密码算法。另一方面,很多安全机制尚未发现能被量子算法攻破,包括基于 Hash 的数字签名、格(Lattice)密码、基于编码的密码,以及随机数生成和密钥派生等。 -量子通信则可以提供对密钥进行安全协商的机制,有望实现无条件安全的“一次性密码”。量子通信基于量子纠缠效应,两个发生纠缠的量子可以进行远距离的实时状态同步。一旦信道被窃听,则通信双方会获知该情况,丢弃此次传输的泄露信息。该性质十分适合进行大量的密钥分发,如 1984 年提出的 BB84 协议,结合量子通道和公开信道,可以实现安全的密钥分发。 +量子通信则可以提供对密钥进行安全协商的机制,有望实现无条件安全的“一次性密码”。量子通信基于量子纠缠效应,两个发生纠缠的量子可以进行远距离的实时状态同步。攻击者窃听信道时会改变量子状态,通信双方可以发现并选择丢弃此次传输的信息。该性质十分适合进行大量的密钥分发,如 1984 年提出的 BB84 协议,结合量子通道和公开信道,可以实现安全的密钥分发。但要注意,量子通信无法避免协议层面的攻击,如经典的中间人攻击,可以对通信双方发送不同的量子对,实现在不被发现的情况下窃听信息。此外,量子信道易受干扰,对传输环境要求很高。 *注:一次性密码:最早由香农提出,实现理论上绝对安全的对称加密。其特点为密钥真随机且只使用一次;密钥长度跟明文一致,加密过程为两者进行二进制异或操作。* @@ -85,4 +85,4 @@ Manuel Blum、Alfredo De Santis、Silvio Micali 和 Giuseppe Persiano 在 1991 例如,系统管理员将登陆密码贴到电脑前;财务人员在电话里泄露用户的个人敏感信息;公司职员随意运行来自不明邮件的附件;不明人员借推销或调查问卷的名义进入办公场所窃取信息…… -著名计算机黑客和安全顾问 Kevin David Mitnick 曾在 15 岁时成功入侵北美空中防务指挥系统,在其著作《The Art of Deception》中大量揭示了通过社交工程学的手段轻易获取各种安全信息的案例。 +著名计算机黑客和安全顾问 Kevin David Mitnick 曾在 15 岁时成功入侵北美空中防务指挥系统,在其著作《The Art of Deception》中揭示了大量通过社交工程学的手段轻易获取各种安全信息的案例。 diff --git a/05_crypto/signature.md b/05_crypto/signature.md index c286d65..1e55d02 100644 --- a/05_crypto/signature.md +++ b/05_crypto/signature.md @@ -13,15 +13,14 @@ *注:例子中并没有考虑中间人攻击的情况,并假定信道是安全的。* -消息认证码的主要问题是需要提前共享密钥,并且当密钥可能被多方同时拥有(甚至泄露)的场景下,无法追踪消息的真实来源。如果采用非对称加密算法,则能有效的解决这个问题,即数字签名。 - +消息认证码的主要问题是需要提前共享密钥,并且当密钥可能被多方同时拥有(甚至泄露)的场景下,无法追踪消息的真实来源。如果采用非对称加密算法,则能有效地解决这个问题,即数字签名。 ### 数字签名 类似在纸质合同上进行签名以确认合同内容和证明身份,数字签名既可以证实某数字内容的完整性,又可以确认其来源(即不可抵赖,Non-Repudiation)。 一个典型的场景是,Alice 通过信道发给 Bob 一个文件(一份信息),Bob 如何获知所收到的文件即为 Alice 发出的原始版本?Alice 可以先对文件内容进行摘要,然后用自己的私钥对摘要进行加密(签名),之后同时将文件和签名都发给 Bob。Bob 收到文件和签名后,用 Alice 的公钥来解密签名,得到数字摘要,与对文件进行摘要后的结果进行比对。如果一致,说明该文件确实是 Alice 发过来的(因为别人无法拥有 Alice 的私钥),并且文件内容没有被修改过(摘要结果一致)。 -理论上所有的非对称加密算法都可以用来实现数字签名,实践中常用算法包括 1991 年 8 月 NIST 提出的 DSA(Digital Signature Algorithm,基于 ElGamal 算法)和安全强度更高的 ECSDA(Elliptic Curve Digital Signature Algorithm,基于椭圆曲线算法)等。 +理论上所有的非对称加密算法都可以用来实现数字签名,实践中常用算法包括 1991 年 8 月 NIST 提出的 DSA(Digital Signature Algorithm,基于 ElGamal 算法)和安全强度更高的 ECDSA(Elliptic Curve Digital Signature Algorithm,基于椭圆曲线算法)等。 除普通的数字签名应用场景外,针对一些特定的安全需求,产生了一些特殊数字签名技术,包括盲签名、多重签名、群签名、环签名等。 @@ -36,7 +35,7 @@ 其中,n 是提供的公钥个数,m 是需要匹配公钥的最少的签名个数。 -多重签名可以有效地被应用在多人投票共同决策的场景中。例如双方进行协商,第三方作为审核方。三方中任何两方达成一致即可完成协商。 +多重签名可以有效地应用在多人投票共同决策的场景中。例如双方进行协商,第三方作为审核方。三方中任何两方达成一致即可完成协商。 比特币交易中就支持多重签名,可以实现多个人共同管理某个账户的比特币交易。 @@ -44,7 +43,7 @@ 群签名(Group Signature),即某个群组内一个成员可以代表群组进行匿名签名。签名可以验证来自于该群组,却无法准确追踪到签名的是哪个成员。 -群签名需要存在一个群管理员来添加新的群成员,因此存在群管理员可能追踪到签名成员身份的风险。 +群签名需要一个群管理员来添加新的群成员,因此存在群管理员可能追踪到签名成员身份的风险。 群签名最早在 1991 年由 David Chaum 和 Eugene van Heyst 提出。 @@ -52,7 +51,7 @@ 环签名(Ring Signature),由 Rivest,Shamir 和 Tauman 三位密码学家在 2001 年首次提出。环签名属于一种简化的群签名。 -签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。 +签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立地产生签名,而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。 环签名在保护匿名性方面也具有很多用途。 @@ -60,6 +59,6 @@ 数字签名算法自身的安全性由数学问题进行保护。但在实践中,各个环节的安全性都十分重要,一定要严格遵循标准流程。 -例如,目前常见的数字签名算法需要选取合适的随机数作为配置参数,配置参数不合理的使用或泄露都会造成安全漏洞和风险。 +例如,目前常见的数字签名算法需要选取合适的随机数作为配置参数,配置参数使用不当或泄露都会造成安全漏洞和风险。 -2010 年 8 月,SONY 公司因为其 PS3 产品上采用十分安全的 ECDSA 进行签名时,不慎采用了重复的随机参数,导致私钥被最终破解,造成重大经济损失。 +2010 年 8 月,SONY 公司因为其 PS3 产品在采用十分安全的 ECDSA 进行签名时不慎使用了重复的随机参数,导致私钥被最终破解,造成重大经济损失。 diff --git a/05_crypto/summary.md b/05_crypto/summary.md index 65a4da4..0dc0e6e 100644 --- a/05_crypto/summary.md +++ b/05_crypto/summary.md @@ -1,6 +1,6 @@ ## 本章小结 -本章主要总结了密码学与安全领域中的一些核心问题和经典算法。通过阅读本章内容,相信读者已经对现代密码学的发展状况和关键技术有了初步了解。掌握这些知识,对于理解区块链系统如何实现隐私保护和安全防护都很有好处。 +本章总结了密码学与安全领域中的一些核心问题和经典算法。通过阅读本章内容,相信读者已经对现代密码学的发展状况和关键技术有了初步了解。掌握这些知识,对于理解区块链系统如何实现隐私保护和安全防护都很有好处。 现代密码学安全技术在设计上大量应用了十分专业的现代数学知识,如果读者希望能够深入学习其原理,则需要进一步学习并掌握近现代的数学科学,特别是数论、抽象代数等相关内容。