主页 > 以太坊imtoken > hashcash在比特币中的应用

hashcash在比特币中的应用

以太坊imtoken 2023-12-10 05:08:15

比特币的支付流程及原理

在比特币的世界里,用户有一个标识符来代表他们的身份(或地址)。这个标识符是用户的公钥信息(用base58编码)。如果你有公钥,你自然会有私钥,但是私钥不是公开的,只有你自己知道(这点很重要)。

假设A要转5个BTC(比特币的简称)给B,这个信息会在整个比特币网络中广播,每个收到广播的节点(包括A和B自己)都会更新自己的本地账本(A减少 5 BTC,B 增加 5 BTC)。这样就完成了交易。看起来很简单。但是很容易想到一个问题:如何证明这个广播消息的合法性?

关键是要证明这个广播是A发的,不是别人发的。这里用到了数字签名的原理:

A会用自己的私钥对广播进行签名,网络中的其他节点会用A的公钥验证签名(数字签名原理)。这里就不多说了,不明白的自行google),验证通过后更新本地账本。

其他人无法伪造此类广播,因为他们没有私钥。知道私钥的重要性,如果你的私钥被破解,分分钟你就会破产!

比特币使用的数字签名是基于非对称椭圆曲线算法的,有兴趣的可以研究一下。

1.jpg

图片来自网络

签名数据源

比特币简写

虽然这里没有提到签名的原理,但是用于签名的数据源还是需要了解的。

数据源由A之前的交易和B的公钥组成,很容易获取,是B的地址。那么如何理解A之前的交易呢?

2.jpg

图片来自网络

比特币的网络不会记录每个人的余额,例如 A 有 100 个比特币,B 有 30 个比特币。网络记录每个人的交易信息。简单来说,入账为+,出账为-。每次交易时,您都可以通过遍历您的交易来查看您有多少钱。

这个机制的核心是保证每笔交易不独立,必须引用之前的交易,所以比特币的交易信息在网络中的某条链上传递。

这里有一条规则,每笔交易都必须用完所有传入的信用并将余额发送给自己。比如A最初有100个BTC(可以认为是系统的初始分配),然后A想从B那里购买商品,需要支付B 20 BTC,A会先用完之前的所有信用(100 BTC) ,然后发现实际付款金额(20 BTC)与报价单不同,将差额(80 BTC)发送给自己。

双重消费

不记录余额的目的是为了防止伪造账簿和篡改余额。有人可能会问,交易不能被伪造吗?当然可以。

比特币简写

3.jpg

图片来自网络

如上图,恶意用户A引用了他的信用信息(Frank之前某段时间给他转账了5个比特币,说明他的余额充足),从B那里购买了一件商品,他广播5个BTC支付给B。同时,A也引用了相同的入口信息,向自己广播了5个BTC。 B收到A的转账信息后,就发货了。

但是,由于网络传播时间的不同,网络中的一些节点可能会先收到第二次广播,然后这个信用信息会被标记为已使用,而其他节点会收到第一次广播。第一次开播,大家都以为自己最先收到的是正版,所以无法确定这5个BTC到底是A还是B,最惨的是B,丢了货,赔了钱。

这就是所谓的比特币双花陷阱。

在传统的货币体系中,这个问题很容易解决,因为有一个中央机构(银行)为你验证每一笔交易,但比特币的核心是去中心化,没有这个所谓的中央机构。

如何解决这个问题? hashcash 终于来了!

hashcash的原理可以参考另一篇文章,这里不再赘述。

关于哈希现金

区块链和hashcash区块链的概念:

交易按时间排序比特币简写,然后根据排序结果进行分组比特币简写,每组为一个Blocks,将这些Blocks链接在一起就是区块链。

比特币简写

4.jpg

图片来自网络

什么是区块信息

p>

同一个区块的交易同时发生,交易的数量可以是任意的。块内的这些交易唯一地标识了该块。这个标识符实际上是每个交易的哈希结果的组合。每笔交易的hash就是各自交易的信息(如交易时间、交易的买卖双方的地址等)。

区块中除了哈希结果的组合,还有其他信息,比如时间戳、随机数等,这个随机数对于后面“猜答案”非常重要,所以先卖掉吧。

结果是每个块都有唯一的外部信息。请记住这一点。

7.jpg

图片来自网络

如何加入区块链

比特币简写

只要能将一个区块添加到现有区块链中,就是合法区块。那么如何加入区块链是关键。

比特币网络中的任何节点(比如你自己)都可以生成区块,并且可以申请加入现有的区块链。

那么比特币网络如何决定哪个是区块链的下一个区块?可能有多个不同的节点同时产生新的区块,因此节点不能依赖接收区块的顺序。

比特币通过 hashcash 解决了这个问题。

如前所述,每个区块除了基本的交易信息外,还有一个随机数,也就是hashcash中所谓的戳记。而这个随机数就是邮票的第 7 个字段。即不断尝试满足前缀的N位全为0的条件。(这个N会随着计算机的不断发展而增加难度,达到计算的平衡)

5.jpg

图片来自网络

只有在满足条件时才会被接受为区块链的一部分。这也称为工作量证明。生成区块的节点需要证明该节点已经投入了足够的计算资源来解决一个数学问题。

区块链如何防止双重支出

交易是否合法的关键在于它是否可以加入有效的区块链。假设 A 支付 B,B 等交易被确认并添加到链上,然后发货。

比特币简写

A 伪造交易并将钱退回给自己。如果交易要被全网识别,A必须生成比原链更长的区块链,并将交易添加到链中。但事实上,这几乎是不可能做到的。一台计算机甚至可能需要数年的时间来“猜测”一个块,而跨网络的计算机的能力可以在几分钟内解决它。想要伪造交易以实现双花的个人必须与整个比特币网络竞争。你的计算速度再快,也比不上全网。

6.jpg

图片来自网络

矿工

如前所述,攻击者需要与整个比特币网络的计算能力竞争。这种算力的贡献大部分来自一些个人或组织(现在大部分是组织,个人很少)。他们贡献自己的计算资源来解决块。我们称这些组织为矿工。旷工的存在使得比特币的整个系统更加安全。矿工的作用是验证交易和维护区块链。他们工作的回报是比特币。

区块链越长越安全

这很好理解。交易在链中越靠后,就越难被篡改。因为比特币网络只接受最长的区块链作为有效区块链,对于攻击者来说,引入假区块不仅需要解决一个数学问题,还需要与其他正常节点竞争生成所有后续节点才能让其他节点接受他们自己的区块链作为有效链,这几乎是不可能的。

参考文献

[1]

[2]