区块链基础知识

根据B站上北大教授肖老师的教学视频记录的

视频链接:https://www.bilibili.com/video/BV1Vt411X7JF

密码学基础

区块链中密码学的核心概念:hash签名

hash有三个重要的特性

  1. collision resistance
  2. hiding
  3. puzzle friendly

分别的解释:

特征解释
collision resistance(碰撞抵制)很难找到 x , y x,y x,y,使得 h ( x ) = h ( y ) h(x)=h(y) h(x)=h(y)
hiding x → h ( x ) x\rightarrow h(x) xh(x)容易,但是 h ( x ) → x h(x)\rightarrow x h(x)x
puzzle friendly其分布难以控制

比如sealed envelope,A方发布消息,B方接受消息。hiding可以保证B方很难破解消息,而碰撞抵制可以防止A方进行篡改。这个签名过的消息则保存在可信的第三方。

目前广泛使用的是SHA-256(secure hash algorithm)

在密码学中,分为对称加密非对称加密。非对称加密中,包含有公钥与私钥 ( p u b l i c k e y , p r i v a t e k e y ) (public key, private key) (publickey,privatekey)。pk加密,sk解密。需要注意的是用的是同一人的pk和sk。而签名正好相反,sk签名,pk验证。

区块链中,发送消息,通常是先hash,然后再签名。

数据结构

比特币中的2个重要的数据结构

  1. 区块链
  2. merkle tree
区块链

重要概念:hash指针,除了包含地址,还包含结构体的hash值(为的是防篡改)

区块链是使用了hash指针的链表(linked list)

某个区块里面的hash指针的取值为,前面整个区块的内容和它里面的指针一起hash得到的结果。

最后一个保存在系统中的hash指针值可以检测出前面任意的区块是否被篡改,叫做tamper-evident log。牵一发动全身,多米诺骨牌的效果。

merkle tree

最底层为data block,其它的节点都是hash指针,对根节点节点取的hash值为root hash。与区块链类似,root hash可以检测对其它任意内容的篡改,而且效率更高,因为其类似于二叉树的结构。

每个区块所包含的交易会组织成merkle tree,最底下的数据块都是比特币的交易块。

每个区块分为块头和块身,block header和block body。block header只记录root hash,而具体的交易记录在block body中。

merkle proof,是一连串的merkle路径,其可以证明merkle tree中包含了某个交易。(复杂度logn)

sorted merkle tree(对交易块取hash值,并排序),用于不存在证明(这样的复杂度还是logn)。比特币中因为不需要不存在证明,所以不是用排序merkle tree

协议

比特币的共识机制

普通的数字货币的问题
  1. 双花攻击(double spending attack)
  2. 中心化(每一次交易都要经过央行)
比特币
  1. 谁发行(挖矿)
  2. 验证有效性(防范双花攻击),所有用户共同维护一个数据库,即区块链

交易中,需要发款人的签名和收款人的地址(相当于银行账号),地址是通过收款人的公钥推算出来的(hash+转换);输入部分说明币的来源,以及A的pk,输出部分给出收款人pk的hash 。

每个区块分为块头块身

概念组成
block headerversion, hash of previous block header, merkle root hash, target, nonce H ( b l o c k h e a d e r ) < = t a r g e t H(block header) <= target H(blockheader)<=target,hash的值是针对block header的
block bodytransaction list

节点分为:full node和light node;系统中大多数的节点是轻节点

账本的内容要取得分布式共识(distribution consensus)

比特币中的共识协议:

有些节点有恶意的

membership,投票权的问题

比特币系统中创建账户特别容易,只需要生成一对公私钥。

sybil attack(女巫攻击),即创建很多个 账户,一直投票

比特币系统中,不是根据账户数,而是根据计算力来投票。

找到nonce,4个bytes,该节点就可以获取到记账权。

最长合法链的概念(longest valid chain)

forKing attack,通过往中间位置插入一个区块,来回滚已经发生过的交易。

正常的也会出现分叉链,比如同时有2个节点(矿工)获取到记账权,并写入。

orphan block被舍弃掉的区块

为什么要竞争记账权,因为会有奖励,block reward,每过21万个区块减半。
50->25->12.5

铸币交易,coinbase transaction,发行比特币的唯一方式,不用指明来源。

解puzzle,来获得记账权,没有捷径(puzzle friendly),只能一个nonce一个nonce地计算。

争夺记账权的过程称为挖矿(mining)

每一个区块都是被挖出来的。

实现

transaction-based ledger 基于交易的账本(隐私保护好)

需要说明币的来源和去处,没有账户的概念

UTXO: unspent transaction output

每个交易有多个输入和多个输出

total inputs = total outputs

比特币系统设计的第二个激励机制:交易费(第一个激励,初块奖励,21万减半),要保证挖矿的难度,确保10分钟挖出一个。

21w * 10 / (60 *24 * 365) ~~ 4年,即每四年减半

你把你的交易打包在我的区块里,我会给你一定的交易费

account-based ledger 基于账户的账本

比如以太坊使用的就是这种模式

计算hash值都只算block header

具体求解nonce的时候,会受tx的影响,实际上2层遍历,对一层遍历merkle tree里面的tx,第二个是nonce。

挖矿:

Bernoulli trial: a random experiment with binary outcome

Bernoulli: a sequence of independent Bernoulli trials

memoryless(多次实验不会相互影响)

出块时间服从指数分布;10分钟,属于系统的平均出块时间;将来还要挖多长时间和过去挖了多久没有关系,这样保证了公平性

总共的比特币总量为2100万,总量守恒,区块链无限长。

21w * 50 *(1+0.5+0.25+…+…)

Bitcoin is secured by mining.

多等几个确认(第六次确认),被篡改的概率会呈指数级下降

confirmation

irrevocable ledger

zero confirmation(交易发生了,但还没有往区块链里面写 )

self mining(挖好了先藏着,然后一下全部发出去,前提是算力足够强)

比特币网络、挖矿难度

设计原则:简单 鲁棒 而不高效

比特币中所有的节点都是对等的

应用层:bitcoin blockchain

网络层:P2P Overlay network

每个区块的最大限制为1M

挖矿难度

H ( b l o c k h e a d e r ) < = t a r g e t H(block header) <= target H(blockheader)<=target

target越小,越难

Hash使用的是SHA-256

2 256 2^{256} 2256

如果挖矿的时间设置得过短,可能会出现很多分叉

网络延迟过大,分叉情形更加容易出现

51% attack危害很大

好人的算力被分散了,恶意攻击者可以一直加长一个链

以太坊出块时间为15s,也需要保持稳定

2016*10/60/24=14天

target = target * (actual time / expected time)

actual time = time spent mining the last 2016 blocks

由于nbits的存在,恶意节点如果故意不调,会不被接受

Hash Rate,算力

挖矿难度与算力增长都大致呈指数级增长

挖矿

全节点与轻节点

是否一致在线

是否保存整个区块链

比特币网络中,大多数都是轻节点

比特币安全:1.密码学机制2.共识机制

挖矿设备:

CPU->GPU挖矿,效率提高(大规模的并行系统)->ASIC

现在流行用ASIC(专门用来挖矿的芯片)挖矿

一个芯片只能为一种货币挖矿

购买矿机要提前预定

矿池(矿主和矿工,矿工只负责挖矿,不知道别的,矿主负责组装一个区块,让矿工去试nonce,矿工不能自己私自发布区块)

矿池之间存在竞争关系,所有可以派一些搞乱的矿工去别的矿池,挖到后故意丢弃。

根据矿工的share计算工作量

矿池带来的危害,使得51%攻击容易了

分叉攻击、boycott攻击

回答(提问,巩固知识)
  1. 转账时,不要求收款人在线。该交易只需要记录就可以。
  2. 创建账户时,其它节点都不知道,第一次转账后才会通知其它节点。
  3. 私钥丢失了,由于去中心化,没办法找回密码,账户里面的钱就没有了,永远取不出来了;如果私钥泄露了,可以把钱转到另外的安全账户上。公私钥一旦生成就不能更改了,所以只能重新创建一个账号。
  4. 如果转钱时收款人地址写错了,怎么办?没有办法取消已经发布的交易。地址是由公钥的hash得到的。如果是非法的地址(即不存在的公钥),那钱就再也取不出来了。
  5. 不存在偷答案,每个矿工挖到的nonce都是和自己的收款地址绑定在一起的。
  6. 事先不需要知道哪个矿工获得交易费,一个交易会有很多个输入与输出,当total inputs大于total outputs时,差值作为交易费。哪个矿工挖到了,就可以计算出交易费。
  7. 每天产生的区块数目差不多的,交易数目的变化主要取决于每个区块中包含的交易数目。
bitcoin and anonymity

与隐私保护有关

pseudonymity(一种假的匿名)

比特币的匿名性比真实货币差,比电子银行好。

影响比特币匿名性的:

输入地址有多个,很有可能是同一个人的。这些地址会被关联起来。

资金的转入转出,盯住交易链

支持比特币支付

总结:比特币的匿名性并不好

多路径转发(TOR,洋葱路由)

coin mixing,

匿名性不好的本质:公开的,不可篡改的

零知识证明:

同态隐藏

x ≠ y , E ( x ) ≠ E ( y ) x\neq y, E(x)\neq E(y) x=y,E(x)=E(y)

E ( x ) → x E(x)\rightarrow x E(x)x很难

给定E(x)和E(y),很容易计算出某些关于x,y的加密函数值

同态加法: E ( x ) 、 E ( y ) → E ( x + y ) E(x)、E(y) \rightarrow E(x+y) E(x)E(y)E(x+y)

同态乘法: E ( x ) 、 E ( y ) → E ( x y ) E(x)、E(y) \rightarrow E(xy) E(x)E(y)E(xy)

盲签

具有更好的匿名性:零币和零钞(匿名性来源于密码学保证,它们都不主流)

思考:

hash指针:实际中只有hash,没有指针

(key, value)(区块的hash,区块的内容)levelDB

hash指针的性质保证了区块的不可篡改性

区块恋👫,把私钥划分为多个,目前使用的是256位私钥

不安全:破解难度降低很多

多个人的账户,建议使用多重签名。 MULTISIG(每个私钥独立产生)

UTXO里面的死钱很麻烦

分布式共识:理论上不可能,现实中为什么可以取得共识(理论和现实的差距)

比特币的稀缺性:矿工为什么要挖矿,为了获得收益

总量定死的货币不适合做货币,应当要有通货膨胀的能力

类似于房地产,如果房价一直疯长,那么有钱的人越来越有钱,没钱的人越来越买不起房

量子计算:对密码学造成巨大的打击;量子计算首先会对电子货币造成威胁,而不是比特币;取hash的时候,其实信息已经有一定的丢失了,所以不用害怕量子。SHA-256不可逆。

公钥的hash作为地址

比特币是区块链1.0;以太坊是区块链2.0(memory hard)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值