区块链学习一
前言
最近在协助一个团队做一个和区块链相关的项目,虽然比较边缘性,和区块链联系没那么紧密,但区块链本身还是需要了解一下的。
花了一天阅读了一下区块链技术指南[1]
1. 区块链思想的诞生与概念
这一章从数字货币入手,比较了传统纸币和数字货币之间的优劣,概述了设计数字货币时需要解决的技术难点,进而引入了区块链的概念。
其中一些以前不了解的细节有:
- 严格来讲, 货币(money)不等于现金或通货(cash,currency),货币的范围更广,维基百科里的相关解释:
- Money: Money is any item or verifiable record that is generally accepted as payment for goods and services and repayment of debts in a particular country or socio-economic context.
- Currency: A currency is a system of money (monetary units) in common use, especially in a nation.
- Cash: In economics, cash is money in the physical form of currency, such as banknotes and coins. In bookkeeping and finance, cash is current assets comprising currency or currency equivalents that can be accessed immediately or near-immediately (as in the case of money market accounts).
- 去中心化场景下,数字货币的实现存在的难点:
- 货币的防伪:谁来负责验证货币
- 货币交易:如何确定货币从一方转移到另外一方
- 避免双重支付:如何避免出现双重支付
- 区块链技术雏形最早出现在比特币项目中,作为比特币背后的分布式记账平台,从记账的角度来看,区块链是首个自带对账功能的数字记账技术实现。跟传统的记账技术相比,其特点应该包括:
- 维护一条不断增长的链,只可能添加记录,而发生过的记录都不可篡改
- 去中心化,或者说多中心化,无需集中的控制而能达成共识,实现上尽量分布式
- 通过密码学的机制来确保交易无法抵赖和破坏,并尽量保护用户信息和记录的隐私性
- 当前区块链技术的三种典型应用场景:
- 比特币为代表的公信的数字货币
- 以太坊为代表的公信的交易处理
- Hyperleger为代表的带权限的交易处理
- 区块链的基本概念:
- 交易(Transaction):一次操作,导致账本状态的一次改变,如添加一条记录
- 区块(Block):记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识
- 链(Chain):由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录
- nonce: In cryptography, a nonce is an arbitrary number that can only be used once. It is similar in spirit to a nonce word, hence the name. It is often a random or pseudo-random number issued in an authentication protocol to ensure that old communications cannot be reused in replay attacks. They can also be useful as initialization vectors and in cryptographic hash functions.
- 分类:
- 根据参与者的不同,可以分为公开(Public)链、联盟(Consortium)链和私有(Private)链
- 根据使用目的和场景的不同,又可以分为以数字货币为目的的货币链,以记录产权为目的的产权链,以众筹为目的的众筹链等
- 借(Debit): 意味着债务,表示从其他方转移到本科目内; 贷(Credit): 意味着债权,代表从该科目转移出去
2. 区块链技术的价值、挑战和展望
- 从技术特点上,区块链一般被认为具有:
- 分布式容错性:网络极其鲁棒,容错 1/3 左右节点的异常状态
- 不可篡改性:一致提交后的数据会一直存在,不可被销毁或修改
- 隐私保护性:密码学保证了未经授权者能访问到数据,但无法解析
- 随之带来的业务特性将可能包括:
- 可信任性:区块链技术可以提供天然可信的分布式账本平台,不需要额外第三方中介机构
- 降低成本:跟传统技术相比,区块链技术可能带来更短的时间、更少的人力和维护成本
- 增强安全:区块链技术将有利于安全可靠的审计管理和账目清算,减少犯罪可能性,和各种风险
- 能否最终带来成本的降低,将是一项技术能否被深入应用的关键
- 所有跟信息、价值(包括货币、证券、专利、版权、数字商品、实际物品等)、信用等相关的交换过程,都将可能从区块链技术中得到启发或直接受益
- 涉及领域: 分布式、存储、密码学、心理学、经济学、博弈论、网络协议、系统安全等, 相关限制: 处理性能、扩展性等
- 常见的分布式系统,可以通过增加节点来扩展整个系统的处理能力。区块链并非如此。
3. 应用场景
- 有直接或间接依赖于第三方担保信任机构的活动,均可能从区块链技术中获益
- 金融服务
- 银行金融管理
- 证券交易
- 征信和权属管理
- 资源共享
- 投资管理
- 物联网与供应链
- 金融服务
- 制约区块链技术进一步应用的因素:
- 首先就是谁来为区块链上的合同担保?特别在金融、法律等领域,实际执行的生活往往还得是由人来做
- 另外就是物品的数字化。非数字化的物品很难放到数字世界中进行管理。
- 一些对于上述观点的补充:
- 做任何应用层面的东西,都要意识到这个社会中最重要的永远是人的存在,所以人性永远在考虑范围内,而区块链的应用脱离了人只考虑数字世界必然是行不通的,需要对人性有所分析,对区块链应用涉及的社会活动所影响到的人的心理都要有充分估计,否则只是空谈而已。
- 关于物品的数字化,的确是个问题,主要体现在物联网与供应链应用上,因为无法完全数字化,就必然会涉及到人,比如物流过程中从一级到另一级,一个物流人员将一个商品掉包如何确认?肯定不能够通过商品上贴的二维码来保证吧。其实就相当于得找到一个Hash算法,将实际物体映射到数字世界,或者思维转变,不考虑实际物体的数字化,而是着手与供应链过程中涉及到的人的信任保证。
- 是不是区块链、叫不叫区块链,其实都不重要,主要是利用技术解决在没有”中介”的情况下如何促成一项交易的完成,确保一件物品的归属。减少交易环节是一个实实在在的需求,能够通过一项技术去减少交易环节,最好是P2P且能够保证双方信任的,这项技术的综合成本比原先的交易流程中间过程成本低,就是有价值的,而技术本身的实现并不唯一,但是技术必然需要实现以上需求的核心要求,其中最重要的就是去中心化,反观现在很多产品是打着区块链幌子的积分制而已,根本没有去中心化。
- 以上观点都是一时的想法… 接触了更多知识有了更多思考之后应该有很多地方需要更正吧
4. 分布式系统的核心问题
- 一致性问题:
- 概念: 在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。
- 解决分布式系统一致性问题的核心思想是: 将可能引发不一致的并行操作进行串行化
- 一致性需要满足的要求:
- 可终止性(Termination): 一致的结果在有限时间内能完成
- 共识性(Consensus): 不同节点最终完成决策的结果应该相同
- 合法性(Validity): 决策的结果必须是其它进程提出的提案
- 强一致性: 顺序一致性(Sequential Consistency)、线性一致性(Linearizability Consistency)
- 弱一致性
- 关于一致性问题,在学习多智能体协同控制相关知识的时候,也是重点研究的,其实本质上都是相似的,因为多智能体系统也是一个分布式系统,只是在多智能体问题中,一致性通常是更为严格地被数学模型所表达,最简单的就是多个智能体之间某一变量的一致,如位置、速度、加速度等,以方便最后理论证明提出的控制算法是否满足一致性,而计算机分布式系统中将所有进程看成一个序列,考虑序列的一致性,通常是保证序列元素的执行顺序。
- 共识算法: 保障系统满足不同程度的一致性的解决方法。即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。
- FLP不可能原理: 在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。PS: 如果套用多智能体系统里的概念,相当于,若节点间组成的网络拓扑是不连通的,则系统无法达到一致性,但是如果长时间来看,即使某一时间段某个节点down掉了,只要下一时间段可以恢复,从而保证连续时间上的连通性,系统最终还是可以达到一致的。
- CAP原理: 分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。
- 一致性(Consistency): 任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性
- 可用性(Availablity): 在有限时间内,任何非失败节点都能应答请求
- 分区容忍性(Partition): 网络可能发生分区,即节点之间的通信不可保障
- ACID原则: 即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。ACID原则描述了对分布式数据库的一致性需求,同时付出了可用性的代价。
- BASE原则: Basic Availiability,Soft state,Eventually Consistency,牺牲掉对一致性的约束(最终一致性),来换取一定的可用性。
- PAXOS算法:
- 三种节点: proposer, acceptor, learner
- 两个阶段: 准备阶段、提交阶段
- Raft算法: Paxos算法的一种简化实现,包括三种角色: leader、candidate和follower,其基本过程为:
- Leader选举: 每个candidate随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为leader
- 同步log: leader会找到系统中log最新的记录,并强制所有的follower来刷新到这个记录
- 拜占庭问题: 讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的一致性达成问题
- PBFT算法: 包括三个阶段来达成共识, Pre-Prepare、Prepare 和 Commit
- PoW算法
5. 密码学与安全技术
- 工程领域从来没有黑科技;密码学不是工程。目的是保证信息的机密性、完整性、认证性和不可抵赖性
- Hash算法与数字摘要
- 加解密算法: 保证机密性
- 数字签名: 用于证实某数字内容的完整性(integrity)和来源(或不可抵赖,non-repudiation)
- HMAC(Hash-based Message Authentication Code): 即”基于 Hash 的消息认证码”,HMAC(K, H, Message),其中,K为提前共享的对称密钥,H为提前商定的Hash算法,Message为要处理的消息内容。HMAC 一般用于证明身份的场景
- 盲签名: 主要是为了实现防止追踪(unlinkability),签名者无法将签名内容和结果进行对应,且消息的内容对签名者是不可见的
- 多重签名: 想象成一份文件被n个人管理,需要m个人签名才有效,这就是多重签名。可以用于电子商务、财产分割、资金监管等场景中,实际上类似电子商务这种需要中介担保的场景都可以用到多重签名
- 群签名
- 环签名: 属于一种简化的群签名
- 数字证书: 用来证明某个公钥是谁的,并且内容是正确的
- PKI体系: 在非对称加密中,公钥则可以通过证书机制来进行保护,如何管理和分发证书则可以通过 PKI(Public Key Infrastructure)来保障。PKI至少包含以下组件:
- CA(Certification Authority): 负责证书的颁发和作废,接收来自RA的请求,是最核心的部分
- RA(Registration Authority): 对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA
- 证书数据库: 存放证书,一般采用LDAP目录服务,标准格式采用X.500系列
- Merkle树,其特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。典型应用场景包括:
- 快速比较大量数据
- 快速定位修改
- 零知识证明
- 同态加密,函数加密: 相关内容可以参考这里
- 零知识证明(zero knowledge validation): 证明者在不向验证者提供任何有用的信息的前提下,使验证者相信某个论断是正确的
6. 比特币项目
- 以前以为比特币交易是没有下限的,原来是有的,交易的最小单位是”聪”,即10exp-8比特币
- 原理和设计、挖矿、工具、共识机制、闪电网络、侧链
7. Ethereum(以太坊项目)
- 智能合约
8. Hyperledger(超级账本项目)
- Fabric
9. 区块链服务平台设计
- 区块链即服务(Blockchain as a Service,BaaS),是部署在云计算基础设施之上,对外提供区块链网络的生命周期管理和运行时服务管理等功能的一套工具
- IBM Bluemix云区块链服务
- 微软Azure云区块链服务
- 使用超级账本Cello搭建区块链服务
- 一个看法是,若是区块链应用都建立在少数厂商的云上,那岂不是该云厂商就是实际的中心,区块链要解决的去中心化就不复存在了,私以为还是有一定道理的
10. 一些想法
区块链实际需要解决的还是去中心化(多中心化)场景下的信任问题,而涉及到现实世界中时,事情总不是那么容易解决的。一方面现实世界中永远是少部分人掌握大多数资源(生产资料),无论是号称哪种体制,进行何种革命,到头来不过是一个轮回,而区块链目前看来也不可能是革命的手段,毕竟现在控制人类社会运转的资源并不会因为区块链而进行转移和改变,所以区块链若要大规模应用,如何避免其变成实际上的中心化是个很重要的问题,而这个问题很有可能无解,需要找到一种大多数人都有且数量级相当的资源来作为惩罚或奖励,Kino能想到的是生命值,不过这是不可能的。另一方面就是现在都是靠博弈来保证利益的最大化,保证实际结果的可信,而这些独立于数字世界之外的问题会对现实生活产生的影响有多少,也没有充分论证,博弈某种程度上也许就是把人类的恶拿了出来,而整个世界的社会实验,把整个社会的恶都反映了出来,会有什么情况,也是未知的。所以对于区块链技术将会革命整个现有生产关系的说法,Kino觉得不可能,或者保守点,近几十年年不可能。区块链当前最可能的应用大概还是资源相当的企业间的相关应用,其涉及的相关方需要数量偏少且资源没有数量级上的差别,比如汽车行业供应链上的资金流转。
Footnotes
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
GitalkLivere