北京大学肖臻老师《区块链技术与应用》公开课
Crypto-Currency
Cryptographic hash function:
MD5已经找到哈希碰撞的方法
digital commitment
digital equivalent of a sealed envelope
例子:股市预测,预测某只股票 x 明天会涨停,为了防止预测会对第二天股市产生影响,所以在第二天股市结束前,需要对 x 进行保密封存。但是为了保证 x 在第二天公布时没有被更改,需要公布一个公开的凭证 H(x)。第二天股市结束后,通过公布的 x 加密后与 H(x)进行比对,判断预测是否篡改,x 正确后查看 x 这只股票是否涨停判断预测是否准确。但是会存在一个问题,股票的支数有限,通过暴力碰撞对所有的股票进行 H(y) = H(x),能够找到 y = x,提前猜出 x,继续被股民利用。所以一般会利用 H(x || nonce) 值进行公开
例子二:挖矿,寻找nonce(4 bytes),使得 x = 其他区块信息 + nonce,H(x) 的值满足一定条件(前面n未为0)H(block header) ≤ target,因为没有其他高效方法去计算的出nance,所以只能不停的使用不同nance去试,就产生了Proof of work
SHA-256:Secure Hash Algorithm
BTC账户(public key,private key)
asymmetric encryption algorithm
encyption key
非对称秘钥:加密和解密使用的是同一个人的一对公钥/私钥,将公钥公开,需要发送消息的人使用公钥对信息进行加密,接收方只有使用私钥才可以解密获取信息
BTC中账户者需要转账,为了确保身份准确,转账时使用私钥对转账信息签名,然后发布,其他用户使用公钥对转账信息进行校验
a good source of randomness 防止多人生成同一对公私钥
BTC 的数据结构包含
hash 指针包含两个部分(地址hash+数据hash,即地址和地址内的数据)
区块链底层hash链表使用hash指针代替普通指针
Block chain is a linked list using hash pointers.
全节点(block header + block body)
轻节点(block header)如:比特币钱包
Merkle proof:找到某个交易,从这个交易能够达到根节点
double spending attack:双花攻击
full node/full validating node
light node
distributed consensus 分布式共识
distributed hash table
FLP impossibility result
asynchronous system
faulty
CAP Theorem
Paxos:CP
membership hyperledger fabrac
Sybil attack
forking attack
新增区块并不会产生比特币,只是记录交易记录
唯一产生比特币的途径:Coinbase transation
block reward
起初,每产生一个区块,发布50个BTC。21万个区块以后,每产生一个区块,发布BTC数量减半,发布25个BTC
比特币设计的出块时间大概是10分钟,每减半大概需要210000*10/60/24/365≈4年
mining digital gold
miner
transation-based ledger
UTXO:Unspent Transaction Output
total inputs = total outputs
transation fee
account-based ledger
下面是一个区块信息范例:
区块头源码:https://github.com/bitcoin/bitcoin/blob/master/src/primitives/block.h
nNonce为32位的无符号整形,最多有2^32个值,可能所有值都无法生成符合难度的hash
概率分析:
Bernoulli trial:a randorm experiment with binary outcome
Bernoulli process:a sequence of independent Bernoulli trials
memeryless:无记忆概率(掷硬币),progress free
Poisson process
exponential distribute: 出块时间呈指数分布
geonetric series
比特币总量:21万50+21万25+21万12.5+… = 21万50*(1+1/2+1/4+…) = 2100万
BitCoin is secured by mining
confirmation
one confirmation -> two confirmation -> three confirmation…-> six confirmation 一个小时
irrevocable ledger
zero confirmation
selfish mining:
The BitCoin Network
application layer:BitCoin Block chain
network layer: P2P Overlay Network
simple, robust, but not efficient
flooding
区块大小限制1M
best effort
H(block header) ≤ target
SHA-256 2^256
difficulty = (difficulty_|_target)/target
51% attack
以太坊:ghost,orphan block(uncle reward)
201610/60/24=14天 调整一次target
target=targetactual time/expected time
actual time:time spend mining the last 2016 blocks
CPU(通用计算) -> GPU(通用并行计算) -> ASIC(挖矿专用):Application Specific Integrated Circuit(只适合某一种币)
mining puzzle,merge mining
Alternative mining puzzle:ASIC resistance
pool manager -> miner
share, almost valid block 降低挖矿难度
矿池在各个国家的比例
on demand computing(mining)
Proof of Burn 验证过程:当前交易的输入脚本和前一个交易的币的来源的输出脚本拼接在一起进行校验 交易的output不需要验证
AltCoin AlternativeCoin
digital commitment
Coinbase
发布交易不需要记账权,创建区块需要记账权
state fork
forking attack
deliberate fork
protocd fork
hard fork
:block size limit(1M -> 4M) 1000,000/250=4000个交易 4000/60/10=7 tx/sec
新节点承认旧节点,旧节点不承认新节点
bch和btc因为区块扩容而分叉
ETC -> ETH
soft fork
:如:P2SH, Pay to Script Hash, redeem Script。第一步证明脚本没有改动,第二步证明满足脚本执行的条件
coinbase前8个字节作为extra nonce+nonce = 2^((4+8)*8) = 2^96
原来在链上的合法交易,软分叉后可能变为不合法
新节点不承认旧节点,旧节点承认新节点
软分叉迫使其他旧版本必须升级
soft fork | hard fork |
---|---|
有超过一半节点升级 | 所有节点升级 |
Q1:转账时,被转账人不在线怎么办? A1:不需要被转账者在线
Q2:转账时,可能存在转给一个不存在的收款人吗? A2:存在
Q3:账户私钥丢失怎么办? A3:没有办法,门头沟事件(Mt.Gox)
Q4:账户私钥泄露怎么办? A4:将资产转移到其他安全账户上
Q5:转账时,写错地址怎么办? A5:没有办法
Q6:挖矿时,发布一个nonce,别人把收款地址改成自己的可以吗? A6:不可以,区块打包多条交易记录,修改coinbase tx内容发生变化,导致merkel tree改变,根hash发生了变化后,原来的nonce值无法对应(根hash和nonce都存在block header里)
Q5:交易时,交易费转给谁? A5:不需要提前知道,发布区块时转给发布者,交易费 = total inputs - total outputs
Bitcoin and anonymity
privacy
pseudonymity
unnamed lake
Silk road: eBay for illegal drugs, TOR
Silk road 2
hide your identity from whom?
如何提高个人匿名性? coin mixing