区块链基础

基础

1. 区块链技术名词 

  • 交易(Transaction):一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录;
  • 区块(Block):记录一段时间内发生的所有交易和状态结果等,是对当前账本状态的一次共识;
  • 链(Chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。

2. 区块链的类型 

  • 公有链,任何人都可以参与使用和维护,参与者多为匿名。典型的如比特币和以太坊区块链,信息是完全公开的。
  • 私有链,由集中管理者进行管理限制,只有内部少数人可以使用,信息不公开。一般认为跟传统中心化记账系统的差异不明显。
  • 联盟链则介于两者之间,由若干组织一起合作(如供应链机构或银行联盟等)维护一条区块链,该区块链的使用必须是带有权限的限制访问,相关信息会得到保护,典型如超级账本项目。在架构上,现有大部分区块链在实现都至少包括了网络层、共识层、智能合约和应用层等分层结构,联盟链实现往还会引入额外的权限管理机制。

3. 区块链特点 

  • 分布式容错性:分布式账本网络极其鲁棒,能够容忍部分节点的异常状态;
  • 不可篡改性:共识提交后的数据会一直存在,不可被销毁或修改;
  • 隐私保护性:密码学保证了数据隐私,即便数据泄露,也无法解析。

随之带来的业务特性将可能包括:

  • 可信任性:区块链技术可以提供天然可信的分布式账本平台,不需要额外第三方中介机构参与;
  • 降低成本:跟传统技术相比,区块链技术可能通过自动化合约执行带来更快的交易,同时降低维护成本;
  • 增强安全:区块链技术将有利于安全、可靠的审计管理和账目清算,减少犯罪风险。

4. 区块链平台

  • 比特币
  • 以太坊
  • EOS
  • 超级账本

5. 应用场景 

  • 去信任(去中介) 
  • 价值转移(不是拷贝) 
  • 数据共享

区块链技术

1. p2p网络协议

      网络内的所有通信节点都是平等的。传统软件架构:中心化,分布式(服务依赖于某一中心方,权力过大)

      hyperledger fabric -> grpc对等服务实现p2p网络

2. 密码学

哈希(HASH)
    Hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较
    短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值

注:MD5 是一个经典的 hash 算法,其和 SHA-1 算法都已被 证明 安全性不足应用于商业场景。 

特点:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。

性能:
    一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash的速度也越快。这也是随着
    计算机硬件的发展需要提高区块链计算难度的原因。

数字摘要:
    顾名思义,数字摘要是对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始数字内容。数字摘要是解决确保内容
    没被篡改过的问题(利用 Hash 函数的抗碰撞性特点)。数字摘要是 Hash 算法最重要的一个用途。在网络上下载软件
    或文件时,往往同时会提供一个数字摘要值,用户下载下来原始文件可以自行进行计算,并同提供的摘要值进行比对,
    以确保内容没有被修改过。

加解密算法:为了防止数据泄密

  •    对称加密:密钥相同,易泄露
  •    非对称加密:公钥/私钥 (rsa,椭圆曲线:区块链中公钥/私钥就应用了)


3. 分布式系统核心系统

    中央式结构改成分布式系统,碰到的第一个问题就是一致性的保障。很显然,如果一个分布式集群无法保证处理结果
    一致的话,那任何建立于其上的业务系统都无法正常工作。

一致性问题

     在分布式系统中,一致性(Consistency,早期也叫Agreement)是指对于系统中的多个服务节 点,给定一系列操作,
     在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果 达成某种程度的一致。如果分布式系统能实现
     “一致”,对外就可以呈现为一个功能正常的,且性能和稳定性都要好很 多的“虚处理节点”。

共识算法

     实际上,要保障系统满足不同程度的一致性,往往需要通过共识算法来达成。共识算法解决的是对某个提案
   (Proposal),大家达成一致意见的过程。提案的含义在分布 式系统中十分宽泛,如多个事件发生的顺序、某个键
     对应的值、谁是领导等等,以认 为任何需要达成一致的信息都是一个提案。
     注:实践中,一致性的结果往往还需要客户端的特殊支持,典型地通过访问足够多个服务节 点来验证确保获取共识后
     结果。

     一般地,把故障(不响应)的情况称为“非拜占庭错误”,恶意响应的情况称为“拜占庭错 误”(对应节点为拜占庭
     节点)。

 

     针对非拜占庭错误的情况,一般包括Paxos、Raft及其变种。
     对于要能容忍拜占庭错误的情况,一般包括PBFT系列、PoW系列算法等。从概率角度,PBFT系列算法是确定的,一
     旦达成共识就不可逆转;而PoW系列算法则是不确定的,随着 时间推移,被推翻的概率越来越小。

分布式系统原理

     即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。这个结论,被称为FLP不可能性
     原理,可以看做分布式领域的“测不准原理”。

FLP不可能性原理
    FLP不可能原理:在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决
    一致性问题的确定性算法。

    FLP不可能原理实际上告诉人们,不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法。

    FLP原理实际上说明对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。这岂不是意味着
    研究一致性问题压根没有意义吗?
    科学告诉什么是不可能的;工程则告诉你,付出一些代价,可以把它变成可能。

    回答这一问题的是另一个很出名的原理:CAP原理。


CAP原理
    该原理被认为是分布式系统领域的重要原理。

    分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition),设计中往
    往需要弱化对某个特性的保证。

  • 一致性(Consistency):任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这指的是强一致性; 
  • 可用性(Availablity):在有限时间内,任何非失败节点都能应答请求; 
  • 分区容忍性(Partition):网络可能发生分区,即节点之间的通信不可保障。

    比较直观地理解,当网络可能出现分区时候,系统是无法同时保证一致性和可用性的。要么,节点收到请求后因为没有
    得到其他人的确认就不应答,要么节点只能应答非一致的结果。好在大部分时候网络被认为是可靠的,因此系统可以提
    供一致可靠的服务;当网络不可靠 时,系统要么牺牲掉一致性(大部分时候都是如此),要么牺牲掉可用性。

弱化一致性
    对结果一致性不敏感的应用,可以允许在新版本上线后过一段时间才更新成功,期间不保证 一致性。例如网站静态页
    面内容、实时性较弱的查询类数据库等,CouchDB、Cassandra    等为此设 计。
弱化可用性
    对结果一致性很敏感的应用,例如银行取款机,当系统故障时候会拒绝服务。MongoDB、 Redis等为此设计。
    Paxos、Raft等算法,主要处理这种情况。
弱化分区容忍性
    现实中,网络分区出现概率减小,但较难避免。某些关系型数据库、ZooKeeper即为此设 计。实践中,网络通过双通
    道等机制增强可靠性,达到高稳定的网络通信。
 

ACID原则
    即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久 性)。ACID    原则描述
    了对分布式数据库的一致性需求,同时付出了可用性的代价。

  • Atomicity:每次操作是原子的,要么成功,要么不执行
  • Consistency:数据库的状态是一致的,无中间状态
  • Isolation:各种操作彼此互相不影响
  • Durability:状态的改变是持久的,不会失效

    一个与之相对的原则是BASE(Basic    Availiability,Soft    state,Eventually    Consistency), 牺牲掉对一致
    性的约束(最终一致性),来换取一定的可用性。

 

拜占庭问题

    又叫拜占庭将军(Byzantine     Generals Problem)问题,是Leslie    Lamport    1982年提出用来解释一致性问题的
    一个虚构模型。拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要
    通过信使来传递消息,达成某些一致的决定。但由于将军中可能存在叛徒(系统中节点出错),这些叛徒将努力向
    不同的将军发送不同的消息,试图会干扰一致性的达成。

    拜占庭问题即为在此情况下,如何让忠诚的将军们能达成行动的一致。


    假如节点总数为N,叛变将军数为F

  • 提案人不是叛变者,提案人发送一个提案出来,叛变者可以宣称收到的是相反的命令。则对于第三个人(忠诚者)收到两个相反的消息,无法判断谁是叛变者,则系统无法达到一致。
  • 提案人是叛变者,发送两个相反的提案分别给另外两人,另外两人都收到两个相反的消息,无法判断究竟谁是叛变者,则系统无法达到一致。
  • 更一般的,当提案人不是叛变者,提案人提出提案信息,则对于合作者来看,系统中会有N-F份确定的信息1,和    F份不确定的信息(可能为1或0,假设叛变者会尽量干扰一致的达成),N-F > F,即N > 2F情况下才能达成一致。

尝试说明区块链解决拜占庭问题(有错误请指出来)

首先说明:Leslie    Lamport证明,当叛变者不超过2/1时,存在有效的算法,不论叛变者如何折腾,忠诚的将军们总能达成一致的结果。如果叛变者过多,则无法保证一定能达到一致性。

存在有效的算法基于:将军基于最多胜利的说法为准,下图最终以正确进攻为准,因为正确将军节点大于1/2.

这也引出了区块链51%计算力的问题,如果拜占庭节点大于50%,则最后胜出的是错误链,因为区块链最终会以最长连为基准。这里的说法可能有点牵强,毕竟区块链与拜占庭问题是不同的场景,节点没有这么多的认为观念。
 

 

发布了115 篇原创文章 · 获赞 81 · 访问量 14万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览