赞
踩
目录
碰撞阻力(Collision Resistance):找到两个不同的输入a
和b
,使得H(a) = H(b)
是非常困难的。
隐秘性(Pre-image Resistance):给定一个输出H(a)
,找出输入a
是非常困难的。
谜题友好(Puzzle Friendliness):“矿工公平”,找到一个特定的X
以使得H(X)=Y
是一个没有捷径的任务。这有助于确保矿工公平竞争。
私钥签名:只有拥有私钥的人才能生成一个有效的数字签名。
公钥验证:任何人都可以使用公钥来验证签名是否有效。
是一个单向链表,链表的头是第一个区块。
创始区块(Genesis Block):这是区块链中的第一个区块。
区块结构:
哈希指针:每个新区块都有一个哈希指针,该指针是前一个区块头的哈希值。
ptr
是指向前一个区块头哈希的指针。为什么只哈希区块头而不是整个区块(Header 和 Body)?
在区块链中,区块头通常包含以下几个主要元素:
版本(Version):用于跟踪区块链软件的版本。
上一个区块的哈希(Previous Block Hash):这确保了区块之间的连续性。
默克尔树根(Merkle Root):一个用于验证交易集合完整性的数据结构。
时间戳(Timestamp):标记该区块创建的时间。
难度目标(Difficulty Target):这与挖矿过程中需要解决的数学问题有关。
随机数(Nonce):一个随机数,用于挖矿。
默克尔树(32Bytes)
- H(H(H(T1) + H(T2)) + H(H(T3) + H(T4)))
- / \
- H(H(T1) + H(T2)) H(H(T3) + H(T4))
- / \ / \
- H(T1) H(T2) H(T3) H(T4)
用于储存在区块头里以验证所有交易的完整性。
默克尔根(Merkle Root):上图中的最顶层哈希值。它由下面所有的交易哈希值通过特定的组合和哈希运算得到。
原理:碰撞阻力(Collision Resistance)、
不可更改历史记录(Immutability):
篡改之前的区块是不可能的:每一个区块都包含前一个区块的哈希。因此,更改旧区块将导致后续所有区块的哈希值都发生变化。
篡改最新区块也几乎是不可能的:尽管理论上最新的区块最容易受到攻击,但实际上由于网络的分布式验证和工作量证明(Proof of Work)机制,篡改也是极其困难的。
PoW使得篡改区块链非常困难。为了改变已经添加到区块链的信息,攻击者需要重新进行所有相关区块的PoW计算,这几乎是不可能的。
但是,那个puzzle的答案是公布的,如果攻击者先拿到这个答案,再广播篡改后的区块怎么办?
第一步是广播区块头:这一步已经包括了默克尔根(Merkle Root),确保交易的完整性。
第二步是广播区块体:这一步是在验证区块头后进行的,进一步确保数据的不可篡改性。
有完整的账本:存储整个区块链的所有信息,包括每个区块头和区块体。
更高的安全性:由于全节点存储所有信息,它们能进行更全面的验证。
只有所有区块头的信息:不存储区块体的信息,只存储区块头。
资源需求较低:由于只保存区块头,轻节点占用的存储空间和处理能力要远低于全节点。
又叫“手机钱包”,可以支撑手机中的转账。
例如:别人给我转了五个比特币,我怎么知道他真的转了?
验证Merkel根是否和手机中的相同即可。
假设交易是随机排列的,所以确认一个交易是否在树中的时间复杂度是O(n)还是O(1)?
如果找merkel path,那就是(logn),如果逐个比对哈希,那就是O(n),O(1)应该搞不定
(如果先对下面的交易排序了)
用默克尔证明(Merkle Proof)。也是找merkel path,详见下面的链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。