区块链基础知识笔记

目录

一、分布式系统核心问题

二、密码学和安全技术

三、比特币

四、以太坊

五、超级账本


一、分布式系统核心问题

1、一致性问题:对于分布式系统中的多个服务节点,给定一系列操作,在给定协议的保障下,使他们对处理结果达到“某种程度”的认同

2、一致性要求

    可终止性:一致的结果在有限的时间内能完成

    约同性:不同节点最终完成决策的结果是相同的

    合法性:决策的结果必须是某个节点提出的提案

——》越强的一致性要求往往造成越弱的处理线性能力,以及越差的可扩展性

——》强一致性包括:顺序一致性和线性一致性

 

3、共识算法

    一致性指分布式系统中多个副本对外呈现的数据的状态。

4、一致性和共识算法并不完全相同:
(1)一致性描述多个节点对数据状态的维护的能力。而共识算法描述多个节点之间,彼此对某个状态达成一致性结果的过程。

(2)一致性描述的是结果状态,共识则是一种手段

(3)达成某种共识并不意味这保障了一致性

5、常见共识算法:

(1)解决非拜占庭的普通错误——》Crash Fault Tolerance(CFT)类算法——》包括Paxos,Raft及变种——》性能较好,处理快,容忍不超过一般的故障点

(2)容忍拜占庭错误——》Byzantine Fault Tolerance(BFT)类算法——》包括PBFT代表的确定性算法、PoW代表的概率算法——》性能较差,容忍不超过1/3故障节点

——》确定性算法,达成结果的共识就不可逆转,即共识就是最终结果

——》概率类算法,共识结果是临时的,随着时间的推移或者某种强化,共识结果被推翻的概率越来越小

6、FLP不可能原理(测不准原理)

(1)定义:在网络可靠,但允许节点失败(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。

——》不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法

(2)同步和异步

同步:指系统中各个节点的时钟误差存在上限,且消息传递必须在一定时间内完成,同时各个节点完成处理消息的时间是一定的。——》容易判断消息是否丢失

异步:系统中各个节点可能存在较大的始终差异,且消息传输时间是任意长的,各节点对消息处理的时间也可能是任意长的。——》无法判断消息没被响应是在哪里处理问题(节点故障还是传输故障?)。现实中的系统往往都是异步系统

7、CAP原理

(1)定义:分布式系统中不可能同时确保一下三种特性:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition)

——》一致性:任何操作都是原子的,此时指强一致性

——》可用性:在有限时间内,任何非失败节点都能应答请求

——》分区容忍性:网络可能发生分区,即节点之间的通信不可保障

由于大多数时候网络被认为是可靠的,因此系统可以提供一致可靠的服务

当网络不可靠时,系统要么牺牲掉一致性(多数场景下),要么牺牲掉可用性。

 

8、ACID原则——》描述一致性原则

(1)定义:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

(2)ACID描述分布式数据库需要满足一致性需求时,同时允许付可用性的代价。

(3)BASE原则:牺牲掉一致性的约束(最终实现一致性),来换取一定的可用性

(4)ACID和BASE是相对的,他们分别是对CAP三特性的不同取舍

 

二、密码学和安全技术

  1. Hash:Hash值在应用中常被称为指纹或摘要,经Hash计算后结果相同,则有极大概率认为文件内容与原内容文件相同
  2. 冲突避免:很难找到两段内容不同的明文,使他们的Hash值一样(发生碰撞)

在给定明文下,无法找到与之碰撞的其他明文,则算法具有“弱抗碰撞性”

无法找到任意两个发生Hash碰撞的明文,则算法具有“强抗碰撞性”

  1. 常见Hash算法:

MD4:输出128位

MD5:输入512位进行分组,输出128位,不具“强抗碰撞性”

SHA-1:输出长度160位,抗穷举性更好,不具备“强抗碰撞性”

 

  1. 加解密算法

对称加密:密钥相同;计算效率高;需提前共享密钥,易泄露;DES、3DES、AES、IDEA

非对称加密:密钥不想管;计算效率低,存在中间人攻击;RSA、ELGamal、椭圆曲线系列算法

  1. 对称密码分为两种:分组密码和序列密码

分组密码:DES、3DES、AES、IDEA

DES:64位明文加密为64位密文,密钥长度64位(实际长度是56位)

3DES: 三重DES操作:加密-》解密-》加密

AES:分组长度为128、192、256位三种,密钥长度是128位

IDEA:类似于3DES,密钥长度增加到128位

序列密码(流密码):RC4

对称密码适用于大量数据的加解密过程,不能用于签名

  1. 非对称加密:基于大数质因子分解、离散对数、椭圆曲线等数学难题

代表算法:RSA、ELGamal、椭圆曲线(ECC)、SM2

私钥通过随机数算法生成,公钥根据私钥生成;加密强度往往不如对称加密算法

RSA:经典公钥算法

Diffie-Hellman密钥交换:基于离散对数无法快速求解,双方协商一个公共密钥

ELGamal:利用模运算下离散对数困难特性

椭圆曲线算法(ECC):具备较高的安全性,但加解密比较费时

SM2:国家商用密码,基于椭圆曲线算法,加密强度优于RSA

非对称加密算法一般适用于签名和密钥协商

  1. 混合加密机制:TLS协议
  2. DH密钥交换协议:

基于离散对数问题,原根知识

  1. 消息认证码和数字签名:消息防篡改和身份认证

 

消息认证码:基于对称加密,用于对完整性进行保护

HMAC的三个要素(K,H,Message):K为共享对称密钥,H为提供的Hash算法,Message为要处理的消息内容

消息认证码使用共享密钥,当密钥被多方拥有时,无法确定某个确切身份,反之,采用非对称加密方式,就可以追溯身份来源,即数字签名

 

数字签名:基于非对称加密,可证明内容的完整性,并确定数据来源(即不可抵赖

签名过程:对数据内容进行摘要,然后用自己的私钥进行加密(签名),然后将文件和签名值都发送给对方。

验证过程:用公钥解密签名,得到数字摘要,与收到文件进行摘要后的结果进行比较。

典型的数字签名算法:DSA和ECDSA

  1. 数字证书:加密数字证书 和 签名验证数字证书

加密数字证书——用于加密信息的公钥

签名验证数字证书——用于解密签名进行身份验证的公钥

  1. 公钥通过证书机制来进行保护

证书的生成、分发、撤销等过程遵循PKI体系

  1. PKI基本组件:

CA:证书的颁发和作废,接收来自RA的请求

RA:对用户身份进行验证,负责登记,审核过了就发给CA

证书数据库:存放证书,多采用X.500系列

流程:用户通过RA登记申请证书,提供身份和认证信息;CA审核后将证书发送给用户。需要撤销证书需向CA发出申请

10、证书签发的两种形式:

签发证书实质:对用户的公钥,用CA私钥进行签名,故所有人都可以用CA的公钥验证签名

①由CA生成证书(含公钥)和对应的私钥发送给用户

②用户自己生成公钥和私钥,由CA对公钥内容进行签名(保证私钥的私密性)

 

三、比特币

1、比特币:非对称加密算法,用户保留私钥,对自己发出的交易进行签名,并公开公钥

比特币账户——用户公钥经过一系列Hash及编码运算后生成的160位(20字节)字符串

2、负反馈调节:

   比特币网络中矿工越多,系统越稳定,比特币价值越高,但挖矿概率会降低

    反之,矿工减少,系统更容易被攻击,比特币价值降低,但挖矿概率会提高

  1. PoW共识机制

不实现面向最终确认的共识,而是基于概率、随时间逐步增强确认的共识。现在达成的结果在理论上是可以被推翻的,只要攻击者付出的代价随时间而指数级上升,被推翻的可能性随之指数级下降

 

  1. 挖矿:

是参与维护比特币网络的节点,通过协助生成新区块来获取一定量新增比特币的过程

  1. 挖矿过程

参与者综合上一个区块的Hash值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数X,一起打包到一个候选新区块,让新区块的Hash值小于比特币网络中给定的一个数。这个数越小,计算出来就越难。

区块链技术和安全的过程使得陌生人之间在没有被信任的第三方时产生信任。

  1. 闪电网络

将大量交易放到比特币区块链之外进行,只把关键环节放到链上进行确认。

 

四、以太坊

1、以太坊:智能合约、基于账户的交易、以太币和燃料

(1)智能合约:接收来自外部的交易请求和事件,通过触发运行提前编写好的逻辑代码,生成新的交易和事件,进一步调用其他智能合约

(2)账户:

    合约账户:存储执行智能合约代码,只能被外部账户调用激活

    外部账户:以太币拥有者账户,对应到某公钥,由个人来控制

(3)交易:在以太坊中从一个账户到另一个账户的消息数据(以太币或者合约执行参数)

2、共识机制

    以太坊采用成熟的Pow共识变种算法Ethash协议。与原始PoW的密集型Hash计算不同,Ethash执行时只消耗大量内存,而跟计算效率关系不大

3、降低攻击

    以太坊降低攻击的核心思想是:通过经济激励机制防止少数人作恶

4、可扩展性

    通过分片机制提高整个网络的扩展性。分片是一组维护和执行同一批智能合约的节点组成的子网络。

    分片后,同一片内的合约处理是同步的,彼此达成共识。不同分片之间是异步的,从而提高网络整体的可扩展性。

5、编写智能合约和DApp的IDE,如Truffle、Embark、Remix

 

五、超级账本

1、Fabric项目——引入权限管理支持,基于Go语言,支持可插拔、可扩展

2、Sawtooth项目——基于python语言,实现低功耗的PoET共识机制,支持交易族

3、Iroha项目——基于C++语言,设计类似Fabric,提供基于C++的开发环境

4、Blockchain Explorer项目——是区块链平台的浏览器,基于Node.js语言,提供Web操作界面,可用来快速查看区块链平台的运行信息

5、Cello项目——区块链管理平台,提供区块链即服务,实现区块链环境的快速部署,主要开发语言为Python和JavaScript,

6、Indy项目——打造一个基于区块链和分布式账本技术的数字中心管理平台,支持去中心化,支持跨区块链和跨应用操作,实现全球化的身份管理;基于Python语言

7、Composer项目——由NodeJs语言开发,使用JavaScript语言定义应用逻辑

8、Burrow项目——基于Go语言实现,支持以太坊虚拟机的智能合约区块链平台,支持Proof-of-Stake共识机制和权限管理

你可能感兴趣的:(区块链,区块链基础知识,密码学,分布式系统)