北京大学肖臻老师《区块链技术与应用》公开课

BTC-密码学原理

Crypto-Currency
Cryptographic hash function:

  • collision resistance:【x≠y, H(x)=H(y)】,collision free:[没有方法高效的找出y使得已知x,找到y使得H(x)=H(y)]
  • hiding:x —>H(x), H(x) -×->x
  • puzzle friendly:0000000…XXX…XX,difficult to solve, but easy to verify

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 签名

BTC账户(public key,private key)
asymmetric encryption algorithm
encyption key
非对称秘钥:加密和解密使用的是同一个人的一对公钥/私钥,将公钥公开,需要发送消息的人使用公钥对信息进行加密,接收方只有使用私钥才可以解密获取信息
BTC中账户者需要转账,为了确保身份准确,转账时使用私钥对转账信息签名,然后发布,其他用户使用公钥对转账信息进行校验

a good source of randomness 防止多人生成同一对公私钥

BTC-数据结构

BTC 的数据结构包含

  • hash pointers
  • Merkle tree

hash pointers

hash 指针包含两个部分(地址hash+数据hash,即地址和地址内的数据)
区块链底层hash链表使用hash指针代替普通指针
Block chain is a linked list using hash pointers.

Merkle tree


全节点(block header + block body)
轻节点(block header)如:比特币钱包

Merkle proof:找到某个交易,从这个交易能够达到根节点

  • Proof of membership
    Proof of inclusion
    复杂度:O(log(n))
  • Proof of non-membership
    复杂度:O(n)
    Sorted Merkle tree 复杂度:O(log(n)) 比特币未使用(没有必要)

BTC-协议

double spending attack:双花攻击

中心化交易



full node/full validating node
light node

Consensus in BitCoin

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

BTC-实现

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

  1. 时间是非严格的,可以在一定范围内存在误差
  2. 可以调整merkle root值来计算符合hash的区块
    CoinBase会产生创世区块币,通过修改某个tx,从而影响merkle root,生成新的hash值可能,这样就产生了2^96个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:

BTC-网络

The BitCoin Network

application layer:BitCoin Block chain


network layer: P2P Overlay Network

simple, robust, but not efficient
flooding
区块大小限制1M
best effort

BTC-挖矿难度

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=target
actual 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)

BTC-比特币脚本


















Proof of Burn 验证过程:当前交易的输入脚本和前一个交易的币的来源的输出脚本拼接在一起进行校验 交易的output不需要验证

AltCoin AlternativeCoin
digital commitment
Coinbase
发布交易不需要记账权,创建区块需要记账权

BTC-分叉

  • 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
有超过一半节点升级 所有节点升级

BTC-问答

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

BTC-匿名性

Bitcoin and anonymity
privacy
pseudonymity
unnamed lake
Silk road: eBay for illegal drugs, TOR
Silk road 2
hide your identity from whom?
如何提高个人匿名性? coin mixing

  • 零知识证明:一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除陈述是正确的外的任何信息。如:签名
  • 同态隐藏:
    如果x, y不同,那么它们的加密函数值E(x) 和 E(y)也不相同
    给定 E(x) 的值,很难反推出x的值
    给定E(x) 和 E(y)的值,我们可以很容易地计算出某些关于x, y的加密函数值

    • 同态加法:通过E(x) 和 E(y)计算出E(x + y)的值
    • 同态乘法: 通过E(x) 和 E(y)计算出E(xy)的值
    • 拓展到多项式
      例子:Alice想要向Bob证明她知道一组数x和y使得x+y=7,同时不让Bob知道x和y的具体数值。
      Alice把E(x) 和 E(y)的数值发给Bob,Bob通过收到的E(x) 和 E(y)计算出E(x + y) 的值(利用了性质3),Bob同时计算E(7)的值,如果E(x + y) = E(7),那么验证通过,否则验证失败
  • 盲签方法
    • 用户A提供SerialNum,银行在不知道SerialNum的情况下返回签名Token,减少A的存款
    • 用户A把SerialNum和Token交给B完成交易
    • 用户B拿SerialNum和Token给银行验证,银行验证通过,增加B的存款
    • 银行无法把A和B联系起来
    • 中心化
  • 零币和零钞
    • 零币和零钞在协议层就融合了匿名化处理,其匿名属性来自密码学保证
    • 零币(zerocoin)系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务
    • 零钞(zerocash)系统使用zk-SHARKs协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易金额,所有交易通过零知识验证的方式进行

BTC-思考

  1. hash pointer:hashPrevBlock没有实际指针,存在数据库中levelDB(key,value)
  2. 区块恋:将秘钥分成两部分分别保管,安全性降低了 2^256 / 2^128 = 2^128 倍
  3. 分布式共识:为什么比特币系统能够绕过分布式共识中的那些不可能结论?比特币的共识并非最终共识,存在分支
  4. 比特币的稀缺性
  5. 量子计算:距离实用还很遥远,比特币的地址取的是公钥的hash

区块链技术与应用-BTC相关推荐

  1. BTC:简单易懂比特币之比特币的神奇——区块链技术的体现

    BTC:简单易懂比特币之比特币的神奇--区块链技术的体现 目录 BTC的七大特殊之处 BTC的七大特殊之处 1.一个没有CEO的公司,管理几十万员工: 2.每个员工自私自利,争权夺利,公司运作9年风生 ...

  2. 北京大学肖臻老师《区块链技术与应用》公开课笔记8——BTC挖矿篇

    北京大学肖臻老师<区块链技术与应用>公开课笔记 比特币挖矿篇,对应肖老师视频:click here 全系列笔记请见:全系列笔记请见:click here About Me:点击进入我的Pe ...

  3. [北大肖臻-区块链技术与应用笔记]第八节课——BTC 分叉

    文章目录 [北大肖臻-区块链技术与应用笔记]第八节课--BTC 分叉 state fork protocol fork 硬分叉(hard fork) block size limit 软分叉(soft ...

  4. 北京大学肖臻老师《区块链技术与应用》公开课笔记13——BTC匿名性篇2(零知识证明)

    北京大学肖臻老师<区块链技术与应用>公开课笔记 比特币回顾问答篇,对应肖老师视频:click here 全系列笔记请见:click here About Me:点击进入我的Personal ...

  5. 区块链技术之以太坊ETH白皮书

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 基于中本聪区块链比特币1.0之后,天才少年Vitalik Buterin(V神)在2013年年末发布了以太坊白皮书,其实 ...

  6. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  7. 区块链技术没那么复杂,别被大佬们忽悠晕了

    这两年数字货币很火,不过很多人把数字货币和区块链等同于一码事,其实这是两个完全不同的概念.区块链是一项技术,而数字货币是区块链的一种应用而已,但区块链的应用远不止于此,只不过当下区块链的应用只有数字货 ...

  8. 什么是区块链技术?初学者指南

    本文翻译自:https://blockgeeks.com/guides/what-is-blockchain-technology/ 如果涉及侵权,还望告知! 区块链技术是新的互联网吗? 区块链无疑是 ...

  9. 2019.01.07|区块链技术头条

    2019.01.07|区块链技术头条 1.科普 | 深处的蚁穴:与 Gas 相关的三种安全问题 2.科普 | OmiseGo 将如何把 Plasma 带入寻常百姓家 3.干货 | 详解 MimbleW ...

最新文章

  1. binostat matlab,MATLAB概率统计函数(2)
  2. kali linux安装搜狗输入法的方法
  3. 简单总结过去的2021年
  4. 【译】Attacks against machine learning — an overview
  5. Android system.img 打包解包
  6. C和指针之strcat函数 strchr函数 strcmp函数 strcpy函数 strnchr函数 strstr函数实现
  7. 项目管理修炼之道之估算工作
  8. centos6.8安装mysql5.5
  9. Docker常见问题
  10. x86基础之数与数据类型
  11. 数组、集合、链表实现学生成绩管理系统
  12. 如何用python计算数独_用python解决数独
  13. 数字图像处理02:直方图均衡化imhist函数的python实现
  14. java 打印 xps_使用Java 将PPT转换为PDF、XPS等格式
  15. 什么是请求报文和响应报文?
  16. 2021年山东省安全员C证考试及山东省安全员C证模拟考试
  17. 玩转oj之1003题(地球人口承载力估计)
  18. stm32f407zg跟ze的区别_STM32各系列比较:F1-F2-F4.pdf
  19. #Revit二次开发# 创建剖面视图
  20. 机器学习科研助手总结

热门文章

  1. ghost win7旗舰版系统安装图文教程
  2. Replication进阶(三) 复制心跳详解
  3. LaTex 数学之运算符
  4. python拦截广告弹窗_selenium+python处理广告弹窗
  5. 南柯服务器压力,性能/负载/压力测试 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  6. PowerShell yarn : 无法加载文件 C:\Users\Admin\AppData\Roaming\npm\yarn.ps1,因为在此系统因为在此系统上禁止运行脚本。
  7. Code4app素材网站
  8. 回顾1024长沙程序员节的收获
  9. 新方法破解Wi-Fi WPA2加密平均只需10分钟
  10. php获取蓝凑云文件列表,自制蓝奏云网盘解析接口全解