- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1
1
网络安全技术
刘振
上海交通大学 计算机科学与工程系电 信 群 楼 3-509 liuzhen@sjtu.edu.cn
比特币简介
比特币简介
1 比特币的账本
2 比特币的交易
3 比特币的脚本语言
4 比特币的区块
5 比特币挖矿
6 比特币网络
7 比特币:从交易到上链
8 比特币的矿池
9 比特币的交易处理能力
10 比特币的协议升级
11 比特币中的一些攻击
4.
4.比特币的区块
PAGE 3
PAGE 3
交易“体小量大”,自然而然的想法就是把交易打包成
“块”、对块来操作,从而达到提高效率的目的。
在把交易打包到块的过程中如何组织这些交易?
可以有各种方式
比特币使用的是一种称为Merkle Tree的数据结构
Merkle Tree
用Hash指针建立的二叉树
能够快速地(对数级复杂度)判定一个数据是否在一个集合中
能够快速地判定集合中是否有数据被篡改
4.
4.比特币的区块:Hash指针
Hash指针
数据data的hash值H(data)蕴含了data的存储位置信息,即可以通过H(data) 的值读取到数据。从而,h(data)不仅指明了数据的存储位置,也提供了对数据是否被篡改过的验证证据。从一个hash 值y处读取数据data,只有当y=H(data)成立,才说明数据没有被篡改过。例
例如,比特币中每个交易的hash是交易的唯一标识。
data
data
ev:HH(Hash链
ev:H
H(
prev:H(
prev:H( )
pr
( )
prev: )
H()
data
data
data
只需要记住最后的这个hash值,就能保证整条链的防篡改性。
基于的什么密码学原理?
4.
4.比特币的区块:Merkle Tree
Merkle Tree
数据放在叶子节点,除了叶子节点之外,每个节点包含两个指向其子节点的Hash指针。(每个节点的Hash值存在其父节点中)
任何数据被篡改的话,会影响该节点到根节点这个路径上所有节点的Hash值,当然也包含根节点的Hash值。所以,存储根节点Hash值即可保证数据的不可篡改性。
问题:Merkle Tree的每个内部节点需要多大存储空间?
隶属关系证明
在Merkle Tree中可以高效地证明一个隶属关系:一个数据在一个Merkle Tree的数据集合中
输入:a) Merkle Tree 根节点的Hash值 b) 一个数据块,及从该数据块到根节点的路径上所有 节点
对于有n个叶子(数据成员)的Merkle Tree中,需要的空间和时间复杂都是log(n)。
4.
4.比特币的区块:Merkle Tree
隶属关系证明
在Merkle Tree中可以高效地证明一个隶属关系:一个数据在一个Merkle Tree的数据集合中
输入:a) Merkle Tree 根节点的Hash值 b) 一个数据块,及从该数据块到根节点的路径上所有 节点
对于有n个叶子(数据成员)的Merkle Tree中,需要的空间和时间复杂都是log(n)。
4.
4.比特币的区块
比特币把交易用Merkle Tree打包成区块(Block),区块之间用Hash指针链起来,形成“区块链”(Blockchain)
PAGE 18
PAGE 18
区块链中“Hash”和“链”的只是区块头(Block head)
交易的Merkle Tree的根节点的Hash值在区块头中,保证了块中的交易数据被“包含在链中”
修改交易数据,会影响到Merkle Tree根节点的Hash值,进而影响到整个块的
Hash值
区块:
区块头
区块主体(交易数据)
字段大小
字段
大小
描述
previousblockhash
32字节
前一区块Hash值
merkleroot
32字节
交易Merkle Tree根节点的Hash值
difficulty
4字节
挖矿的难度系数
nonce
4字节
挖矿挖到的临时随机数
区块(头)标识:
区块Hash值
区块本身的Hash值是区块的唯一性标识。
区块Hash值并不包含在区块的数据结构里,不管是该区块在网络上传输时,抑或是它作为区块链的一部分被存储在某节点的永久性存储设备上时。
任何人都可以根据区块数据计算其Hash值,实际上区块Hash值是当该区块从网络被接收时由每个节点计算出来的。
区块的哈希值可能会作为区块元数据的一部分被存储在一个独立的数据库表中,以便于索引和更快地从磁盘检索区块。
区块高度
创世区块的高度是0,其后每个区块的高度比前一个区块高度加1。
区块高度并不是唯一的标识符,有可能两个相同高度的区块同时存在、竞争在区块链中的位置。
区块高度也不是区块数据结构的一部分,它并不被存储在区块里。当节点接收来自比特币网络的区块时,会动态
文档评论(0)