《区块链技术与应用》北大肖臻老师——课程笔记【1-3】

  • 一、课程介绍
  • 二、密码学原理
    • 1.哈希
      • 1.哈希碰撞(cryptographic hash function)
      • 2.不可逆性(hiding)
      • 3.Puzzle friendly
    • 2.比特币系统中的账户管理
  • 三、比特币的数据结构
    • 1.哈希指针(hash pointers)
    • 2.默克尔树(merkle tree)

提示:课程视频链接 https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.999.0.0

提示:以下内容只是个人在学习过程中记录的笔记,可供参考。如有错误或不足之处,请大家指正

一、课程介绍

从区块链的整体发展来看,现在还是处于非常早期阶段。
区块链不等于比特币。比特币是基于区块链技术的一种加密货币。

学习参考资料:
1、比特币白皮书中文版
2、以太坊白皮书中文版+注释
3、以太坊黄皮书
4、Solidity官方文档(v8.0)

二、密码学原理

比特币是一种加密货币(crypto-currency)。区块链上所有的交易内容都是公开的,包括账户地址、转账金额等。
在比特币系统中,主要运用了密码学中的两个功能,一个是哈希,一个是签名。

1.哈希

密码学中使用的哈希函数有两个重要性质。

1.哈希碰撞(cryptographic hash function)

哈希碰撞是指两个输入通过哈希函数计算出来的哈希值相等。哈希碰撞比较常见,比如在哈希表中,不同的输入可能会被映射到同一个哈希位置。

哈希碰撞的作用:用来检测对信息的篡改。
低效地解决哈希碰撞的方法:暴力破解(brute-force),遍历所有输入的可能性,找到哈希碰撞的输入。这种方法工作量太大,低效。
注:哈希碰撞是不可避免的,因为输入空间大于输出空间。哈希碰撞是客观存在的,没有什么高效的方法,人为地去制造哈希碰撞。(MD5加密算法已经可以被人为地计算出哈希。)

2.不可逆性(hiding)

不可逆性是指哈希函数的过程是单向的,不可逆的。这个性质成立的前提是输入的空间要足够大,使得暴力破解的方法不可行,而且输入的分布要比较均匀,各种取值的可能性都差不多。

不可逆性的作用:
可以和哈希碰撞结合在一起,用来实现哈希函数将预测结果加密,实际结果发布后将预测结果和实际结果对比,能够使人信服预测结果是在实际发布前预测的(digital commitment/digital equivalent of sealed envelope)。
sealed envelope 现实意义是指如果一个人预测结果,但是不能提前公开,因为只要公开,不论预测结果对错,都会影响现实世界的变化。但是可以将预测结果交给第三方公证,待事实结果发布后,公开并比较预测结果与事实结果。

3.Puzzle friendly

比特币中运用的哈希函数还要求第三个性质——Puzzle friendly
哈希值的计算事先不可预测,只根据输入很难预测出输出。如果需要找出一个哈希值存在某个范围内,只能通过一个一个运算才能找出。

Puzzle friendly这个性质保证了比特币系统中,只能通过挖矿获得比特币。

挖矿就是找一个随机数nonce,nonce和区块头里其他信息合在一起作为输入,取出一个哈希来,那个哈希值要小于某个指定的目标预值,只能通过一个一个试,才能找出在范围中的值。挖矿的过程没有捷径,只能通过大量的一个一个试nonce,才能找到符合要求的值,这个过程叫做工作量证明(POW,proof of work)。
当有人找到了符合要求的nonce发布出去后,其他人要验算是否符合要求只需要算一次哈希值是否小于目标预值。挖矿很难,验证很容易。这个性质叫做difficult to solve,but easy to verify。

比特币中用的哈希函数叫做SHA-256。SHA指secure hash algorithm,满足哈希函数的三个性质。

哈希碰撞(collision resistance)和Puzzle friendly性质有一定联系,但不完全一样。

2.比特币系统中的账户管理

比特币是去中心化的,每个用户可以自己开设账户,不需要任何人批准。开户的过程就是创立一对公私钥。

公私钥概念来源于非对称加密体系(asymmetric encryption algorithm)。
最早的加密体系是对称加密(symmetric encryption algorithm) ,发送方和接收方事先商量好一个密钥(encryption key),发送发将信息加密后发送给接收方,接收方收到后用密钥解密,对称加密的前提是能有个安全的信道,将密钥安全地分发给通讯方。(弱点:密钥分发不方便)

比特币中的公钥私钥作用:用于签名。
交易发起方用自己的私钥对交易进行签名,其他人收到交易后用发起方的公钥去验证签名是否正确。
产生两个相同公私钥的账户的可能性微乎其微。
生成公私钥的过程是随机元
(a good source of randomness)

非对称加密使用接收方的公钥和私钥,公钥加密,私钥解密。
好处:加密公钥不需要保密,私钥保存在本地,解决了对称加密中密钥分发不方便的问题。

比特币中使用的签名算法,不光是生成公私钥的时候要有好的随机元,之后每一次签名的时候也要有好的随机元。只要有一个签名的过程中用的随机元不好,就有可能泄露私钥。

三、比特币的数据结构

1.哈希指针(hash pointers)

普通的指针存储的是某个结构体在指针中的地址,哈希指针要存储地址和哈希值。

比特币中最基本的数据结构就是区块链。区块链是一个一个区块组成的链表。

区块链与其他普通链表的区别:
区块链用哈希指针代替了普通的指针。
区块链的一个哈希指针改变会影响其他哈希指针,普通指针变化不会影响其他的指针。

哈希指针的内容是把整个区块的内容取哈希.

区块链数据结构的好处:
通过这种数据结构可以实现 tamper-evident log
(防篡改log,后一个区块保存了前一个区块的哈希值,前一个区块修改了区块的内容,哈希值会改变,后一个区块会找不到前一个区块的哈希指针,所以就要修改后一个区块的哈希指针,以此类推,系统保留的哈希指针也得改,就只需要记住系统中保留的哈希,就可以检测出任何一个部位的修改。)
比特币可以根据这个性质,只保存最近的几个区块哈希。如果需要找之前的区块,可以用哈希指针找到正确的区块。

2.默克尔树(merkle tree)

Merkle tree 和 binary tree 的区别:
用哈希指针代替了普通的指针

Merkle tree 的好处:只要记住根哈希就可以检测出对树中任何部位的修改。

比特币当中各个区块用哈希指针连接在一起,每个区块所包含的交易是组织成Merkle tree 的形式。每个区块分为两部分,块头(block header)和块体(block body),根哈希值存储在块头中,即这个区块所包含的所有交易组成的Merkle tree 的根哈希值是存储在这个区块的块头中,但是块头中没有交易的具体内容,只有根哈希值。块体中有交易的列表。

Merkle tree的用途:
提供Merkle proof
比特币中的节点分为两类:
全节点:保存整个区块的内容,包括块头和块体,有交易的具体信息
轻节点:只保存块头,如手机上的比特币钱包

如何向轻节点证明某个交易是写入区块链中?
使用Merkle proof,找到交易所在的位置。(从交易一直往根节点的路径就是Merkle proof。)

轻节点向某个全节点发出请求,请求一个能够证明交易被包含在这个Merkle tree 的 Merkle proof,全节点收到请求后,只要全节点请求的哈希值(红色的)发给轻节点即可,轻节点可以通过这些哈希值在本地计算出SPV本地计算哈希值(绿色的),首先算出交易的哈希值,再算出上一个节点的哈希值,把红色和绿色的哈希值拼接起来可以算出上一个的绿色哈希值,再和旁边红色哈希值拼接可以算出上一层哈希,以此类推算出整棵树的根哈希值。轻节点把根哈希值和块头的哈希值比较就可以知道交易是不是在Merkle tree 里。轻节点收到Merkle proof后只要从下往上验证,沿途的哈希值都是正确的,即可证明。

注:查询哈希值时只能查询某个交易的从下往上分支的哈希,不能查询其他分支的哈希。
这种证明叫做proof of membership或proof of inclusion,即证明Merkle tree 包含了某个交易。时间复杂度是O(log n)
proof of no membership证明Merkle tree不包含某个交易。

低效方法:
可以把整棵树传给轻节点,轻节点验证整棵树的构造都是对的,验证交易不在叶节点中。时间复杂度是O(n)。

没有更高效的方法。如果对叶节点的哈希做排序要求,就可以有好的方法证明交易不存在。(sorted merkle tree 排好序的merkle tree )
有循环的链表不能使用哈希指针,会产生循环依赖。


提示:以上是我个人针对肖臻老师1-3节课整理的笔记内容,后续会发布后面课程的笔记。

《区块链技术与应用》北大肖臻老师——课程笔记【1-3】相关推荐

  1. 《区块链技术与应用》北大肖臻老师——课程笔记【21-23】

    <区块链技术与应用>北大肖臻老师--课程笔记[21-23] 一.权益证明 二.ETH-TheDAO 提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考.如有错 ...

  2. 《区块链技术与应用》北大肖臻老师——课程笔记【4-5】

    <区块链技术与应用>北大肖臻老师--课程笔记[4-5] 一.比特币协议 比特币脚本(BitCoin Script) Paxos协议 比特币 中的共识协议 (consensus in Bit ...

  3. 《区块链技术与应用》北大肖臻老师——课程笔记【6-8】

    <区块链技术与应用>北大肖臻老师--课程笔记[6-8] 一.BTC网络 二.BTC-挖矿难度 三.BTC-挖矿 提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供 ...

  4. 《区块链技术与应用》北大肖臻老师——课程笔记【11-12】

    <区块链技术与应用>北大肖臻老师--课程笔记[11-12] 一.BTC-问答 二.BTC-匿名性 1.匿名性 2.零知识证明 提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课 ...

  5. 《区块链技术与应用》北大肖臻老师——课程笔记【13-18】

    <区块链技术与应用>北大肖臻老师--课程笔记[13-18] 一.BTC-思考 1.哈希指针 2.区块恋 3.分布式共识 4.比特币的稀缺性 5.量子计算 二.ETH-以太坊概述 1.以太坊 ...

  6. 《区块链技术与应用》北大肖臻老师——课程笔记【19-20】

    <区块链技术与应用>北大肖臻老师--课程笔记[19-20] 一.ETH-挖矿算法 二.ETH-难度调整 提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考.如 ...

  7. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[29]总结

    质疑区块链的原因: (1)区块链的概念被滥用 ①保险公司的理赔问题 国外有人提出将保险理赔业务放在区块链上,因为现在的保险理赔业务太慢了(大约需要几个星期),如果把保险理赔业务用比特币系统实现的话,等 ...

  8. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[18]以太坊-Mining算法

    一.工作量证明(POW) 1.比特币系统的工作量证明 对于基于工作量证明的系统来说,Mining是保障区块链安全的重要手段(Block chain is secured by mining),比特币里 ...

  9. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[10]BTC思考

    1.BTC在设计的过程中很多地方用到了哈希指针,如块头就包含指向前一个区块的哈希指针,指针保存的是本地内存的地址,只在这台计算机上才有意义,发送到其他计算机上就没有意义了,那么在发布区块的时候哈希指针 ...

最新文章

  1. Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
  2. 记录yarn被攻击的解决办法
  3. oracle 连接greenplum,Oracle通过DBLINK访问GreenPlum
  4. 「深圳云栖大会」大数据时代以及人工智能推动下的阿里云异构计算
  5. mesh和wifi中继的区别_深度解读Mesh路由和无线中继的差异,谁才是性价比之选?...
  6. jqgrid for asp.net 单页全选记录ID
  7. win用户计算机批量添加用户,在WIN2K3AD中用dsadd批量添加域用户
  8. maya藤蔓插件_MAYA快速打造藤蔓生长的路径动画教程
  9. 【BZOJ4011】【HNOI2015】落忆枫音 拓扑图DP,
  10. 全栈项目-乐优商场-分类管理-前端-页面渲染
  11. Ubuntu-图形界面和字符界面切换快捷键
  12. JavaScript进阶(8)-ES6简介及新增let和const关键字
  13. F5 GTM DNS 知识点和实验 6 -智能DNS算法
  14. 原形网络(Prototypical Networks)基于PyTorch的实现
  15. 免费-进销存、Erp系统、、crm系统、oa系统推荐锦集
  16. 为什么usb计算机连接无法识别,无法识别usb设备,教您电脑出现无法识别usb设备怎么办...
  17. OpenCV中waitKey()函数的深度解析
  18. java工具类获取文件扩展名与content-type、http与content-type映射关系
  19. 使用ESP32CAM读取视频流
  20. 《Arduino实验》实验:土壤湿度传感器检测土壤湿度

热门文章

  1. oracle存储过程循环更新数据库,oracle 存储过程循环语法
  2. java curses_Linux Unix C 中的curses库——curses.h
  3. IOT项目流水账 20191029
  4. 学校计算机班班通维护保养记录,班班通的使用与维护
  5. 计算机在校学校目标和措施,学校信息化工作方案
  6. java计算机毕业设计智慧养老院管理系统源码+mysql数据库+系统+部署+lw文档
  7. C# 开发压缩软件项目实战
  8. HTML的div与span:<div></div>与<span></span>
  9. matlab数字图像处理之局部直方图均衡化
  10. 华为AR1200路由器清空console密码