区块链技术

一.密码学基础

1.哈希计算

性质
    1.1 抗碰撞性:不同的内容被映射成了一样的哈希值,但是高效的人为制造碰撞是很难的!当然使用蛮力是可以的(输出空间的有限性导致这是不可避免的)主要用于数据的防篡改(可信任)存在例外:md5  可以被人为制造碰撞

    1.2 hiding 单向不可逆性:哈希值不会泄露原始数据  但是能够代表原始数据

    1.3 puzzle friendly 谜题友好型: 看输入是很难预测哈希结果的,计算的哈希值结果是不可预测的,比如某个输入x,想要哈希值H(x)在某个范围内,没有什么捷径可走,只能一个个去尝试这个x

    [很难计算出结果但是很容易验证] 这也是计算量共识机制的设计原理

2.签名 


    用于账户管理:开户就是创立一对公钥和私钥
    asymmetric encryotion algorithm:非对称加密
    私钥private key解密,公钥pbkey加密
    私钥签名;公钥验签

    ps:暴力生成公私钥对来匹配别人的公私钥,以此来破解别人的账户是非常非常难的(前提是你有一个很好的随机源)


3.使用方法

区块链使用的是:公钥加密 私钥解密 ;这个过程反过来叫做签名:私钥加密的数据只有公钥能解密,这样持有公钥的人就能知道收到的数据肯定是私钥拥有者签发的(因为别人没有这个私钥)

 

二.区块链数据结构:哈希指针+数据组成的区块


1.哈希指针:

不同于普通指针,在指向前一个快的同时还保存了前一个区块的hash值。
这就导致如果我们想篡改其中一个块就必须修改后面所有的块,成本巨大

因此,本地节点一般不需要保存所有的数据块,而是最新的几个,需要前面的快的时候只需要找系统中其他节点拿就可以了,然后使用本地的哈希指针依次验证是否正确即可

2.merkle tree 默克尔树
只要记住根哈希,就能检测出链表中任何部位的修改,相当于保护了整棵树!

二. 分布式xx 协议

1.区块链组成

第一个块:A铸币10个

第二个块:A给B和C转账5个

第三个块:B给C和D转账

区块链技术_第1张图片

一次交易分成输入和输出两部分:输入是收款方的地址和转账方的公钥以及铸币块里的公钥输出(原因下面有解释)

币的来源哈希指 针:每个币的来源都是可追踪溯源的,避免出现 double spending

2.协议内容:

A给B转账,需要的前提条件是(公钥加密--私钥解密)
2.1.输入部分:A要知道B的收款地址:收款地址就是收款方公钥转hash得到的 可以直接对外公开
2.2.输出部分:所有节点都要知道A的公钥来验证A这笔转账的合法性(A的钱是真实存在的 来源合法)
  但是存在的可能是A的公钥是假的(安全漏洞),因此A的公钥不能单纯由A自己给出,A给出的公钥应该铸币交易里的输出对得上才可以(A确实有10个币)

2.3.区块结构
_______________________________________________________________________________________________
区块链技术_第2张图片

2.4. 全节点full node 和 轻节点light node
轻节点因为没有以前的交易信息,因此是无法验证交易合法性的

2.5.  distributed consensus (账本内容要取得分布式共识distributed consensus,谁来记账?)
2.5.1 每个节点都可以发布交易 参与交易,但是谁来打包区块?

2.5.2 学术上的不可能结论:
    ①在一个异步系统(asynchronous)里,但凡有一个节点不同步,都是无法达成共识的!
    ②CAP Theorem:三个性质只能满足两个 
        Consistency 一致性 
        Avalibility 网络获得性
        Partition torlarance 分区容错性

2.5.3 共识协议要解决的是系统中少数的恶意节点(分区容错)
 H(block header) <= target
 比特币利用block header中设计好的规则,要求节点进行大量计算才能获得块的记账权
 这就是工作量证明,对于恶意节点,如果要执行恶意记账,他就需要比其他节点更强的计算能力,成本会很高
 本质上是通过提高犯罪成本来制止犯罪!

 2.5.4 激励机制 (mining ”挖矿“)
 为了激励节点来记账,规定获得记账权的节点能够在”初块“中获得一定数量的奖励,也就是铸币权利。

 

 

你可能感兴趣的:(web3.0,区块链,分布式账本)